]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rados: refuse cppool if the pool has selfmanaged snaps 9187/head
authorSage Weil <sage@redhat.com>
Wed, 18 May 2016 21:58:15 +0000 (17:58 -0400)
committerSage Weil <sage@redhat.com>
Tue, 24 May 2016 19:43:25 +0000 (15:43 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/tools/rados/rados.cc

index a2ac644a6ff51da178c758d6e8ebd7e569820503..7a906893dd358f330f8b3baa72c93c59d33e22a9 100644 (file)
@@ -2605,7 +2605,8 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
     cout << "successfully created pool " << nargs[1] << std::endl;
   }
   else if (strcmp(nargs[0], "cppool") == 0) {
-    if (nargs.size() != 3)
+    bool force = nargs.size() == 4 && !strcmp(nargs[3], "--yes-i-really-mean-it");
+    if (nargs.size() != 3 && !(nargs.size() == 4 && force))
       usage_exit();
     const char *src_pool = nargs[1];
     const char *target_pool = nargs[2];
@@ -2618,6 +2619,19 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
 
     cerr << "WARNING: pool copy does not preserve user_version, which some "
         << "    apps may rely on." << std::endl;
+
+    if (rados.get_pool_is_selfmanaged_snaps_mode(src_pool)) {
+      cerr << "WARNING: pool " << src_pool << " has selfmanaged snaps, which are not preserved\n"
+          << "    by the cppool operation.  This will break any snapshot user."
+          << std::endl;
+      if (!force) {
+       cerr << "    If you insist on making a broken copy, you can pass\n"
+            << "    --yes-i-really-mean-it to proceed anyway."
+            << std::endl;
+       exit(1);
+      }
+    }
+
     ret = do_copy_pool(rados, src_pool, target_pool);
     if (ret < 0) {
       cerr << "error copying pool " << src_pool << " => " << target_pool << ": "