diff options
Diffstat (limited to 'storage')
-rw-r--r-- | storage/src/vespa/storage/storageserver/mergethrottler.cpp | 26 | ||||
-rw-r--r-- | storage/src/vespa/storage/storageserver/mergethrottler.h | 1 |
2 files changed, 16 insertions, 11 deletions
diff --git a/storage/src/vespa/storage/storageserver/mergethrottler.cpp b/storage/src/vespa/storage/storageserver/mergethrottler.cpp index 60e77f1c140..483992559e7 100644 --- a/storage/src/vespa/storage/storageserver/mergethrottler.cpp +++ b/storage/src/vespa/storage/storageserver/mergethrottler.cpp @@ -660,7 +660,7 @@ bool MergeThrottler::merge_is_backpressure_throttled(const api::MergeBucketComma if (merge_has_this_node_as_source_only_node(cmd)) { return false; } - if (_component.getClock().getMonotonicTime() < _throttle_until_time) { + if (backpressure_mode_active_no_lock()) { return true; } // Avoid sampling the clock when it can't do anything useful. @@ -675,6 +675,10 @@ bool MergeThrottler::merge_has_this_node_as_source_only_node(const api::MergeBuc return std::any_of(cmd.getNodes().begin(), cmd.getNodes().end(), self_is_source_only); } +bool MergeThrottler::backpressure_mode_active_no_lock() const { + return (_component.getClock().getMonotonicTime() < _throttle_until_time); +} + void MergeThrottler::bounce_backpressure_throttled_merge(const api::MergeBucketCommand& cmd, MessageGuard& guard) { sendReply(cmd, api::ReturnCode(api::ReturnCode::BUSY, "Node is throttling merges due to resource exhaustion"), @@ -682,6 +686,16 @@ void MergeThrottler::bounce_backpressure_throttled_merge(const api::MergeBucketC _metrics->bounced_due_to_back_pressure.inc(); } +void MergeThrottler::apply_timed_backpressure() { + vespalib::LockGuard lock(_stateLock); + _throttle_until_time = _component.getClock().getMonotonicTime() + _backpressure_duration; +} + +bool MergeThrottler::backpressure_mode_active() const { + vespalib::LockGuard lock(_stateLock); + return backpressure_mode_active_no_lock(); +} + // Must be run from worker thread void MergeThrottler::handleMessageDown( @@ -1233,16 +1247,6 @@ MergeThrottler::markActiveMergesAsAborted(uint32_t minimumStateVersion) } } -void MergeThrottler::apply_timed_backpressure() { - vespalib::LockGuard lock(_stateLock); - _throttle_until_time = _component.getClock().getMonotonicTime() + _backpressure_duration; -} - -bool MergeThrottler::backpressure_mode_active() const { - vespalib::LockGuard lock(_stateLock); - return (_component.getClock().getMonotonicTime() < _throttle_until_time); -} - void MergeThrottler::print(std::ostream& out, bool /*verbose*/, const std::string& /*indent*/) const diff --git a/storage/src/vespa/storage/storageserver/mergethrottler.h b/storage/src/vespa/storage/storageserver/mergethrottler.h index d4eb4000f15..070c2ef07c4 100644 --- a/storage/src/vespa/storage/storageserver/mergethrottler.h +++ b/storage/src/vespa/storage/storageserver/mergethrottler.h @@ -339,6 +339,7 @@ private: bool merge_is_backpressure_throttled(const api::MergeBucketCommand& cmd) const; void bounce_backpressure_throttled_merge(const api::MergeBucketCommand& cmd, MessageGuard& guard); bool merge_has_this_node_as_source_only_node(const api::MergeBucketCommand& cmd) const; + bool backpressure_mode_active_no_lock() const; void sendReply(const api::MergeBucketCommand& cmd, const api::ReturnCode& result, |