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];
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 << ": "