summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-03-01 11:36:55 +0100
committerGitHub <noreply@github.com>2022-03-01 11:36:55 +0100
commit891b71d8280041adcdb7de29ae2cff7ca016aab5 (patch)
tree25379dd9b8eef8fc7dfb93b5535f67945b4ac8d5 /vespalib
parenta997a80721071cd4c99ddc96d3d8b05c59a7f139 (diff)
parenta46a98bc7fd21a076470c06d560f42b5c7862b88 (diff)
Merge pull request #21467 from vespa-engine/balder/add-and-use-common-adjustTimeoutByDetectedHz
Add a simple adjustTimeoutByDetectedHz to compute a suitable timeout/…
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/time/time_test.cpp15
-rw-r--r--vespalib/src/vespa/vespalib/util/time.cpp10
-rw-r--r--vespalib/src/vespa/vespalib/util/time.h2
3 files changed, 27 insertions, 0 deletions
diff --git a/vespalib/src/tests/time/time_test.cpp b/vespalib/src/tests/time/time_test.cpp
index c2858308006..0ca583c8326 100644
--- a/vespalib/src/tests/time/time_test.cpp
+++ b/vespalib/src/tests/time/time_test.cpp
@@ -68,4 +68,19 @@ TEST(TimeTest, default_timer_frequency_is_1000_hz) {
EXPECT_EQ(1000u, getVespaTimerHz());
}
+TEST(TimeTest, timeout_is_relative_to_frequency) {
+ EXPECT_EQ(1000u, getVespaTimerHz());
+
+ EXPECT_EQ(1ms, adjustTimeoutByDetectedHz(1ms));
+ EXPECT_EQ(20ms, adjustTimeoutByDetectedHz(20ms));
+
+ EXPECT_EQ(1ms, adjustTimeoutByHz(1ms, 1000));
+ EXPECT_EQ(10ms, adjustTimeoutByHz(1ms, 100));
+ EXPECT_EQ(100ms, adjustTimeoutByHz(1ms, 10));
+
+ EXPECT_EQ(20ms, adjustTimeoutByHz(20ms, 1000));
+ EXPECT_EQ(200ms, adjustTimeoutByHz(20ms, 100));
+ EXPECT_EQ(2000ms, adjustTimeoutByHz(20ms, 10));
+}
+
GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/vespa/vespalib/util/time.cpp b/vespalib/src/vespa/vespalib/util/time.cpp
index bcc289489ea..3737a25f268 100644
--- a/vespalib/src/vespa/vespalib/util/time.cpp
+++ b/vespalib/src/vespa/vespalib/util/time.cpp
@@ -30,6 +30,16 @@ getVespaTimerHz() {
return 1000u;
}
+duration
+adjustTimeoutByHz(duration timeout, long hz) {
+ return (timeout * 1000) / hz;
+}
+
+duration
+adjustTimeoutByDetectedHz(duration timeout) {
+ return adjustTimeoutByHz(timeout, getVespaTimerHz());
+}
+
namespace {
string
diff --git a/vespalib/src/vespa/vespalib/util/time.h b/vespalib/src/vespa/vespalib/util/time.h
index dbbae862a8d..783831b5171 100644
--- a/vespalib/src/vespa/vespalib/util/time.h
+++ b/vespalib/src/vespa/vespalib/util/time.h
@@ -92,5 +92,7 @@ public:
* The default frequency (1000hz) for vespa timer, with environment override VESPA_TIMER_HZ capped to [1..1000]
*/
uint32_t getVespaTimerHz();
+duration adjustTimeoutByDetectedHz(duration timeout);
+duration adjustTimeoutByHz(duration timeout, long hz);
}