Skip to content

Commit

Permalink
os/bluestore: alert on fm/bdev size mismatch
Browse files Browse the repository at this point in the history
Relates to: https://tracker.ceph.com/issues/39151

Signed-off-by: Igor Fedotov <ifedotov@suse.com>
(cherry picked from commit a3ab32e)
  • Loading branch information
ifed01 committed Apr 17, 2019
1 parent 649c67d commit 13f6f71
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/mon/PGMap.cc
Expand Up @@ -2996,6 +2996,8 @@ void PGMap::get_health_checks(
summary = "BlueStore compression broken";
} else if (asum.first == "BLUESTORE_LEGACY_STATFS") {
summary = "Legacy BlueStore stats reporting detected";
} else if (asum.first == "BLUESTORE_DISK_SIZE_MISMATCH") {
summary = "BlueStore has dangerous mismatch between block device and free list sizes";
}
summary += " on ";
summary += stringify(asum.second.first);
Expand Down
18 changes: 18 additions & 0 deletions src/os/bluestore/BlueStore.cc
Expand Up @@ -4822,6 +4822,19 @@ int BlueStore::_open_fm(KeyValueDB::Transaction t)
fm = NULL;
return r;
}
// if space size tracked by free list manager is that higher than actual
// dev size one can hit out-of-space allocation which will result
// in data loss and/or assertions
// Probably user altered the device size somehow.
// The only fix for now is to redeploy OSD.
if (fm->get_size() >= bdev->get_size() + min_alloc_size) {
ostringstream ss;
ss << "slow device size mismatch detected, "
<< " fm size(" << fm->get_size()
<< ") > slow device size(" << bdev->get_size()
<< "), Please stop using this OSD as it might cause data loss.";
_set_disk_size_mismatch_alert(ss.str());
}
return 0;
}

Expand Down Expand Up @@ -13803,6 +13816,11 @@ void BlueStore::_log_alerts(osd_alert_list_t& alerts)
{
std::lock_guard l(qlock);

if (!disk_size_mismatch_alert.empty()) {
alerts.emplace(
"BLUESTORE_DISK_SIZE_MISMATCH",
disk_size_mismatch_alert);
}
if (!legacy_statfs_alert.empty()) {
alerts.emplace(
"BLUESTORE_LEGACY_STATFS",
Expand Down
5 changes: 5 additions & 0 deletions src/os/bluestore/BlueStore.h
Expand Up @@ -2698,6 +2698,7 @@ class BlueStore : public ObjectStore,
set<string> failed_compressors;
string spillover_alert;
string legacy_statfs_alert;
string disk_size_mismatch_alert;

void _log_alerts(osd_alert_list_t& alerts);
bool _set_compression_alert(bool cmode, const char* s) {
Expand Down Expand Up @@ -2725,6 +2726,10 @@ class BlueStore : public ObjectStore,
}

void _check_legacy_statfs_alert();
void _set_disk_size_mismatch_alert(const string& s) {
std::lock_guard l(qlock);
disk_size_mismatch_alert = s;
}

private:

Expand Down

0 comments on commit 13f6f71

Please sign in to comment.