summaryrefslogtreecommitdiff
path: root/src/mon
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-06-21 07:23:56 -0700
committerSamuel Just <sam.just@inktank.com>2012-06-21 17:10:30 -0700
commitc399d903ddecdddf69c12a66c278393e067f4703 (patch)
tree34cf7114f07afaf6b9d7052c0b39c1eb6a488d45 /src/mon
parent0aaf7334a9823916dfad8766f1bb4239a8d399ca (diff)
downloadceph-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.cc33
-rw-r--r--src/mon/PGMap.h8
-rw-r--r--src/mon/PGMonitor.cc4
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)