]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/cephfs: Warn about overlaying CephFS metadata pools
authorDouglas Fuller <dfuller@redhat.com>
Tue, 5 Jul 2016 19:11:48 +0000 (12:11 -0700)
committerDouglas Fuller <dfuller@redhat.com>
Tue, 4 Apr 2017 19:29:01 +0000 (12:29 -0700)
Don't allow creation of filesystems with overlaying metadata pools unless
the user passes --allow-dangerous-pool-overlay.

Signed-off-by: Douglas Fuller <dfuller@redhat.com>
src/mon/FSCommands.cc
src/mon/MonCommands.h

index 21918032e550eb77006c48c26a675a231a8ce88b..b66073519b0176ddb071c92021044324947063db 100644 (file)
@@ -151,6 +151,19 @@ class FsNewHandler : public FileSystemCommandHandler
       return -EINVAL;
     }
 
+    for (auto fs : pending_fsmap.get_filesystems()) {
+      const set<int64_t>& data_pools = fs.second->mds_map.get_data_pools();
+      string sure;
+      if ((data_pools.find(data) != data_pools.end()
+          || fs.second->mds_map.metadata_pool == metadata)
+         && ((!cmd_getval(g_ceph_context, cmdmap, "sure", sure)
+              || sure != "--allow-dangerous-metadata-overlay"))) {
+       ss << "Filesystem '" << fs_name
+          << "' is already using one of the specified RADOS pools. This should ONLY be done in emergencies and after careful reading of the documentation. Pass --allow-dangerous-metadata-overlay to permit this.";
+       return -EEXIST;
+      }
+    }
+
     pg_pool_t const *data_pool = mon->osdmon()->osdmap.get_pg_pool(data);
     assert(data_pool != NULL);  // Checked it existed above
     pg_pool_t const *metadata_pool = mon->osdmon()->osdmap.get_pg_pool(metadata);
index 6e0e70ddecfa1562b9b5ada4c2524ed9db910799..f5574ce83d02a4c2eab36ad4fbbc3cb2b33198ee 100644 (file)
@@ -333,6 +333,7 @@ COMMAND("fs new " \
        "name=metadata,type=CephString " \
        "name=data,type=CephString " \
        "name=force,type=CephChoices,strings=--force,req=false", \
+       "name=allow_overlay,type=CephChoices,strings=--allow-dangerous-metadata-overlay,req=false", \
        "make new filesystem using named pools <metadata> and <data>", \
        "fs", "rw", "cli,rest")
 COMMAND("fs rm " \