]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: do not return a failure if a peer cannot be notified of update 8543/head
authorJason Dillaman <dillaman@redhat.com>
Tue, 12 Apr 2016 00:58:50 +0000 (20:58 -0400)
committerJason Dillaman <dillaman@redhat.com>
Tue, 12 Apr 2016 00:58:50 +0000 (20:58 -0400)
Maintenance ops that fail to notify a peer of the update should not
report a failure to the original user.

Fixes: http://tracker.ceph.com/issues/15351
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/Operations.cc

index f8151c9d3a0285a0f02d4d73cd5bd82706acebab..81219d4a745a2be257536789960645a56c44705b 100644 (file)
@@ -41,12 +41,28 @@ struct C_NotifyUpdate : public Context {
   }
 
   virtual void complete(int r) override {
-    if (r < 0 || notified) {
+    CephContext *cct = image_ctx.cct;
+    if (notified) {
+      if (r == -ETIMEDOUT) {
+        // don't fail the op if a peer fails to get the update notification
+        lderr(cct) << "update notification timed-out" << dendl;
+        r = 0;
+      } else if (r < 0) {
+        lderr(cct) << "update notification failed: " << cpp_strerror(r)
+                   << dendl;
+      }
       Context::complete(r);
-    } else {
-      notified = true;
-      image_ctx.notify_update(this);
+      return;
     }
+
+    if (r < 0) {
+      // op failed -- no need to send update notification
+      Context::complete(r);
+      return;
+    }
+
+    notified = true;
+    image_ctx.notify_update(this);
   }
   virtual void finish(int r) override {
     on_finish->complete(r);