From: mingyuez Date: Fri, 31 Jul 2015 04:06:05 +0000 (+0800) Subject: rbd:'rbd purge image' will return failure without removing any snaps if the image... X-Git-Tag: v9.1.0~463^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F5398%2Fhead;p=ceph.git rbd:'rbd purge image' will return failure without removing any snaps if the image has a protected snap Signed-off-by: mingyuez --- diff --git a/src/rbd.cc b/src/rbd.cc index ee30e03ea14ee..2df2e7c6aa5c1 100644 --- a/src/rbd.cc +++ b/src/rbd.cc @@ -771,23 +771,37 @@ static int do_purge_snaps(librbd::Image& image) { MyProgressContext pc("Removing all snapshots"); std::vector snaps; + bool is_protected = false; int r = image.snap_list(snaps); if (r < 0) { pc.fail(); return r; - } - - for (size_t i = 0; i < snaps.size(); ++i) { - r = image.snap_remove(snaps[i].name.c_str()); - if (r < 0) { - pc.fail(); - return r; + } else if (0 == snaps.size()) { + return 0; + } else { + for (size_t i = 0; i < snaps.size(); ++i) { + r = image.snap_is_protected(snaps[i].name.c_str(), &is_protected); + if (r < 0) { + pc.fail(); + return r; + } else if (is_protected == true) { + pc.fail(); + cerr << "\r" <