summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Chen <luke.chen@mongodb.com>2021-03-17 16:47:43 +1100
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-03-17 06:16:19 +0000
commit5a55d6bc9661d4fed5b7b443c1e327832bebffa7 (patch)
tree416eac7ec63675cf01790e71d6b57eed66ff0832
parent8c70b1b75dbb73fde2697f7921fb2e2b1b76cd5f (diff)
downloadmongo-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
-rw-r--r--src/third_party/wiredtiger/import.data2
-rw-r--r--src/third_party/wiredtiger/test/cppsuite/test_harness/test.h20
-rw-r--r--src/third_party/wiredtiger/test/cppsuite/test_harness/workload_generator.h41
-rw-r--r--src/third_party/wiredtiger/test/cppsuite/test_harness/workload_tracking.h12
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