From: Sage Weil Date: Thu, 21 Jun 2012 14:23:56 +0000 (-0700) Subject: mon: conditionally encode PGMap[::Incremental] with quorum features X-Git-Tag: v0.48argonaut~26 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c399d903ddecdddf69c12a66c278393e067f4703;p=ceph.git mon: conditionally encode PGMap[::Incremental] with quorum features This allows a mon cluster to transition to the new encoding during a rolling upgrade. Signed-off-by: Sage Weil --- diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index b6c2dd99e9d58..1382e186929e0 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -7,11 +7,27 @@ #include "common/debug.h" #include "common/Formatter.h" +#include "include/ceph_features.h" // -- -void PGMap::Incremental::encode(bufferlist &bl) const +void PGMap::Incremental::encode(bufferlist &bl, uint64_t features) const { + if ((features & CEPH_FEATURE_MONENC) == 0) { + __u8 v = 4; + ::encode(v, bl); + ::encode(version, bl); + ::encode(pg_stat_updates, bl); + ::encode(osd_stat_updates, bl); + ::encode(osd_stat_rm, bl); + ::encode(osdmap_epoch, bl); + ::encode(pg_scan, bl); + ::encode(full_ratio, bl); + ::encode(nearfull_ratio, bl); + ::encode(pg_remove, bl); + return; + } + ENCODE_START(5, 5, bl); ::encode(version, bl); ::encode(pg_stat_updates, bl); @@ -312,8 +328,21 @@ epoch_t PGMap::calc_min_last_epoch_clean() const return min; } -void PGMap::encode(bufferlist &bl) const +void PGMap::encode(bufferlist &bl, uint64_t features) const { + if ((features & CEPH_FEATURE_MONENC) == 0) { + __u8 v = 3; + ::encode(v, bl); + ::encode(version, bl); + ::encode(pg_stat, bl); + ::encode(osd_stat, bl); + ::encode(last_osdmap_epoch, bl); + ::encode(last_pg_scan, bl); + ::encode(full_ratio, bl); + ::encode(nearfull_ratio, bl); + return; + } + ENCODE_START(4, 4, bl); ::encode(version, bl); ::encode(pg_stat, bl); diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index d6b9327857683..46d057c6335ca 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -53,7 +53,7 @@ public: float full_ratio; float nearfull_ratio; - void encode(bufferlist &bl) const; + void encode(bufferlist &bl, uint64_t features=-1) const; void decode(bufferlist::iterator &bl); void dump(Formatter *f) const; static void generate_test_instances(list& o); @@ -95,7 +95,7 @@ public: void stat_osd_add(const osd_stat_t &s); void stat_osd_sub(const osd_stat_t &s); - void encode(bufferlist &bl) const; + void encode(bufferlist &bl, uint64_t features=-1) const; void decode(bufferlist::iterator &bl); void dump(Formatter *f) const; @@ -121,8 +121,8 @@ public: static void generate_test_instances(list& o); }; -WRITE_CLASS_ENCODER(PGMap::Incremental) -WRITE_CLASS_ENCODER(PGMap) +WRITE_CLASS_ENCODER_FEATURES(PGMap::Incremental) +WRITE_CLASS_ENCODER_FEATURES(PGMap) inline ostream& operator<<(ostream& out, const PGMap& m) { m.print_summary(out); diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 595dfd4b564ce..a5592c4f66af8 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -197,7 +197,7 @@ void PGMonitor::update_from_paxos() // save latest bufferlist bl; - pg_map.encode(bl); + pg_map.encode(bl, mon->get_quorum_features()); paxos->stash_latest(paxosv, bl); // dump pgmap summaries? (useful for debugging) @@ -257,7 +257,7 @@ void PGMonitor::encode_pending(bufferlist &bl) { dout(10) << "encode_pending v " << pending_inc.version << dendl; assert(paxos->get_version() + 1 == pending_inc.version); - pending_inc.encode(bl); + pending_inc.encode(bl, mon->get_quorum_features()); } bool PGMonitor::preprocess_query(PaxosServiceMessage *m)