diff options
author | Luke Chen <luke.chen@mongodb.com> | 2021-03-17 16:47:43 +1100 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-03-17 06:16:19 +0000 |
commit | 5a55d6bc9661d4fed5b7b443c1e327832bebffa7 (patch) | |
tree | 416eac7ec63675cf01790e71d6b57eed66ff0832 | |
parent | 8c70b1b75dbb73fde2697f7921fb2e2b1b76cd5f (diff) | |
download | mongo-5a55d6bc9661d4fed5b7b443c1e327832bebffa7.tar.gz |
Import wiredtiger: 30b8a4883b44e8e81d3eafca806a1263dfdc72b7 from branch mongodb-5.0
ref: 32a8143a2e..30b8a4883b
for: 4.9.0
WT-7300 Moving workload_generator load phase into run
4 files changed, 31 insertions, 44 deletions
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index 1f9ac347267..8f5292dd7c6 100644 --- a/src/third_party/wiredtiger/import.data +++ b/src/third_party/wiredtiger/import.data @@ -2,5 +2,5 @@ "vendor": "wiredtiger", "github": "wiredtiger/wiredtiger.git", "branch": "mongodb-5.0", - "commit": "32a8143a2e513cfacfbd28443225a26f64f1f58a" + "commit": "30b8a4883b44e8e81d3eafca806a1263dfdc72b7" } diff --git a/src/third_party/wiredtiger/test/cppsuite/test_harness/test.h b/src/third_party/wiredtiger/test/cppsuite/test_harness/test.h index f5cf0b8a6d9..d6768ce7e48 100644 --- a/src/third_party/wiredtiger/test/cppsuite/test_harness/test.h +++ b/src/third_party/wiredtiger/test/cppsuite/test_harness/test.h @@ -57,15 +57,18 @@ class test { test(const std::string &config) { _configuration = new configuration(name, config); - _workload_generator = new workload_generator(_configuration); _runtime_monitor = new runtime_monitor(_configuration); _timestamp_manager = new timestamp_manager(_configuration); + _workload_tracking = new workload_tracking(_configuration, OPERATION_TRACKING_TABLE_CONFIG, + TABLE_OPERATION_TRACKING, SCHEMA_TRACKING_TABLE_CONFIG, TABLE_SCHEMA_TRACKING); + _workload_generator = new workload_generator(_configuration, _workload_tracking); _thread_manager = new thread_manager(); /* * Ordering is not important here, any dependencies between components should be resolved * internally by the components. */ - _components = {_workload_generator, _timestamp_manager, _runtime_monitor}; + _components = { + _workload_tracking, _workload_generator, _timestamp_manager, _runtime_monitor}; } ~test() @@ -105,19 +108,6 @@ class test { /* Set up the test environment. */ connection_manager::instance().create(db_create_config); - /* Create the activity tracker if required. */ - testutil_check(_configuration->get_bool(ENABLE_TRACKING, enable_tracking)); - if (enable_tracking) { - _workload_tracking = - new workload_tracking(_configuration, OPERATION_TRACKING_TABLE_CONFIG, - TABLE_OPERATION_TRACKING, SCHEMA_TRACKING_TABLE_CONFIG, TABLE_SCHEMA_TRACKING); - /* Make sure the tracking component is loaded first to track all activities. */ - _components.insert(_components.begin(), _workload_tracking); - } else - _workload_tracking = nullptr; - /* Tell the workload generator whether tracking is enabled. */ - _workload_generator->set_tracker(_workload_tracking); - /* Initiate the load stage of each component. */ for (const auto &it : _components) it->load(); diff --git a/src/third_party/wiredtiger/test/cppsuite/test_harness/workload_generator.h b/src/third_party/wiredtiger/test/cppsuite/test_harness/workload_generator.h index 3eeebb40c1e..c5f81553d81 100644 --- a/src/third_party/wiredtiger/test/cppsuite/test_harness/workload_generator.h +++ b/src/third_party/wiredtiger/test/cppsuite/test_harness/workload_generator.h @@ -41,8 +41,8 @@ namespace test_harness { */ class workload_generator : public component { public: - workload_generator(configuration *configuration) - : component(configuration), _enable_tracking(false), _workload_tracking(nullptr) + workload_generator(configuration *configuration, workload_tracking *tracking) + : component(configuration), _tracking(tracking) { } @@ -52,6 +52,9 @@ class workload_generator : public component { delete it; } + /* Delete the copy constructor. */ + workload_generator(const workload_generator &) = delete; + /* * Function that performs the following steps using the configuration that is defined by the * test: @@ -64,7 +67,7 @@ class workload_generator : public component { * defined by the configuration. */ void - load() + populate() { WT_CURSOR *cursor; WT_SESSION *session; @@ -82,9 +85,7 @@ class workload_generator : public component { for (int i = 0; i < collection_count; ++i) { collection_name = "table:collection" + std::to_string(i); testutil_check(session->create(session, collection_name.c_str(), DEFAULT_TABLE_SCHEMA)); - if (_enable_tracking) - testutil_check( - _workload_tracking->save(tracking_operation::CREATE, collection_name, 0, "")); + testutil_check(_tracking->save(tracking_operation::CREATE, collection_name, 0, "")); _collection_names.push_back(collection_name); } debug_info( @@ -103,23 +104,23 @@ class workload_generator : public component { * configuration. */ std::string generated_value = random_generator::random_generator::instance().generate_string(value_size); - testutil_check(insert( - cursor, collection_name, j + 1, generated_value.c_str(), _enable_tracking)); + testutil_check(insert(cursor, collection_name, j + 1, generated_value.c_str())); } } - debug_info("Load stage done", _trace_level, DEBUG_INFO); + debug_info("Populate stage done", _trace_level, DEBUG_INFO); } /* Do the work of the main part of the workload. */ void run() { - WT_SESSION *session; int64_t duration_seconds, read_threads; - session = nullptr; duration_seconds = read_threads = 0; + /* Populate the database. */ + populate(); + testutil_check(_config->get_int(DURATION_SECONDS, duration_seconds)); testutil_check(_config->get_int(READ_THREADS, read_threads)); /* Generate threads to execute read operations on the collections. */ @@ -140,15 +141,6 @@ class workload_generator : public component { _thread_manager.join(); } - void - set_tracker(workload_tracking *tracking) - { - /* Tracking cannot be NULL. */ - testutil_check(tracking == nullptr); - _enable_tracking = true; - _workload_tracking = tracking; - } - /* Workload threaded operations. */ static void execute_operation(thread_context &context) @@ -201,7 +193,7 @@ class workload_generator : public component { /* WiredTiger APIs wrappers for single operations. */ template <typename K, typename V> int - insert(WT_CURSOR *cursor, const std::string &collection_name, K key, V value, bool save) + insert(WT_CURSOR *cursor, const std::string &collection_name, K key, V value) { int error_code; @@ -214,9 +206,7 @@ class workload_generator : public component { if (error_code == 0) { debug_info("key/value inserted", _trace_level, DEBUG_INFO); - if (save) - error_code = - _workload_tracking->save(tracking_operation::INSERT, collection_name, key, value); + error_code = _tracking->save(tracking_operation::INSERT, collection_name, key, value); } else debug_info("key/value insertion failed", _trace_level, DEBUG_ERROR); @@ -249,10 +239,9 @@ class workload_generator : public component { private: std::vector<std::string> _collection_names; - bool _enable_tracking; thread_manager _thread_manager; std::vector<thread_context *> _workers; - workload_tracking *_workload_tracking; + workload_tracking *_tracking; }; } // namespace test_harness diff --git a/src/third_party/wiredtiger/test/cppsuite/test_harness/workload_tracking.h b/src/third_party/wiredtiger/test/cppsuite/test_harness/workload_tracking.h index c60ecbae619..12d543df68e 100644 --- a/src/third_party/wiredtiger/test/cppsuite/test_harness/workload_tracking.h +++ b/src/third_party/wiredtiger/test/cppsuite/test_harness/workload_tracking.h @@ -60,7 +60,7 @@ class workload_tracking : public component { : component(_config), _cursor_operations(nullptr), _cursor_schema(nullptr), _operation_table_config(operation_table_config), _operation_table_name(operation_table_name), _schema_table_config(schema_table_config), - _schema_table_name(schema_table_name), _timestamp(0U) + _schema_table_name(schema_table_name), _timestamp(0U), _enabled(false) { } @@ -80,6 +80,10 @@ class workload_tracking : public component { load() { WT_SESSION *session; + /* Is tracking enabled? */ + testutil_check(_config->get_bool(ENABLE_TRACKING, _enabled)); + if (!_enabled) + return; /* Initiate schema tracking. */ session = connection_manager::instance().create_session(); @@ -109,7 +113,10 @@ class workload_tracking : public component { const V &value) { WT_CURSOR *cursor; - int error_code; + int error_code = 0; + + if (!_enabled) + return (error_code); /* Select the correct cursor to save in the collection associated to specific operations. */ switch (operation) { @@ -145,6 +152,7 @@ class workload_tracking : public component { WT_CURSOR *_cursor_operations; WT_CURSOR *_cursor_schema; uint64_t _timestamp; + bool _enabled; }; } // namespace test_harness |