]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/DaemonState: store optional wear_level for devices
authorSage Weil <sage@newdream.net>
Mon, 8 Feb 2021 18:53:51 +0000 (12:53 -0600)
committerKefu Chai <kchai@redhat.com>
Wed, 3 Mar 2021 07:34:15 +0000 (15:34 +0800)
Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit c52fcb51afb6da2dccd6954a40f0f1c616324855)

src/mgr/DaemonState.cc
src/mgr/DaemonState.h

index b9e1b04ea6c9981fb62be5316b9841a37e1af8b5..32cbbe3b9c0b85e706c35ea6f6bd073bc4177ae5 100644 (file)
@@ -39,6 +39,10 @@ void DeviceState::set_metadata(map<string,string>&& 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)
index 1c3b785f25bc21d41df39eb74c7d8133857321bf..8c21305a9c236ec2786ec43ea9d483a064eed102 100644 (file)
@@ -220,12 +220,15 @@ struct DeviceState : public RefCountedObject
 
   pair<utime_t,utime_t> 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<string,string>&& 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