]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: handle images disappearing while in ls -l
authorDan Mick <dan.mick@inktank.com>
Thu, 13 Dec 2012 22:06:17 +0000 (14:06 -0800)
committerDan Mick <dan.mick@inktank.com>
Thu, 13 Dec 2012 22:46:53 +0000 (14:46 -0800)
rbd.list() returns a list of names, but nothing stops them from
going away before rbd.open(); check for ENOENT and ignore if that
happens; warn on other errors

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
src/rbd.cc

index 3db897871265d5542d9ef072ce4d74146924fd9d..3920d4b9d5520b03b43d78658daaa7de78c9a13a 100644 (file)
@@ -199,7 +199,19 @@ static int do_list(librbd::RBD &rbd, librados::IoCtx& io_ctx, bool lflag)
     librbd::image_info_t info;
     librbd::Image im;
 
-    rbd.open(io_ctx, im, i->c_str());
+    r = rbd.open(io_ctx, im, i->c_str());
+    // image might disappear between rbd.list() and rbd.open(); ignore
+    // that, warn about other possible errors (EPERM, say, for opening
+    // an old-format image, because you need execute permission for the
+    // class method)
+    if (r < 0) {
+      if (r != -ENOENT) {
+       cerr << "rbd: error opening " << *i << ": " << cpp_strerror(r)
+            << std::endl;
+      }
+      // in any event, continue to next image
+      continue;
+    }
 
     // handle second-nth trips through loop
     parent.clear();