]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd: remove header when id missing
authorDongsheng Yang <dongsheng.yang@easystack.cn>
Mon, 23 Jan 2017 05:30:17 +0000 (13:30 +0800)
committerDongsheng Yang <dongsheng.yang@easystack.cn>
Tue, 21 Feb 2017 11:17:26 +0000 (19:17 +0800)
Signed-off-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
qa/workunits/rbd/copy.sh
src/librbd/internal.cc

index 68778c1483790d2e5e051e5f04c76ee8c7d7efaf..bb6066acb3ce40e8f19c17f646ce8e30f7c7bf7f 100755 (executable)
@@ -191,6 +191,12 @@ test_remove() {
        rbd rm test2
        rbd ls | wc -l | grep "^0$"
 
+        # remove with id missing
+       rbd create --image-format 2 -s 1 test2
+       rados -p rbd rm rbd_id.test2
+       rbd rm test2
+       rbd ls | wc -l | grep "^0$"
+
         # remove with header and id missing
        rbd create --image-format 2 -s 1 test2
        HEADER=$(rados -p rbd ls | grep '^rbd_header')
index 8cd4f16efa28da5392d171d63e03c687b97a65cc..703e496e259e309ba17eaf172258e0c59bd68d73 100644 (file)
@@ -1820,6 +1820,13 @@ void filter_out_mirror_watchers(ImageCtx *ictx,
       }
 
       if (!id.empty()) {
+       ldout(cct, 2) << "removing header..." << dendl;
+       r = io_ctx.remove(util::header_name(id));
+       if (r < 0 && r != -ENOENT) {
+         lderr(cct) << "error removing header: " << cpp_strerror(-r) << dendl;
+         return r;
+       }
+
         ldout(cct, 10) << "removing journal..." << dendl;
         r = Journal<>::remove(io_ctx, id);
         if (r < 0 && r != -ENOENT) {