]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: require nautilus or later OSDs before permitting namespaces 23823/head
authorJason Dillaman <dillaman@redhat.com>
Thu, 30 Aug 2018 12:31:10 +0000 (08:31 -0400)
committerJason Dillaman <dillaman@redhat.com>
Thu, 30 Aug 2018 12:31:10 +0000 (08:31 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/api/Namespace.cc

index f73ae845486c2768f09d3363797eb8b385b3c15f..37d8181aec1ce331df06a8f06465625e73b95e2e 100644 (file)
@@ -23,11 +23,27 @@ int Namespace<I>::create(librados::IoCtx& io_ctx, const std::string& name)
     return -EINVAL;
   }
 
+  librados::Rados rados(io_ctx);
+  int8_t require_osd_release;
+  int r = rados.get_min_compatible_osd(&require_osd_release);
+  if (r < 0) {
+    lderr(cct) << "failed to retrieve min OSD release: " << cpp_strerror(r)
+               << dendl;
+    return r;
+  }
+
+  if (require_osd_release < CEPH_RELEASE_NAUTILUS) {
+    ldout(cct, 1) << "namespace support requires nautilus or later OSD"
+                  << dendl;
+    return -ENOSYS;
+  }
+
+
   librados::IoCtx default_ns_ctx;
   default_ns_ctx.dup(io_ctx);
   default_ns_ctx.set_namespace("");
 
-  int r = cls_client::namespace_add(&default_ns_ctx, name);
+  r = cls_client::namespace_add(&default_ns_ctx, name);
   if (r < 0) {
     lderr(cct) << "failed to add namespace: " << cpp_strerror(r) << dendl;
     return r;