Skip to content

Commit

Permalink
librbd: do not return a failure if a peer cannot be notified of update
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jason Dillaman committed Apr 12, 2016
1 parent 5e6783c commit 8087cfa
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions src/librbd/Operations.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 8087cfa

Please sign in to comment.