]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: OSD: reflect OSDMap EC flag being set by setting on-disk feature
authorJoao Eduardo Luis <joao.luis@inktank.com>
Thu, 12 Dec 2013 18:25:31 +0000 (18:25 +0000)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Thu, 19 Dec 2013 02:19:52 +0000 (02:19 +0000)
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 <joao.luis@inktank.com>
src/osd/OSD.cc

index 0314a3b84f5577e7ab9be39f41b967c1415e213e..327c0adddada05a8bc4c92a1e3e4e27750cce2ad 100644 (file)
@@ -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(