summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahoo-inc.com>2017-09-01 14:08:36 +0000
committerTor Brede Vekterli <vekterli@yahoo-inc.com>2017-09-01 14:08:36 +0000
commit391ed59a896ff343dfd21921e4a159028b56dcee (patch)
tree50d7f17a00dbe2b5b90c88a0596a3d672e8a31f7 /storage
parent4bb1fd6e20e7fea8904c30aeb348fdbc2d970c21 (diff)
De-dupe backpressure mode checking code
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/storageserver/mergethrottler.cpp26
-rw-r--r--storage/src/vespa/storage/storageserver/mergethrottler.h1
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,