summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/test/cppsuite/test_harness/core/throttle.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/test/cppsuite/test_harness/core/throttle.h')
-rw-r--r--src/third_party/wiredtiger/test/cppsuite/test_harness/core/throttle.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/test/cppsuite/test_harness/core/throttle.h b/src/third_party/wiredtiger/test/cppsuite/test_harness/core/throttle.h
new file mode 100644
index 00000000000..bfe5816c70e
--- /dev/null
+++ b/src/third_party/wiredtiger/test/cppsuite/test_harness/core/throttle.h
@@ -0,0 +1,73 @@
+/*-
+ * Public Domain 2014-present MongoDB, Inc.
+ * Public Domain 2008-2014 WiredTiger, Inc.
+ *
+ * This is free and unencumbered software released into the public domain.
+ *
+ * Anyone is free to copy, modify, publish, use, compile, sell, or
+ * distribute this software, either in source code form or as a compiled
+ * binary, for any purpose, commercial or non-commercial, and by any
+ * means.
+ *
+ * In jurisdictions that recognize copyright laws, the author or authors
+ * of this software dedicate any and all copyright interest in the
+ * software to the public domain. We make this dedication for the benefit
+ * of the public at large and to the detriment of our heirs and
+ * successors. We intend this dedication to be an overt act of
+ * relinquishment in perpetuity of all present and future rights to this
+ * software under copyright law.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef THROTTLE_H
+#define THROTTLE_H
+
+#include <thread>
+
+#include "configuration.h"
+
+namespace test_harness {
+class throttle {
+ public:
+ throttle(const int64_t op_count, const char interval)
+ {
+ testutil_assert(op_count > 0);
+ /* Lazily compute the ms for every type. */
+ if (interval == 's')
+ _ms = 1000 / op_count;
+ else if (interval == 'm')
+ _ms = (60 * 1000) / op_count;
+ else if (interval == 'h')
+ _ms = (60 * 60 * 1000) / op_count;
+ else
+ testutil_die(-1, "Specified throttle interval not supported.");
+ }
+
+ throttle(configuration *config)
+ : throttle(
+ config->get_optional_int(OP_COUNT, 1), config->get_optional_string(INTERVAL, "s")[0])
+ {
+ }
+
+ /* Default to a second per operation. */
+ throttle() : throttle(1, 's') {}
+
+ void
+ sleep()
+ {
+ std::this_thread::sleep_for(std::chrono::milliseconds(_ms));
+ }
+
+ private:
+ uint64_t _ms = 1000;
+};
+} // namespace test_harness
+
+#endif