From: Tianshan Qu Date: Sun, 28 Jul 2019 16:42:39 +0000 (+0800) Subject: rgw: fix potential realm watch lost X-Git-Tag: v15.1.0~1861^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c2d6cbe1b1f4b7c26fa8da4eefa291b4bdb48835;p=ceph-ci.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 --- diff --git a/src/rgw/rgw_realm_watcher.cc b/src/rgw/rgw_realm_watcher.cc index 02e8b130e27..ee154f0f299 100644 --- a/src/rgw/rgw_realm_watcher.cc +++ b/src/rgw/rgw_realm_watcher.cc @@ -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)