#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);
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);
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);
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;
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);
// 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)
{
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)