From: Sage Weil Date: Fri, 7 Dec 2012 22:09:14 +0000 (-0800) Subject: osd: make pool_stat_t encoding backward compatible with v0.41 and older X-Git-Tag: v0.56~88 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=25ea06969fad13f6094cb68995d52906ecaf507a;p=ceph.git osd: make pool_stat_t encoding backward compatible with v0.41 and older In particular, this is the encoding that is used in precise. Fixes: #3212 Signed-off-by: Sage Weil --- diff --git a/src/include/encoding.h b/src/include/encoding.h index db5d19658cf1..eb445e3b070e 100644 --- a/src/include/encoding.h +++ b/src/include/encoding.h @@ -159,7 +159,7 @@ WRITE_INTTYPE_ENCODER(int16_t, le16) // string -inline void encode(const std::string& s, bufferlist& bl) +inline void encode(const std::string& s, bufferlist& bl, uint64_t features=0) { __u32 len = s.length(); encode(len, bl); diff --git a/src/messages/MGetPoolStatsReply.h b/src/messages/MGetPoolStatsReply.h index 26f9e13ab708..719d5b80e0e5 100644 --- a/src/messages/MGetPoolStatsReply.h +++ b/src/messages/MGetPoolStatsReply.h @@ -42,7 +42,7 @@ public: void encode_payload(uint64_t features) { paxos_encode(); ::encode(fsid, payload); - ::encode(pool_stats, payload); + ::encode(pool_stats, payload, features); } void decode_payload() { bufferlist::iterator p = payload.begin(); diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 4a1b3fcf2ef1..e8db13e50db7 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -1152,8 +1152,17 @@ void pool_stat_t::dump(Formatter *f) const f->dump_unsigned("ondisk_log_size", ondisk_log_size); } -void pool_stat_t::encode(bufferlist &bl) const +void pool_stat_t::encode(bufferlist &bl, uint64_t features) const { + if ((features & CEPH_FEATURE_OSDENC) == 0) { + __u8 v = 4; + ::encode(v, bl); + ::encode(stats, bl); + ::encode(log_size, bl); + ::encode(ondisk_log_size, bl); + return; + } + ENCODE_START(5, 5, bl); ::encode(stats, bl); ::encode(log_size, bl); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index da2b2abf319b..c1e5aa265858 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -941,11 +941,11 @@ struct pool_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(list& o); }; -WRITE_CLASS_ENCODER(pool_stat_t) +WRITE_CLASS_ENCODER_FEATURES(pool_stat_t) /** diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h index 2c717cb93377..e3b7e3051405 100644 --- a/src/test/encoding/types.h +++ b/src/test/encoding/types.h @@ -41,7 +41,7 @@ TYPE_FEATUREFUL(pg_pool_t) TYPE(object_stat_sum_t) TYPE(object_stat_collection_t) TYPE(pg_stat_t) -TYPE(pool_stat_t) +TYPE_FEATUREFUL(pool_stat_t) TYPE(pg_history_t) TYPE(pg_info_t) TYPE(pg_interval_t)