]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: fix potential realm watch lost
authorTianshan Qu <tianshan@xsky.com>
Sun, 28 Jul 2019 16:42:39 +0000 (00:42 +0800)
committerTianshan Qu <tianshan@xsky.com>
Sun, 28 Jul 2019 16:42:39 +0000 (00:42 +0800)
realm watch only restart on -ENOTCONN, but if we fail to maintain the watch ping, the OSD will return -ETIMEDOUT.
The objecter will keep the watch err on last_error, if last_error not empty, it will not call handle_error in future error,
so it will never get the chance to rewatch on following -ENOTCONN error.

Fixes: http://tracker.ceph.com/issues/40991
Signed-off-by: Tianshan Qu <tianshan@xsky.com>
src/rgw/rgw_realm_watcher.cc

index 02e8b130e27f8c99f76e5b59facaa56eb4458f7f..ee154f0f299ebb6c7c4e2badbf22f351d1af8c3a 100644 (file)
@@ -71,13 +71,11 @@ void RGWRealmWatcher::handle_notify(uint64_t notify_id, uint64_t cookie,
 
 void RGWRealmWatcher::handle_error(uint64_t cookie, int err)
 {
+  lderr(cct) << "RGWRealmWatcher::handle_error oid=" << watch_oid << " err=" << err << dendl;
   if (cookie != watch_handle)
     return;
 
-  if (err == -ENOTCONN) {
-    ldout(cct, 4) << "Disconnected watch on " << watch_oid << dendl;
-    watch_restart();
-  }
+  watch_restart();
 }
 
 int RGWRealmWatcher::watch_start(const RGWRealm& realm)