From: Sage Weil Date: Wed, 18 May 2016 21:58:15 +0000 (-0400) Subject: rados: refuse cppool if the pool has selfmanaged snaps X-Git-Tag: v11.0.0~382^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8f52f1199a659eb7d2d737428bd5ef43bfb44a8d;p=ceph.git rados: refuse cppool if the pool has selfmanaged snaps Signed-off-by: Sage Weil --- diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index a2ac644a6ff5..7a906893dd35 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -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 << ": "