From: Tianshan Qu Date: Sun, 28 Jul 2019 16:42:39 +0000 (+0800) Subject: rgw: fix potential realm watch lost X-Git-Tag: v13.2.7~115^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8ad2a1b75a0cf2db5c2101511d7cf1397cc4aaec;p=ceph.git rgw: fix potential realm watch lost 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 (cherry picked from commit c2d6cbe1b1f4b7c26fa8da4eefa291b4bdb48835) --- diff --git a/src/rgw/rgw_realm_watcher.cc b/src/rgw/rgw_realm_watcher.cc index 7389c3f80b9..32e25f78239 100644 --- a/src/rgw/rgw_realm_watcher.cc +++ b/src/rgw/rgw_realm_watcher.cc @@ -70,13 +70,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(RGWRealm& realm)