From: Sage Weil Date: Mon, 8 Feb 2021 18:53:51 +0000 (-0600) Subject: mgr/DaemonState: store optional wear_level for devices X-Git-Tag: v16.2.0~152^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=26b884fd71ddff33fbab05e0998bb67d79113f92;p=ceph.git mgr/DaemonState: store optional wear_level for devices Signed-off-by: Sage Weil (cherry picked from commit c52fcb51afb6da2dccd6954a40f0f1c616324855) --- diff --git a/src/mgr/DaemonState.cc b/src/mgr/DaemonState.cc index b9e1b04ea6c9..32cbbe3b9c0b 100644 --- a/src/mgr/DaemonState.cc +++ b/src/mgr/DaemonState.cc @@ -39,6 +39,10 @@ void DeviceState::set_metadata(map&& m) if (p != metadata.end()) { life_expectancy_stamp.parse(p->second); } + p = metadata.find("wear_level"); + if (p != metadata.end()) { + wear_level = atof(p->second.c_str()); + } } void DeviceState::set_life_expectancy(utime_t from, utime_t to, utime_t now) @@ -71,6 +75,16 @@ void DeviceState::rm_life_expectancy() metadata.erase("life_expectancy_stamp"); } +void DeviceState::set_wear_level(float wear) +{ + wear_level = wear; + if (wear >= 0) { + metadata["wear_level"] = stringify(wear); + } else { + metadata.erase("wear_level"); + } +} + string DeviceState::get_life_expectancy_str(utime_t now) const { if (life_expectancy.first == utime_t()) { @@ -115,6 +129,9 @@ void DeviceState::dump(Formatter *f) const f->dump_stream("life_expectancy_stamp") << life_expectancy_stamp; } + if (wear_level >= 0) { + f->dump_float("wear_level", wear_level); + } } void DeviceState::print(ostream& out) const @@ -133,6 +150,9 @@ void DeviceState::print(ostream& out) const << life_expectancy.second << " (as of " << life_expectancy_stamp << ")\n"; } + if (wear_level >= 0) { + out << "wear_level " << wear_level << "\n"; + } } void DaemonStateIndex::insert(DaemonStatePtr dm) diff --git a/src/mgr/DaemonState.h b/src/mgr/DaemonState.h index 1c3b785f25bc..8c21305a9c23 100644 --- a/src/mgr/DaemonState.h +++ b/src/mgr/DaemonState.h @@ -220,12 +220,15 @@ struct DeviceState : public RefCountedObject pair life_expectancy; ///< when device failure is expected utime_t life_expectancy_stamp; ///< when life expectency was recorded + float wear_level = -1; ///< SSD wear level (negative if unknown) void set_metadata(map&& m); void set_life_expectancy(utime_t from, utime_t to, utime_t now); void rm_life_expectancy(); + void set_wear_level(float wear); + string get_life_expectancy_str(utime_t now) const; /// true of we can be safely forgotten/removed from memory