diff options
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.h | 73 |
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 |