]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
check feature bits when encoding objectstore_perf_stat_t 20378/head
authorKefu Chai <kchai@redhat.com>
Tue, 23 Jan 2018 07:30:58 +0000 (15:30 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 9 Feb 2018 06:31:48 +0000 (14:31 +0800)
OS_PERF_STAT_NS feature bit is added. it's sharing the same bit with
QOS_DMC.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/include/ceph_features.h
src/messages/MPGStats.h
src/mon/PGMap.cc
src/osd/osd_types.cc
src/osd/osd_types.h
src/test/encoding/types.h

index 7e265bb6008acba0198d8693126ce1136767d428..3f6c86585ae9cc9e661e5c579c81901003b70b27 100644 (file)
@@ -92,6 +92,7 @@ DEFINE_CEPH_FEATURE_RETIRED(16, 1, QUERY_T, JEWEL, LUMINOUS)
 DEFINE_CEPH_FEATURE(16, 3, SERVER_O)
 DEFINE_CEPH_FEATURE_RETIRED(17, 1, INDEP_PG_MAP, JEWEL, LUMINOUS)
 DEFINE_CEPH_FEATURE(17, 2, QOS_DMC)
+DEFINE_CEPH_FEATURE(17, 2, OS_PERF_STAT_NS)
 
 DEFINE_CEPH_FEATURE(18, 1, CRUSH_TUNABLES)
 DEFINE_CEPH_FEATURE_RETIRED(19, 1, CHUNKY_SCRUB, JEWEL, LUMINOUS)
index 5a070c51a60785bb899c16be4b26f596372fd565..d1f097bfd808ac3e44027818f784f4a987c333b4 100644 (file)
@@ -47,7 +47,7 @@ public:
     using ceph::encode;
     paxos_encode();
     encode(fsid, payload);
-    encode(osd_stat, payload);
+    encode(osd_stat, payload, features);
     encode(pg_stat, payload);
     encode(epoch, payload);
     encode(had_map_for, payload);
index f0f519df83b9e387541b5f2b420371e09ec823fa..0876abede7bcf6d8b99d29c33a765d76796d0a0d 100644 (file)
@@ -38,7 +38,7 @@ void PGMapDigest::encode(bufferlist& bl, uint64_t features) const
   encode(num_osd, bl);
   encode(pg_pool_sum, bl, features);
   encode(pg_sum, bl, features);
-  encode(osd_sum, bl);
+  encode(osd_sum, bl, features);
   if (v >= 2) {
     encode(num_pg_by_state, bl);
   } else {
@@ -1340,7 +1340,7 @@ void PGMap::encode(bufferlist &bl, uint64_t features) const
   ENCODE_START(7, 7, bl);
   encode(version, bl);
   encode(pg_stat, bl);
-  encode(osd_stat, bl);
+  encode(osd_stat, bl, features);
   encode(last_osdmap_epoch, bl);
   encode(last_pg_scan, bl);
   encode(stamp, bl);
index b5219f569b624fbe8ea2f1a0a2b1bfbc0114bb22..5ca378d1677cfff3cfb5fdaa797594e1160e97c2 100644 (file)
@@ -283,31 +283,40 @@ void objectstore_perf_stat_t::dump(Formatter *f) const
   f->dump_unsigned("apply_latency_ns", os_apply_latency_ns);
 }
 
-void objectstore_perf_stat_t::encode(bufferlist &bl) const
+void objectstore_perf_stat_t::encode(bufferlist &bl, uint64_t features) const
 {
-  uint32_t commit_latency_ms = os_commit_latency_ns / 1000000;
-  uint32_t apply_latency_ms = os_apply_latency_ns / 1000000;
-  ENCODE_START(2, 1, bl);
-  encode(commit_latency_ms, bl); // for compatibility with older monitor.
-  encode(apply_latency_ms, bl); // for compatibility with older monitor.
-  encode(os_commit_latency_ns, bl);
-  encode(os_apply_latency_ns, bl);
+  uint8_t target_v = 2;
+  if (!HAVE_FEATURE(features, OS_PERF_STAT_NS)) {
+    target_v = 1;
+  }
+  ENCODE_START(target_v, target_v, bl);
+  if (target_v >= 2) {
+    encode(os_commit_latency_ns, bl);
+    encode(os_apply_latency_ns, bl);
+  } else {
+    constexpr auto NS_PER_MS = std::chrono::nanoseconds(1ms).count();
+    uint32_t commit_latency_ms = os_commit_latency_ns / NS_PER_MS;
+    uint32_t apply_latency_ms = os_apply_latency_ns / NS_PER_MS;
+    encode(commit_latency_ms, bl); // for compatibility with older monitor.
+    encode(apply_latency_ms, bl); // for compatibility with older monitor.
+  }
   ENCODE_FINISH(bl);
 }
 
 void objectstore_perf_stat_t::decode(bufferlist::iterator &bl)
 {
   DECODE_START(2, bl);
-  uint32_t commit_latency_ms;
-  uint32_t apply_latency_ms;
-  decode(commit_latency_ms, bl);
-  decode(apply_latency_ms, bl);
   if (struct_v >= 2) {
     decode(os_commit_latency_ns, bl);
     decode(os_apply_latency_ns, bl);
   } else {
-    os_commit_latency_ns = commit_latency_ms * (uint64_t) 1000000;
-    os_apply_latency_ns = apply_latency_ms * (uint64_t) 1000000;
+    uint32_t commit_latency_ms;
+    uint32_t apply_latency_ms;
+    decode(commit_latency_ms, bl);
+    decode(apply_latency_ms, bl);
+    constexpr auto NS_PER_MS = std::chrono::nanoseconds(1ms).count();
+    os_commit_latency_ns = commit_latency_ms * NS_PER_MS;
+    os_apply_latency_ns = apply_latency_ms * NS_PER_MS;
   }
   DECODE_FINISH(bl);
 }
@@ -343,7 +352,7 @@ void osd_stat_t::dump(Formatter *f) const
   f->close_section();
 }
 
