]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw_file: avoid long-ish delay on shutdown 37552/head
authorMatt Benjamin <mbenjamin@redhat.com>
Wed, 30 Sep 2020 19:13:04 +0000 (15:13 -0400)
committerVicente Cheng <freeze.bilsted@gmail.com>
Mon, 5 Oct 2020 15:42:22 +0000 (15:42 +0000)
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>
(cherry picked from commit 805f74956489e3158437acc1c3c12f267221843e)

src/rgw/librgw.cc
src/rgw/rgw_lib_frontend.h

index 5e8578f0baf9ac39f83381fa02374c1f467b6b76..1dd889829e05c0207c230224ae60627b690ac9c2 100644 (file)
@@ -128,8 +128,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 7b1b929005c3448bf82a43f1373d753a24121e56..ec4ede040470fa6879d8f53c5358cb4e780cc34c 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) {