]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw_file: avoid long-ish delay on shutdown 37501/head
authorMatt Benjamin <mbenjamin@redhat.com>
Wed, 30 Sep 2020 19:13:04 +0000 (15:13 -0400)
committerMatt Benjamin <mbenjamin@redhat.com>
Wed, 30 Sep 2020 19:24:47 +0000 (15:24 -0400)
Normal shutdown was likely to be delayed a substantial fraction
of rgw_nfs_namespace_expire_secs due to an ill-advised use of
this_thread::sleep_for.

Fixes: https://tracker.ceph.com/issues/47710
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
src/rgw/librgw.cc
src/rgw/rgw_lib_frontend.h

index bfad9c04d78cd16f3c39462c3a74218ae46b567c..25f81690ca5075421c40da57df963c399b91b010 100644 (file)
@@ -129,8 +129,8 @@ namespace rgw {
        if (cur_gen != gen)
          goto restart; /* invalidated */
       }
+      cv.wait_for(uniq, std::chrono::seconds(delay_s));
       uniq.unlock();
-      std::this_thread::sleep_for(std::chrono::seconds(delay_s));
     }
   }
 
index 91ccc15df95632c0ea10859bb7a30fa80d1c6d6e..0f2276f4896693706fbe368698e1c9b2e8fc24da 100644 (file)
@@ -14,6 +14,7 @@ namespace rgw {
   class RGWLibProcess : public RGWProcess {
     RGWAccessKey access_key;
     std::mutex mtx;
+    std::condition_variable cv;
     int gen;
     bool shutdown;
 
@@ -36,6 +37,7 @@ namespace rgw {
       for (const auto& fs: mounted_fs) {
        fs.second->stop();
       }
+      cv.notify_all();
     }
 
     void register_fs(RGWLibFS* fs) {