From: David Zafman Date: Thu, 19 Dec 2013 21:47:28 +0000 (-0800) Subject: osd: Config OSD when CEPH_FEATURE_OSD_ERASURE_CODES feature first seen X-Git-Tag: v0.77~23^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ba19006d0658acf2acf4a7f5965b542aa62d226f;p=ceph.git osd: Config OSD when CEPH_FEATURE_OSD_ERASURE_CODES feature first seen Set the OSD superblock CEPH_OSD_FEATURE_INCOMPAT_SHARDS and notify the filestore through set_allow_sharded_objects() in that order. Signed-off-by: David Zafman --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 1e3e980e8fc6..d3972369259c 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1107,7 +1107,7 @@ int OSD::init() goto out; } osdmap = get_map(superblock.current_epoch); - check_osdmap_features(); + check_osdmap_features(store); create_recoverystate_perf(); @@ -5313,7 +5313,7 @@ void OSD::handle_osd_map(MOSDMap *m) map_lock.put_write(); - check_osdmap_features(); + check_osdmap_features(store); // yay! consume_map(); @@ -5345,7 +5345,7 @@ void OSD::handle_osd_map(MOSDMap *m) m->put(); } -void OSD::check_osdmap_features() +void OSD::check_osdmap_features(ObjectStore *fs) { // adjust required feature bits? @@ -5379,13 +5379,14 @@ void OSD::check_osdmap_features() } if ((features & CEPH_FEATURE_OSD_ERASURE_CODES) && - (!superblock.compat_features.incompat.contains(CEPH_OSD_FEATURE_INCOMPAT_SHARDS))) { + !fs->get_allow_sharded_objects()) { dout(0) << __func__ << " enabling on-disk ERASURE CODES compat feature" << dendl; superblock.compat_features.incompat.insert(CEPH_OSD_FEATURE_INCOMPAT_SHARDS); ObjectStore::Transaction t; write_superblock(t); int err = store->apply_transaction(t); assert(err == 0); + fs->set_allow_sharded_objects(); } } diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 5d51efce3f4e..889822b39949 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -697,7 +697,7 @@ protected: void _dispatch(Message *m); void dispatch_op(OpRequestRef op); - void check_osdmap_features(); + void check_osdmap_features(ObjectStore *store); // asok friend class OSDSocketHook;