]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSD: Using Wait rather than WaitInterval to wait queue.is_empty().
authorJianpeng Ma <jianpeng.ma@intel.com>
Tue, 12 Sep 2017 21:05:21 +0000 (05:05 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Mon, 6 Nov 2017 11:46:05 +0000 (19:46 +0800)
Why use WaitInterval, there is a comment:"optimistically sleep a moment; maybe another work item will come along."
But in fact,we don't see any benefit for this optimization.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/osd/OSD.cc

index 7518ac7973204c8c5b3d7d52c1191afcc3ce4a9b..43c13f1e074c911736b58fbf77b86adb07aabb58 100644 (file)
@@ -9755,19 +9755,18 @@ void OSD::ShardedOpWQ::_process(uint32_t thread_index, heartbeat_handle_d *hb)
   sdata->sdata_op_ordering_lock.Lock();
   if (sdata->pqueue->empty()) {
     dout(20) << __func__ << " empty q, waiting" << dendl;
-    // optimistically sleep a moment; maybe another work item will come along.
-    osd->cct->get_heartbeat_map()->reset_timeout(hb,
-      osd->cct->_conf->threadpool_default_timeout, 0);
+    osd->cct->get_heartbeat_map()->clear_timeout(hb);
     sdata->sdata_lock.Lock();
     sdata->sdata_op_ordering_lock.Unlock();
-    sdata->sdata_cond.WaitInterval(sdata->sdata_lock,
-      utime_t(osd->cct->_conf->threadpool_empty_queue_max_wait, 0));
+    sdata->sdata_cond.Wait(sdata->sdata_lock);
     sdata->sdata_lock.Unlock();
     sdata->sdata_op_ordering_lock.Lock();
     if (sdata->pqueue->empty()) {
       sdata->sdata_op_ordering_lock.Unlock();
       return;
     }
+    osd->cct->get_heartbeat_map()->reset_timeout(hb,
+      osd->cct->_conf->threadpool_default_timeout, 0);
   }
   OpQueueItem item = sdata->pqueue->dequeue();
   if (osd->is_stopping()) {