From: Douglas Fuller Date: Tue, 5 Jul 2016 19:11:48 +0000 (-0700) Subject: mon/cephfs: Warn about overlaying CephFS metadata pools X-Git-Tag: v12.0.2~134^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8757f603bf34aa8e12baec0c454b49adb05a891a;p=ceph.git mon/cephfs: Warn about overlaying CephFS metadata pools Don't allow creation of filesystems with overlaying metadata pools unless the user passes --allow-dangerous-pool-overlay. Signed-off-by: Douglas Fuller --- diff --git a/src/mon/FSCommands.cc b/src/mon/FSCommands.cc index 21918032e550..b66073519b01 100644 --- a/src/mon/FSCommands.cc +++ b/src/mon/FSCommands.cc @@ -151,6 +151,19 @@ class FsNewHandler : public FileSystemCommandHandler return -EINVAL; } + for (auto fs : pending_fsmap.get_filesystems()) { + const set& 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); diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 6e0e70ddecfa..f5574ce83d02 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -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 and ", \ "fs", "rw", "cli,rest") COMMAND("fs rm " \