diff options
author | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-09-01 14:08:36 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-09-01 14:08:36 +0000 |
commit | 391ed59a896ff343dfd21921e4a159028b56dcee (patch) | |
tree | 50d7f17a00dbe2b5b90c88a0596a3d672e8a31f7 | |
parent | 4bb1fd6e20e7fea8904c30aeb348fdbc2d970c21 (diff) |
De-dupe backpressure mode checking code
-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, |