aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-11-27 17:39:18 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-12-01 15:41:08 +0000
commite5a6ebae583b0c2e0f84a3b5446375b5c755aa6f (patch)
tree591c3591561b4305ba5b39192bc6b4ee9b7e23a6 /searchcore
parentab8072ce5f98b3f95914c58c815f21b41192e531 (diff)
Just take a nap when Q is full.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp8
-rw-r--r--searchcore/src/apps/vespa-feed-bm/pending_tracker.h20
2 files changed, 8 insertions, 20 deletions
diff --git a/searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp b/searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp
index 25a14db9267..de60ae88f65 100644
--- a/searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp
+++ b/searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp
@@ -8,8 +8,6 @@ namespace feedbm {
PendingTracker::PendingTracker(uint32_t limit)
: _pending(0u),
_limit(limit),
- _mutex(),
- _cond(),
_bucket_info_queue()
{
}
@@ -25,17 +23,13 @@ PendingTracker::drain()
if (_bucket_info_queue) {
_bucket_info_queue->get_bucket_info_loop();
}
- std::unique_lock<std::mutex> guard(_mutex);
while (_pending > 0) {
- _cond.wait(guard);
+ std::this_thread::sleep_for(1ms);
if (_bucket_info_queue) {
- guard.unlock();
_bucket_info_queue->get_bucket_info_loop();
- guard.lock();
}
}
if (_bucket_info_queue) {
- guard.unlock();
_bucket_info_queue->get_bucket_info_loop();
}
}
diff --git a/searchcore/src/apps/vespa-feed-bm/pending_tracker.h b/searchcore/src/apps/vespa-feed-bm/pending_tracker.h
index 96b1a50141b..2a18b759a4b 100644
--- a/searchcore/src/apps/vespa-feed-bm/pending_tracker.h
+++ b/searchcore/src/apps/vespa-feed-bm/pending_tracker.h
@@ -2,11 +2,12 @@
#pragma once
-#include <mutex>
-#include <condition_variable>
#include <atomic>
#include <memory>
+#include <thread>
+#include <chrono>
+using namespace std::chrono_literals;
namespace storage::spi { struct PersistenceProvider; }
namespace feedbm {
@@ -18,10 +19,8 @@ class BucketInfoQueue;
* benchmark feeding.
*/
class PendingTracker {
- uint32_t _pending;
+ std::atomic<uint32_t> _pending;
uint32_t _limit;
- std::mutex _mutex;
- std::condition_variable _cond;
std::unique_ptr<BucketInfoQueue> _bucket_info_queue;
public:
@@ -29,18 +28,13 @@ public:
~PendingTracker();
void release() {
- std::unique_lock<std::mutex> guard(_mutex);
- --_pending;
- if (_pending < _limit) {
- _cond.notify_all();
- }
+ _pending--;
}
void retain() {
- std::unique_lock<std::mutex> guard(_mutex);
while (_pending >= _limit) {
- _cond.wait(guard);
+ std::this_thread::sleep_for(1ms);
}
- ++_pending;
+ _pending++;
}
void drain();