From: Sage Weil Date: Wed, 7 Jun 2017 03:31:59 +0000 (-0400) Subject: osd/OSDMap: add crush_version X-Git-Tag: v12.1.0~58^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=48158ec579b708772fae82daaa6cb5dcaf5ac5dd;p=ceph.git osd/OSDMap: add crush_version Increment it every time our embedded crush map updates. Signed-off-by: Sage Weil --- diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 8097b8636a3..eed5a3d3f7a 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1792,6 +1792,13 @@ int OSDMap::apply_incremental(const Incremental &inc) auto blp = bl.begin(); crush.reset(new CrushWrapper); crush->decode(blp); + if (require_osd_release >= CEPH_RELEASE_LUMINOUS) { + // only increment if this is a luminous-encoded osdmap, lest + // the mon's crush_version diverge from what the osds or others + // are decoding and applying on their end. if we won't encode + // it in the canonical version, don't change it. + ++crush_version; + } } calc_num_osds(); @@ -2311,7 +2318,7 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const ENCODE_START(8, 7, bl); { - uint8_t v = 5; + uint8_t v = 6; if (!HAVE_FEATURE(features, SERVER_LUMINOUS)) { v = 3; } @@ -2374,6 +2381,9 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const assert(pg_upmap.empty()); assert(pg_upmap_items.empty()); } + if (v >= 6) { + ::encode(crush_version, bl); + } ENCODE_FINISH(bl); // client-usable data } @@ -2584,7 +2594,7 @@ void OSDMap::decode(bufferlist::iterator& bl) * Since we made it past that hurdle, we can use our normal paths. */ { - DECODE_START(5, bl); // client-usable data + DECODE_START(6, bl); // client-usable data // base ::decode(fsid, bl); ::decode(epoch, bl); @@ -2639,6 +2649,9 @@ void OSDMap::decode(bufferlist::iterator& bl) pg_upmap.clear(); pg_upmap_items.clear(); } + if (struct_v >= 6) { + ::decode(crush_version, bl); + } DECODE_FINISH(bl); // client-usable data } @@ -2758,6 +2771,7 @@ void OSDMap::dump(Formatter *f) const f->dump_stream("created") << get_created(); f->dump_stream("modified") << get_modified(); f->dump_string("flags", get_flag_string()); + f->dump_unsigned("crush_version", get_crush_version()); f->dump_float("full_ratio", full_ratio); f->dump_float("backfillfull_ratio", backfillfull_ratio); f->dump_float("nearfull_ratio", nearfull_ratio); @@ -2972,6 +2986,7 @@ void OSDMap::print(ostream& out) const << "modified " << get_modified() << "\n"; out << "flags " << get_flag_string() << "\n"; + out << "crush_version " << get_crush_version() << "\n"; out << "full_ratio " << full_ratio << "\n"; out << "backfillfull_ratio " << backfillfull_ratio << "\n"; out << "nearfull_ratio " << nearfull_ratio << "\n"; diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 264fc5f7fcf..b9e05afd67a 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -554,6 +554,8 @@ private: uint32_t get_crc() const { return crc; } ceph::shared_ptr crush; // hierarchical map +private: + uint32_t crush_version = 1; friend class OSDMonitor; @@ -606,6 +608,10 @@ public: void set_epoch(epoch_t e); + uint32_t get_crush_version() const { + return crush_version; + } + /* stamps etc */ const utime_t& get_created() const { return created; } const utime_t& get_modified() const { return modified; } diff --git a/src/test/cli/osdmaptool/clobber.t b/src/test/cli/osdmaptool/clobber.t index b1d134e702b..8719b23984c 100644 --- a/src/test/cli/osdmaptool/clobber.t +++ b/src/test/cli/osdmaptool/clobber.t @@ -19,6 +19,7 @@ created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) modified \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) flags + crush_version 1 full_ratio 0 backfillfull_ratio 0 nearfull_ratio 0 @@ -44,6 +45,7 @@ created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) modified \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) flags + crush_version 1 full_ratio 0 backfillfull_ratio 0 nearfull_ratio 0 diff --git a/src/test/cli/osdmaptool/create-print.t b/src/test/cli/osdmaptool/create-print.t index 539de8e9643..022a32e7116 100644 --- a/src/test/cli/osdmaptool/create-print.t +++ b/src/test/cli/osdmaptool/create-print.t @@ -78,6 +78,7 @@ created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) modified \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) flags + crush_version 1 full_ratio 0 backfillfull_ratio 0 nearfull_ratio 0 diff --git a/src/test/cli/osdmaptool/create-racks.t b/src/test/cli/osdmaptool/create-racks.t index b55243a9515..08eacba8893 100644 --- a/src/test/cli/osdmaptool/create-racks.t +++ b/src/test/cli/osdmaptool/create-racks.t @@ -791,6 +791,7 @@ created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) modified \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) flags + crush_version 1 full_ratio 0 backfillfull_ratio 0 nearfull_ratio 0