-void osd_stat_t::encode(bufferlist &bl) const
+void osd_stat_t::encode(bufferlist &bl, uint64_t features) const
 {
   ENCODE_START(7, 2, bl);
   encode(kb, bl);
@@ -354,7 +363,7 @@ void osd_stat_t::encode(bufferlist &bl) const
   encode(hb_peers, bl);
   encode((uint32_t)0, bl);
   encode(op_queue_age_hist, bl);
-  encode(os_perf_stat, bl);
+  encode(os_perf_stat, bl, features);
   encode(up_from, bl);
   encode(seq, bl);
   encode(num_pgs, bl);
index 5c1f51115980e7b489cf1d461e4db2365d902ade..8c240c86a87014d1f1021796a3d568144ec252ed 100644 (file)
@@ -904,11 +904,11 @@ struct objectstore_perf_stat_t {
     os_apply_latency_ns -= o.os_apply_latency_ns;
   }
   void dump(Formatter *f) const;
-  void encode(bufferlist &bl) const;
+  void encode(bufferlist &bl, uint64_t features) const;
   void decode(bufferlist::iterator &bl);
   static void generate_test_instances(std::list<objectstore_perf_stat_t*>& o);
 };
-WRITE_CLASS_ENCODER(objectstore_perf_stat_t)
+WRITE_CLASS_ENCODER_FEATURES(objectstore_perf_stat_t)
 
 /** osd_stat
  * aggregate stats for an osd
@@ -952,11 +952,11 @@ struct osd_stat_t {
   }
 
   void dump(Formatter *f) const;
-  void encode(bufferlist &bl) const;
+  void encode(bufferlist &bl, uint64_t features) const;
   void decode(bufferlist::iterator &bl);
   static void generate_test_instances(std::list<osd_stat_t*>& o);
 };
-WRITE_CLASS_ENCODER(osd_stat_t)
+WRITE_CLASS_ENCODER_FEATURES(osd_stat_t)
 
 inline bool operator==(const osd_stat_t& l, const osd_stat_t& r) {
   return l.kb == r.kb &&
index f337d419d45880a3ea95df3b404eba3cbc63b642..9c355068dbf7da9d370796aecdd31193ddbe408e 100644 (file)
@@ -59,8 +59,8 @@ TYPE(object_locator_t)
 TYPE(request_redirect_t)
 TYPE(pg_t)
 TYPE(coll_t)
-TYPE(objectstore_perf_stat_t)
-TYPE(osd_stat_t)
+TYPE_FEATUREFUL(objectstore_perf_stat_t)
+TYPE_FEATUREFUL(osd_stat_t)
 TYPE(OSDSuperblock)
 TYPE_FEATUREFUL(pool_snap_info_t)
 TYPE_FEATUREFUL(pg_pool_t)