diff options
author | Sage Weil <sage@inktank.com> | 2012-06-21 07:23:56 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2012-06-21 17:10:30 -0700 |
commit | c399d903ddecdddf69c12a66c278393e067f4703 (patch) | |
tree | 34cf7114f07afaf6b9d7052c0b39c1eb6a488d45 /src/mon | |
parent | 0aaf7334a9823916dfad8766f1bb4239a8d399ca (diff) | |
download | ceph-c399d903ddecdddf69c12a66c278393e067f4703.tar.gz |
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 <sage@inktank.com>
Diffstat (limited to 'src/mon')
-rw-r--r-- | src/mon/PGMap.cc | 33 | ||||
-rw-r--r-- | src/mon/PGMap.h | 8 | ||||
-rw-r--r-- | src/mon/PGMonitor.cc | 4 |
3 files changed, 37 insertions, 8 deletions
diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index b6c2dd99e9d..1382e186929 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 d6b93278576..46d057c6335 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<Incremental*>& 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<PGMap*>& 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 595dfd4b564..a5592c4f66a 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) |