From: Sage Weil Date: Tue, 11 Apr 2017 21:26:07 +0000 (-0400) Subject: messages/MOSDPGInfo: streamline luminous+ encoding X-Git-Tag: v12.0.3~129^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bc7ddd3e8d255ed7969bc496a4f71f67bc55ce2c;p=ceph.git messages/MOSDPGInfo: streamline luminous+ encoding Signed-off-by: Sage Weil --- diff --git a/src/messages/MOSDPGInfo.h b/src/messages/MOSDPGInfo.h index f77ec23dff5..810de9cea29 100644 --- a/src/messages/MOSDPGInfo.h +++ b/src/messages/MOSDPGInfo.h @@ -45,106 +45,111 @@ private: public: const char *get_type_name() const override { return "pg_info"; } void print(ostream& out) const override { - out << "pg_info(" << pg_list.size() << " pgs e" << epoch << ":"; - - for (vector >::const_iterator i = pg_list.begin(); + out << "pg_info("; + for (auto i = pg_list.begin(); i != pg_list.end(); ++i) { if (i != pg_list.begin()) - out << ","; - out << i->first.info.pgid; - if (i->second.size()) - out << "(" << i->second.size() << ")"; + out << " "; + out << i->first << "=" << i->second; } - - out << ")"; + out << " epoch " << epoch + << ")"; } void encode_payload(uint64_t features) override { - ::encode(epoch, payload); - - // v1 was vector - __u32 n = pg_list.size(); - ::encode(n, payload); - for (vector >::iterator p = pg_list.begin(); - p != pg_list.end(); - p++) - ::encode(p->first.info, payload); - - // v2 needs the PastIntervals for each record - for (vector >::iterator p = pg_list.begin(); - p != pg_list.end(); - p++) { - if (HAVE_FEATURE(features, SERVER_LUMINOUS)) { - ::encode(p->second, payload); - } else { - header.version = 4; + if (!HAVE_FEATURE(features, SERVER_LUMINOUS)) { + header.version = 4; + + // for kraken+jewel only + ::encode(epoch, payload); + + // v1 was vector + __u32 n = pg_list.size(); + ::encode(n, payload); + for (auto p = pg_list.begin(); + p != pg_list.end(); + p++) + ::encode(p->first.info, payload); + + // v2 needs the PastIntervals for each record + for (auto p = pg_list.begin(); + p != pg_list.end(); + p++) { p->second.encode_classic(payload); } - } - // v3 needs epoch_sent, query_epoch - for (vector >::iterator p = pg_list.begin(); - p != pg_list.end(); - p++) - ::encode(pair( - p->first.epoch_sent, p->first.query_epoch), payload); - - // v4 needs from, to - for (vector >::iterator p = pg_list.begin(); - p != pg_list.end(); - ++p) { - ::encode(p->first.from, payload); - ::encode(p->first.to, payload); + // v3 needs epoch_sent, query_epoch + for (auto p = pg_list.begin(); + p != pg_list.end(); + p++) + ::encode(pair( + p->first.epoch_sent, p->first.query_epoch), payload); + + // v4 needs from, to + for (auto p = pg_list.begin(); + p != pg_list.end(); + ++p) { + ::encode(p->first.from, payload); + ::encode(p->first.to, payload); + } + return; } + ::encode(epoch, payload); + ::encode(pg_list, payload); } void decode_payload() override { bufferlist::iterator p = payload.begin(); - ::decode(epoch, p); + if (header.version < 5) { + ::decode(epoch, p); - // decode pg_info_t portion of the vector - __u32 n; - ::decode(n, p); - pg_list.resize(n); - for (unsigned i=0; i= 2) { - // get the PastIntervals portion + // decode pg_info_t portion of the vector + __u32 n; + ::decode(n, p); + pg_list.resize(n); for (unsigned i=0; i= 5) { - ::decode(pg_list[i].second, p); - } else { - pg_list[i].second.decode_classic(p); + ::decode(pg_list[i].first.info, p); + } + + if (header.version >= 2) { + // get the PastIntervals portion + for (unsigned i=0; i= 5) { + ::decode(pg_list[i].second, p); + } else { + pg_list[i].second.decode_classic(p); + } } } - } - // v3 needs epoch_sent, query_epoch - for (vector >::iterator i = pg_list.begin(); - i != pg_list.end(); + // v3 needs epoch_sent, query_epoch + for (auto i = pg_list.begin(); + i != pg_list.end(); i++) { - if (header.version >= 3) { - pair dec; - ::decode(dec, p); - i->first.epoch_sent = dec.first; - i->first.query_epoch = dec.second; - } else { - i->first.epoch_sent = epoch; - i->first.query_epoch = epoch; + if (header.version >= 3) { + pair dec; + ::decode(dec, p); + i->first.epoch_sent = dec.first; + i->first.query_epoch = dec.second; + } else { + i->first.epoch_sent = epoch; + i->first.query_epoch = epoch; + } } - } - // v4 needs from and to - if (header.version >= 4) { - for (vector >::iterator i = pg_list.begin(); - i != pg_list.end(); - i++) { - ::decode(i->first.from, p); - ::decode(i->first.to, p); + // v4 needs from and to + if (header.version >= 4) { + for (auto i = pg_list.begin(); + i != pg_list.end(); + i++) { + ::decode(i->first.from, p); + ::decode(i->first.to, p); + } } + return; } + ::decode(epoch, p); + ::decode(pg_list, p); } };