From: Joao Eduardo Luis Date: Thu, 12 Dec 2013 18:25:31 +0000 (+0000) Subject: osd: OSD: reflect OSDMap EC flag being set by setting on-disk feature X-Git-Tag: v0.75~67^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=59ad6da43af6d357d03f880588b772d1ea22ebaa;p=ceph.git osd: OSD: reflect OSDMap EC flag being set by setting on-disk feature If OSDMap has the EC feature set, then update our superblock to reflect as such, making our on-disk format incompatible with previous OSDs without EC support. Fixes: 6028 Signed-off-by: Joao Eduardo Luis --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 0314a3b84f55..327c0adddada 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -5375,6 +5375,16 @@ void OSD::check_osdmap_features() cluster_messenger->set_policy(entity_name_t::TYPE_OSD, p); } } + + if ((features & CEPH_FEATURE_OSD_ERASURE_CODES) && + (!superblock.compat_features.incompat.contains(CEPH_OSD_FEATURE_INCOMPAT_ERASURECODES))) { + dout(0) << __func__ << " enabling on-disk ERASURE CODES compat feature" << dendl; + superblock.compat_features.incompat.insert(CEPH_OSD_FEATURE_INCOMPAT_ERASURECODES); + ObjectStore::Transaction t; + write_superblock(t); + int err = store->apply_transaction(t); + assert(err == 0); + } } void OSD::advance_pg(