diff options
74 files changed, 311 insertions, 575 deletions
diff --git a/src/mongo/client/remote_command_targeter.h b/src/mongo/client/remote_command_targeter.h index 7eed209d226..6e9cfcd582f 100644 --- a/src/mongo/client/remote_command_targeter.h +++ b/src/mongo/client/remote_command_targeter.h @@ -29,19 +29,15 @@ #pragma once +#include "mongo/base/status_with.h" +#include "mongo/client/connection_string.h" +#include "mongo/client/read_preference.h" #include "mongo/util/future.h" #include "mongo/util/net/hostandport.h" #include "mongo/util/time_support.h" namespace mongo { -class ConnectionString; -class OperationContext; -struct ReadPreferenceSetting; -struct HostAndPort; -template <typename T> -class StatusWith; - /** * Interface encapsulating the targeting logic for a given replica set or a standalone host. */ diff --git a/src/mongo/client/remote_command_targeter_factory_mock.cpp b/src/mongo/client/remote_command_targeter_factory_mock.cpp index 09fba5a0ac4..0aaafa8d301 100644 --- a/src/mongo/client/remote_command_targeter_factory_mock.cpp +++ b/src/mongo/client/remote_command_targeter_factory_mock.cpp @@ -31,13 +31,6 @@ #include "mongo/client/remote_command_targeter_factory_mock.h" -#include <memory> - -#include "mongo/base/status_with.h" -#include "mongo/client/connection_string.h" -#include "mongo/client/remote_command_targeter_mock.h" -#include "mongo/util/assert_util.h" - namespace mongo { namespace { diff --git a/src/mongo/client/remote_command_targeter_factory_mock.h b/src/mongo/client/remote_command_targeter_factory_mock.h index 96d2299c3ba..470d79e21a8 100644 --- a/src/mongo/client/remote_command_targeter_factory_mock.h +++ b/src/mongo/client/remote_command_targeter_factory_mock.h @@ -32,11 +32,10 @@ #include <map> #include "mongo/client/remote_command_targeter_factory.h" +#include "mongo/client/remote_command_targeter_mock.h" namespace mongo { -class RemoteCommandTargeterMock; - /** * Factory which instantiates mock remote command targeters. This class is not thread-safe and is * only used for unit-testing. diff --git a/src/mongo/client/remote_command_targeter_mock.cpp b/src/mongo/client/remote_command_targeter_mock.cpp index fbf5b91ae65..e643a1af8c7 100644 --- a/src/mongo/client/remote_command_targeter_mock.cpp +++ b/src/mongo/client/remote_command_targeter_mock.cpp @@ -31,9 +31,6 @@ #include "mongo/client/remote_command_targeter_mock.h" -#include "mongo/base/status_with.h" -#include "mongo/client/read_preference.h" - namespace mongo { RemoteCommandTargeterMock::RemoteCommandTargeterMock() diff --git a/src/mongo/client/remote_command_targeter_mock.h b/src/mongo/client/remote_command_targeter_mock.h index f9731ca03f4..1b89b08dde7 100644 --- a/src/mongo/client/remote_command_targeter_mock.h +++ b/src/mongo/client/remote_command_targeter_mock.h @@ -31,9 +31,7 @@ #include <set> -#include "mongo/client/connection_string.h" #include "mongo/client/remote_command_targeter.h" -#include "mongo/util/net/hostandport.h" namespace mongo { diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript index 642e54fbb7a..adab7bc70e4 100644 --- a/src/mongo/db/SConscript +++ b/src/mongo/db/SConscript @@ -1507,6 +1507,17 @@ env.Library( ) env.Library( + target='rs_local_client', + source=[ + 'rs_local_client.cpp', + ], + LIBDEPS_PRIVATE=[ + '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface', + 'dbdirectclient', + ], +) + +env.Library( target='keys_collection_document', source=[ 'keys_collection_document.cpp', @@ -1523,11 +1534,13 @@ env.Library( 'keys_collection_client_direct.cpp', ], LIBDEPS=[ - 'keys_collection_document', - 'logical_time', '$BUILD_DIR/mongo/s/catalog/sharding_catalog_client', - '$BUILD_DIR/mongo/s/client/rs_local_client', '$BUILD_DIR/mongo/s/client/shard_interface', + 'keys_collection_document', + 'logical_time', + ], + LIBDEPS_PRIVATE=[ + 'rs_local_client', ], ) @@ -1635,11 +1648,11 @@ env.Library( 'logical_clock_test_fixture.cpp', ], LIBDEPS= [ + '$BUILD_DIR/mongo/db/auth/authmocks', + '$BUILD_DIR/mongo/util/clock_source_mock', + 's/sharding_mongod_test_fixture', 'signed_logical_time', 'vector_clock', - '$BUILD_DIR/mongo/db/auth/authmocks', - '$BUILD_DIR/mongo/s/sharding_mongod_test_fixture', - '$BUILD_DIR/mongo/util/clock_source_mock' ], ) @@ -1663,7 +1676,6 @@ env.Library( 'service_context_d_test_fixture.cpp', ], LIBDEPS=[ - '$BUILD_DIR/mongo/unittest/unittest', 'service_context_test_fixture', ], LIBDEPS_PRIVATE=[ @@ -1989,7 +2001,7 @@ env.CppLibfuzzerTest( '$BUILD_DIR/mongo/transport/service_entry_point', '$BUILD_DIR/mongo/transport/transport_layer_mock', '$BUILD_DIR/mongo/db/repl/replmocks', - '$BUILD_DIR/mongo/unittest/unittest/', + '$BUILD_DIR/mongo/unittest/unittest', ], ) diff --git a/src/mongo/db/keys_collection_client_direct.h b/src/mongo/db/keys_collection_client_direct.h index 6e96d8e94ed..3b101d99167 100644 --- a/src/mongo/db/keys_collection_client_direct.h +++ b/src/mongo/db/keys_collection_client_direct.h @@ -32,9 +32,8 @@ #include <memory> #include <string> -#include "mongo/base/status.h" #include "mongo/db/keys_collection_client.h" -#include "mongo/s/client/rs_local_client.h" +#include "mongo/db/rs_local_client.h" namespace mongo { diff --git a/src/mongo/db/logical_clock_test_fixture.h b/src/mongo/db/logical_clock_test_fixture.h index 4b3322d406b..4602ae629cd 100644 --- a/src/mongo/db/logical_clock_test_fixture.h +++ b/src/mongo/db/logical_clock_test_fixture.h @@ -29,8 +29,7 @@ #pragma once -#include "mongo/s/sharding_mongod_test_fixture.h" -#include "mongo/unittest/unittest.h" +#include "mongo/db/s/sharding_mongod_test_fixture.h" namespace mongo { diff --git a/src/mongo/db/pipeline/SConscript b/src/mongo/db/pipeline/SConscript index d7841f55b3c..a45860c9c15 100644 --- a/src/mongo/db/pipeline/SConscript +++ b/src/mongo/db/pipeline/SConscript @@ -402,7 +402,6 @@ env.CppUnitTest( '$BUILD_DIR/mongo/db/service_context_d_test_fixture', '$BUILD_DIR/mongo/db/service_context_test_fixture', '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture', - '$BUILD_DIR/mongo/s/catalog_cache_test_fixture', '$BUILD_DIR/mongo/s/is_mongos', '$BUILD_DIR/mongo/s/query/router_exec_stage', '$BUILD_DIR/mongo/s/sharding_router_test_fixture', diff --git a/src/mongo/db/pipeline/process_interface/SConscript b/src/mongo/db/pipeline/process_interface/SConscript index aa783988fd3..5c74b6f7999 100644 --- a/src/mongo/db/pipeline/process_interface/SConscript +++ b/src/mongo/db/pipeline/process_interface/SConscript @@ -120,7 +120,7 @@ env.CppUnitTest( '$BUILD_DIR/mongo/db/query/query_test_service_context', '$BUILD_DIR/mongo/db/service_context_test_fixture', '$BUILD_DIR/mongo/db/vector_clock_mongod', - '$BUILD_DIR/mongo/s/catalog_cache_test_fixture', + '$BUILD_DIR/mongo/s/sharding_router_test_fixture', 'mongos_process_interface', 'shardsvr_process_interface', ] diff --git a/src/mongo/s/client/rs_local_client.cpp b/src/mongo/db/rs_local_client.cpp index e1ec4917f8f..253efa13eca 100644 --- a/src/mongo/s/client/rs_local_client.cpp +++ b/src/mongo/db/rs_local_client.cpp @@ -27,14 +27,10 @@ * it in the license file. */ -#include <boost/none_t.hpp> - #include "mongo/platform/basic.h" -#include "mongo/s/client/rs_local_client.h" +#include "mongo/db/rs_local_client.h" -#include "mongo/base/status.h" -#include "mongo/base/status_with.h" #include "mongo/db/curop.h" #include "mongo/db/dbdirectclient.h" #include "mongo/db/repl/repl_client_info.h" @@ -42,7 +38,6 @@ #include "mongo/db/repl/replication_coordinator.h" #include "mongo/rpc/get_status_from_command_result.h" #include "mongo/rpc/unique_message.h" -#include "mongo/s/client/shard.h" #include "mongo/util/scopeguard.h" namespace mongo { diff --git a/src/mongo/s/client/rs_local_client.h b/src/mongo/db/rs_local_client.h index 233732b5c8e..233732b5c8e 100644 --- a/src/mongo/s/client/rs_local_client.h +++ b/src/mongo/db/rs_local_client.h diff --git a/src/mongo/db/s/SConscript b/src/mongo/db/s/SConscript index 841cddda124..d072b62a778 100644 --- a/src/mongo/db/s/SConscript +++ b/src/mongo/db/s/SConscript @@ -81,6 +81,7 @@ env.Library( 'sharding_state_recovery.cpp', 'sharding_statistics.cpp', 'split_chunk.cpp', + 'shard_local.cpp', 'split_vector.cpp', 'start_chunk_clone_request.cpp', env.Idlc('migration_coordinator_document.idl')[0], @@ -95,13 +96,11 @@ env.Library( '$BUILD_DIR/mongo/db/op_observer_impl', '$BUILD_DIR/mongo/db/ops/write_ops_exec', '$BUILD_DIR/mongo/db/repl/oplog', - '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface', '$BUILD_DIR/mongo/db/rw_concern_d', '$BUILD_DIR/mongo/db/server_options_core', '$BUILD_DIR/mongo/db/storage/remove_saver', '$BUILD_DIR/mongo/db/transaction', '$BUILD_DIR/mongo/db/vector_clock_mongod', - '$BUILD_DIR/mongo/s/client/shard_local', '$BUILD_DIR/mongo/s/query/cluster_aggregate', '$BUILD_DIR/mongo/s/sharding_initialization', 'chunk_splitter', @@ -113,6 +112,7 @@ env.Library( ], LIBDEPS_PRIVATE=[ '$BUILD_DIR/mongo/db/index_builds_coordinator_interface', + '$BUILD_DIR/mongo/db/rs_local_client', '$BUILD_DIR/mongo/db/session_catalog', '$BUILD_DIR/mongo/idl/server_parameter', ], @@ -342,60 +342,40 @@ env.Library( ) env.Library( - target='config_server_test_fixture', + target='sharding_mongod_test_fixture', source=[ - 'config/config_server_test_fixture.cpp', + 'sharding_mongod_test_fixture.cpp', ], LIBDEPS=[ - '$BUILD_DIR/mongo/s/sharding_mongod_test_fixture', - 'sharding_catalog_manager', + '$BUILD_DIR/mongo/db/repl/drop_pending_collection_reaper', + '$BUILD_DIR/mongo/db/repl/replmocks', + '$BUILD_DIR/mongo/db/service_context_d_test_fixture', + '$BUILD_DIR/mongo/s/sharding_test_fixture_common', + 'sharding_runtime_d', ], ) -env.CppUnitTest( - target='db_s_test', +env.Library( + target='shard_server_test_fixture', source=[ - 'chunk_split_state_driver_test.cpp', - 'config_server_op_observer_test.cpp', - 'migration_session_id_test.cpp', - 'sharding_logging_test.cpp', - 'start_chunk_clone_request_test.cpp', - 'type_shard_identity_test.cpp', - 'vector_clock_config_server_test.cpp', - 'wait_for_majority_service_test.cpp', + 'shard_server_test_fixture.cpp', ], LIBDEPS=[ - '$BUILD_DIR/mongo/db/auth/authmocks', + '$BUILD_DIR/mongo/s/catalog/dist_lock_catalog_mock', '$BUILD_DIR/mongo/s/catalog/dist_lock_manager_mock', - '$BUILD_DIR/mongo/s/sharding_router_test_fixture', - 'chunk_splitter', - 'config_server_test_fixture', - 'sharding_logging', - 'sharding_runtime_d', - 'type_shard_identity', + 'sharding_mongod_test_fixture', ], ) -env.CppUnitTest( - target='db_s_balancer_test', +env.Library( + target='config_server_test_fixture', source=[ - 'balancer/balancer_chunk_selection_policy_test.cpp', - 'balancer/balancer_policy_test.cpp', - 'balancer/cluster_statistics_test.cpp', - 'balancer/core_options_stub.cpp', - 'balancer/migration_manager_test.cpp', - 'balancer/migration_test_fixture.cpp', - 'balancer/scoped_migration_request_test.cpp', - 'balancer/type_migration_test.cpp', + 'config/config_server_test_fixture.cpp', ], LIBDEPS=[ - '$BUILD_DIR/mongo/db/auth/authmocks', - '$BUILD_DIR/mongo/db/read_write_concern_defaults_mock', - '$BUILD_DIR/mongo/db/repl/replication_info', - '$BUILD_DIR/mongo/util/version_impl', - 'balancer', - 'config_server_test_fixture', - ] + 'sharding_catalog_manager', + 'sharding_mongod_test_fixture', + ], ) env.CppUnitTest( @@ -405,18 +385,25 @@ env.CppUnitTest( 'active_move_primaries_registry_test.cpp', 'active_shard_collection_registry_test.cpp', 'catalog_cache_loader_mock.cpp', + 'chunk_split_state_driver_test.cpp', 'migration_chunk_cloner_source_legacy_test.cpp', 'migration_destination_manager_test.cpp', + 'migration_session_id_test.cpp', 'migration_util_test.cpp', 'namespace_metadata_change_notifications_test.cpp', 'session_catalog_migration_destination_test.cpp', 'session_catalog_migration_source_test.cpp', + 'shard_local_test.cpp', 'shard_metadata_util_test.cpp', 'shard_server_catalog_cache_loader_test.cpp', 'sharding_initialization_mongod_test.cpp', 'sharding_initialization_op_observer_test.cpp', + 'sharding_logging_test.cpp', 'split_vector_test.cpp', + 'start_chunk_clone_request_test.cpp', + 'type_shard_identity_test.cpp', 'vector_clock_shard_server_test.cpp', + 'wait_for_majority_service_test.cpp', ], LIBDEPS_PRIVATE=[ '$BUILD_DIR/mongo/db/auth/authmocks', @@ -427,9 +414,9 @@ env.CppUnitTest( '$BUILD_DIR/mongo/db/repl/mock_repl_coord_server_fixture', '$BUILD_DIR/mongo/db/repl/storage_interface_impl', '$BUILD_DIR/mongo/s/catalog/dist_lock_manager_mock', - '$BUILD_DIR/mongo/s/catalog/sharding_catalog_client_impl', '$BUILD_DIR/mongo/s/catalog/sharding_catalog_client_mock', - '$BUILD_DIR/mongo/s/shard_server_test_fixture', + 'shard_server_test_fixture', + 'sharding_logging', 'sharding_runtime_d', ], ) @@ -450,9 +437,8 @@ env.CppUnitTest( '$BUILD_DIR/mongo/client/remote_command_targeter_mock', '$BUILD_DIR/mongo/db/auth/authmocks', '$BUILD_DIR/mongo/db/repl/replmocks', - '$BUILD_DIR/mongo/executor/network_test_env', '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture', - '$BUILD_DIR/mongo/s/shard_server_test_fixture', + 'shard_server_test_fixture', ], ) @@ -470,13 +456,13 @@ env.CppUnitTest( '$BUILD_DIR/mongo/db/auth/authmocks', '$BUILD_DIR/mongo/db/commands/server_status', '$BUILD_DIR/mongo/s/catalog/sharding_catalog_client_mock', - '$BUILD_DIR/mongo/s/shard_server_test_fixture', + 'shard_server_test_fixture', 'transaction_coordinator', ], ) env.CppUnitTest( - target='db_s_sharding_catalog_manager_test', + target='db_s_config_server_test', source=[ 'config/initial_split_policy_test.cpp', 'config/sharding_catalog_manager_add_shard_test.cpp', @@ -494,10 +480,24 @@ env.CppUnitTest( 'config/sharding_catalog_manager_remove_shard_test.cpp', 'config/sharding_catalog_manager_shard_collection_test.cpp', 'config/sharding_catalog_manager_split_chunk_test.cpp', + 'balancer/balancer_chunk_selection_policy_test.cpp', + 'balancer/balancer_policy_test.cpp', + 'balancer/cluster_statistics_test.cpp', + 'balancer/core_options_stub.cpp', + 'balancer/migration_manager_test.cpp', + 'balancer/migration_test_fixture.cpp', + 'balancer/scoped_migration_request_test.cpp', + 'balancer/type_migration_test.cpp', + 'config_server_op_observer_test.cpp', + 'vector_clock_config_server_test.cpp', ], LIBDEPS=[ '$BUILD_DIR/mongo/db/auth/authmocks', + '$BUILD_DIR/mongo/db/read_write_concern_defaults_mock', + '$BUILD_DIR/mongo/db/repl/replication_info', + '$BUILD_DIR/mongo/s/catalog/dist_lock_manager_mock', '$BUILD_DIR/mongo/util/version_impl', + 'balancer', 'config_server_test_fixture', ] ) diff --git a/src/mongo/db/s/collection_metadata_filtering_test.cpp b/src/mongo/db/s/collection_metadata_filtering_test.cpp index 348cd18bfb4..ebb0d564bea 100644 --- a/src/mongo/db/s/collection_metadata_filtering_test.cpp +++ b/src/mongo/db/s/collection_metadata_filtering_test.cpp @@ -32,8 +32,8 @@ #include "mongo/db/catalog_raii.h" #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/operation_sharding_state.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/s/catalog/type_chunk.h" -#include "mongo/s/shard_server_test_fixture.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/collection_sharding_runtime_test.cpp b/src/mongo/db/s/collection_sharding_runtime_test.cpp index c20f65db9d0..08d6ad3edad 100644 --- a/src/mongo/db/s/collection_sharding_runtime_test.cpp +++ b/src/mongo/db/s/collection_sharding_runtime_test.cpp @@ -34,8 +34,8 @@ #include "mongo/db/dbdirectclient.h" #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/operation_sharding_state.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/wait_for_majority_service.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/util/fail_point.h" namespace mongo { diff --git a/src/mongo/db/s/config/config_server_test_fixture.cpp b/src/mongo/db/s/config/config_server_test_fixture.cpp index 0cbc51e25b4..de55abb2be4 100644 --- a/src/mongo/db/s/config/config_server_test_fixture.cpp +++ b/src/mongo/db/s/config/config_server_test_fixture.cpp @@ -51,7 +51,6 @@ #include "mongo/db/repl/repl_settings.h" #include "mongo/db/repl/replication_coordinator_mock.h" #include "mongo/db/s/config/sharding_catalog_manager.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor_pool.h" #include "mongo/executor/thread_pool_task_executor_test_fixture.h" #include "mongo/rpc/metadata/repl_set_metadata.h" @@ -60,17 +59,13 @@ #include "mongo/s/catalog/dist_lock_catalog_impl.h" #include "mongo/s/catalog/replset_dist_lock_manager.h" #include "mongo/s/catalog/sharding_catalog_client_impl.h" -#include "mongo/s/catalog/type_changelog.h" #include "mongo/s/catalog/type_chunk.h" #include "mongo/s/catalog/type_collection.h" #include "mongo/s/catalog/type_database.h" #include "mongo/s/catalog/type_shard.h" #include "mongo/s/catalog_cache.h" #include "mongo/s/chunk_version.h" -#include "mongo/s/client/shard_factory.h" -#include "mongo/s/client/shard_local.h" #include "mongo/s/client/shard_registry.h" -#include "mongo/s/client/shard_remote.h" #include "mongo/s/config_server_catalog_cache_loader.h" #include "mongo/s/database_version_helpers.h" #include "mongo/s/grid.h" diff --git a/src/mongo/db/s/config/config_server_test_fixture.h b/src/mongo/db/s/config/config_server_test_fixture.h index 0c64cfca33b..ba008a827f6 100644 --- a/src/mongo/db/s/config/config_server_test_fixture.h +++ b/src/mongo/db/s/config/config_server_test_fixture.h @@ -30,7 +30,7 @@ #pragma once #include "mongo/db/catalog_raii.h" -#include "mongo/s/sharding_mongod_test_fixture.h" +#include "mongo/db/s/sharding_mongod_test_fixture.h" namespace mongo { @@ -43,18 +43,19 @@ class Shard; class ShardId; class ShardRegistry; class ShardType; -template <typename T> -class StatusWith; /** * Provides config-specific functionality in addition to the mock storage engine and mock network * provided by ShardingMongodTestFixture. */ class ConfigServerTestFixture : public ShardingMongodTestFixture { -public: +protected: ConfigServerTestFixture(); ~ConfigServerTestFixture(); + void setUp() override; + void tearDown() override; + std::shared_ptr<Shard> getConfigShard() const; /** @@ -150,12 +151,6 @@ public: */ std::vector<KeysCollectionDocument> getKeys(OperationContext* opCtx); -protected: - /** - * Sets this node up as a mongod with sharding components for ClusterRole::ConfigServer. - */ - void setUp() override; - /** * Sets this node up and locks the config db in _setUp() before calling * initializeGlobalShardingStateForMongodForTest(). The RAII object for the database lock is @@ -170,8 +165,6 @@ protected: */ void setUpAndInitializeConfigDb(); - void tearDown() override; - std::unique_ptr<DistLockCatalog> makeDistLockCatalog() override; std::unique_ptr<DistLockManager> makeDistLockManager( diff --git a/src/mongo/db/s/config/sharding_catalog_manager_remove_shard_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_remove_shard_test.cpp index acf08255915..254afab7c12 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_remove_shard_test.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_remove_shard_test.cpp @@ -39,11 +39,9 @@ #include "mongo/db/ops/write_ops.h" #include "mongo/db/s/config/config_server_test_fixture.h" #include "mongo/db/s/config/sharding_catalog_manager.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor.h" #include "mongo/rpc/metadata/repl_set_metadata.h" #include "mongo/rpc/metadata/tracking_metadata.h" -#include "mongo/s/catalog/type_changelog.h" #include "mongo/s/catalog/type_chunk.h" #include "mongo/s/catalog/type_database.h" #include "mongo/s/catalog/type_shard.h" diff --git a/src/mongo/db/s/metadata_manager_test.cpp b/src/mongo/db/s/metadata_manager_test.cpp index dc053e3c202..760f04ea78e 100644 --- a/src/mongo/db/s/metadata_manager_test.cpp +++ b/src/mongo/db/s/metadata_manager_test.cpp @@ -37,6 +37,7 @@ #include "mongo/db/jsobj.h" #include "mongo/db/namespace_string.h" #include "mongo/db/s/metadata_manager.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/sharding_runtime_d_params_gen.h" #include "mongo/db/s/sharding_state.h" #include "mongo/db/server_options.h" @@ -44,7 +45,6 @@ #include "mongo/executor/task_executor.h" #include "mongo/s/catalog/type_chunk.h" #include "mongo/s/client/shard_registry.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/stdx/condition_variable.h" #include "mongo/unittest/unittest.h" #include "mongo/util/assert_util.h" diff --git a/src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp b/src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp index 730a2d4af3b..446b5984c68 100644 --- a/src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp +++ b/src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp @@ -36,10 +36,10 @@ #include "mongo/db/namespace_string.h" #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/migration_chunk_cloner_source_legacy.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/s/catalog/sharding_catalog_client_mock.h" #include "mongo/s/catalog/type_shard.h" #include "mongo/s/client/shard_registry.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/unittest/unittest.h" #include "mongo/util/clock_source_mock.h" diff --git a/src/mongo/db/s/migration_destination_manager_test.cpp b/src/mongo/db/s/migration_destination_manager_test.cpp index 9c5fc74de87..51aa7174b35 100644 --- a/src/mongo/db/s/migration_destination_manager_test.cpp +++ b/src/mongo/db/s/migration_destination_manager_test.cpp @@ -30,8 +30,7 @@ #include "mongo/platform/basic.h" #include "mongo/db/s/migration_destination_manager.h" -#include "mongo/s/shard_server_test_fixture.h" -#include "mongo/unittest/unittest.h" +#include "mongo/db/s/shard_server_test_fixture.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/migration_util_test.cpp b/src/mongo/db/s/migration_util_test.cpp index 9ae0dfa8bed..f643224ccee 100644 --- a/src/mongo/db/s/migration_util_test.cpp +++ b/src/mongo/db/s/migration_util_test.cpp @@ -37,13 +37,12 @@ #include "mongo/db/s/persistent_task_store.h" #include "mongo/db/s/shard_filtering_metadata_refresh.h" #include "mongo/db/s/shard_server_catalog_cache_loader.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/sharding_state.h" #include "mongo/db/s/wait_for_majority_service.h" #include "mongo/s/catalog/sharding_catalog_client_mock.h" #include "mongo/s/catalog/type_shard.h" #include "mongo/s/database_version_helpers.h" -#include "mongo/s/shard_server_test_fixture.h" -#include "mongo/unittest/unittest.h" #include "mongo/util/future.h" namespace mongo { diff --git a/src/mongo/db/s/op_observer_sharding_test.cpp b/src/mongo/db/s/op_observer_sharding_test.cpp index 54b15903ce8..eaf8e55f78b 100644 --- a/src/mongo/db/s/op_observer_sharding_test.cpp +++ b/src/mongo/db/s/op_observer_sharding_test.cpp @@ -33,8 +33,8 @@ #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/op_observer_sharding_impl.h" #include "mongo/db/s/operation_sharding_state.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/type_shard_identity.h" -#include "mongo/s/shard_server_test_fixture.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/persistent_task_queue_test.cpp b/src/mongo/db/s/persistent_task_queue_test.cpp index 96324d13761..6009b99860c 100644 --- a/src/mongo/db/s/persistent_task_queue_test.cpp +++ b/src/mongo/db/s/persistent_task_queue_test.cpp @@ -31,10 +31,9 @@ #include "mongo/db/db_raii.h" #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/persistent_task_queue.h" -#include "mongo/s/shard_server_test_fixture.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/stdx/thread.h" #include "mongo/unittest/barrier.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/persistent_task_store_test.cpp b/src/mongo/db/s/persistent_task_store_test.cpp index c2abcf6a7be..177fe264d1d 100644 --- a/src/mongo/db/s/persistent_task_store_test.cpp +++ b/src/mongo/db/s/persistent_task_store_test.cpp @@ -27,11 +27,12 @@ * it in the license file. */ +#include "mongo/platform/basic.h" + #include "mongo/db/db_raii.h" #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/persistent_task_store.h" -#include "mongo/s/shard_server_test_fixture.h" -#include "mongo/unittest/unittest.h" +#include "mongo/db/s/shard_server_test_fixture.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/range_deletion_util_test.cpp b/src/mongo/db/s/range_deletion_util_test.cpp index 0121d4b9e7c..919d723028f 100644 --- a/src/mongo/db/s/range_deletion_util_test.cpp +++ b/src/mongo/db/s/range_deletion_util_test.cpp @@ -37,11 +37,10 @@ #include "mongo/db/s/persistent_task_store.h" #include "mongo/db/s/range_deletion_task_gen.h" #include "mongo/db/s/range_deletion_util.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/sharding_runtime_d_params_gen.h" #include "mongo/db/s/wait_for_majority_service.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/unittest/death_test.h" -#include "mongo/unittest/unittest.h" #include "mongo/util/fail_point.h" namespace mongo { diff --git a/src/mongo/db/s/session_catalog_migration_destination_test.cpp b/src/mongo/db/s/session_catalog_migration_destination_test.cpp index 1f8e00bd3b2..68119925dfb 100644 --- a/src/mongo/db/s/session_catalog_migration_destination_test.cpp +++ b/src/mongo/db/s/session_catalog_migration_destination_test.cpp @@ -46,6 +46,7 @@ #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/migration_session_id.h" #include "mongo/db/s/session_catalog_migration_destination.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/server_options.h" #include "mongo/db/session_catalog_mongod.h" #include "mongo/db/session_txn_record_gen.h" @@ -55,9 +56,7 @@ #include "mongo/s/catalog/sharding_catalog_client_mock.h" #include "mongo/s/catalog/type_shard.h" #include "mongo/s/client/shard_registry.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/stdx/thread.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace { diff --git a/src/mongo/s/client/shard_local.cpp b/src/mongo/db/s/shard_local.cpp index ef6ec9cda7c..6b18e6fa849 100644 --- a/src/mongo/s/client/shard_local.cpp +++ b/src/mongo/db/s/shard_local.cpp @@ -27,14 +27,10 @@ * it in the license file. */ -#include <boost/none_t.hpp> - #include "mongo/platform/basic.h" -#include "mongo/s/client/shard_local.h" +#include "mongo/db/s/shard_local.h" -#include "mongo/base/status.h" -#include "mongo/base/status_with.h" #include "mongo/client/remote_command_targeter.h" #include "mongo/db/catalog/index_catalog.h" #include "mongo/db/catalog_raii.h" diff --git a/src/mongo/s/client/shard_local.h b/src/mongo/db/s/shard_local.h index 7a2ed6d1c78..2bce2dad081 100644 --- a/src/mongo/s/client/shard_local.h +++ b/src/mongo/db/s/shard_local.h @@ -29,7 +29,7 @@ #pragma once -#include "mongo/s/client/rs_local_client.h" +#include "mongo/db/rs_local_client.h" #include "mongo/s/client/shard.h" namespace mongo { diff --git a/src/mongo/s/client/shard_local_test.cpp b/src/mongo/db/s/shard_local_test.cpp index fcc00899ecf..d7314c965cf 100644 --- a/src/mongo/s/client/shard_local_test.cpp +++ b/src/mongo/db/s/shard_local_test.cpp @@ -29,10 +29,6 @@ #include "mongo/platform/basic.h" -#include "mongo/s/client/shard_local.h" - -#include <memory> - #include "mongo/client/read_preference.h" #include "mongo/db/catalog_raii.h" #include "mongo/db/client.h" @@ -40,6 +36,7 @@ #include "mongo/db/query/find_and_modify_request.h" #include "mongo/db/repl/replication_coordinator.h" #include "mongo/db/repl/replication_coordinator_mock.h" +#include "mongo/db/s/shard_local.h" #include "mongo/db/service_context_d_test_fixture.h" #include "mongo/db/write_concern_options.h" #include "mongo/s/client/shard_registry.h" diff --git a/src/mongo/db/s/shard_metadata_util_test.cpp b/src/mongo/db/s/shard_metadata_util_test.cpp index 771dbab13ec..0b963169f8d 100644 --- a/src/mongo/db/s/shard_metadata_util_test.cpp +++ b/src/mongo/db/s/shard_metadata_util_test.cpp @@ -35,11 +35,10 @@ #include "mongo/client/remote_command_targeter_mock.h" #include "mongo/db/commands.h" #include "mongo/db/dbdirectclient.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/rpc/get_status_from_command_result.h" #include "mongo/s/catalog/type_chunk.h" #include "mongo/s/catalog/type_shard_collection.h" -#include "mongo/s/shard_server_test_fixture.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp b/src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp index 902b09c3a64..5cfc7ce4124 100644 --- a/src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp +++ b/src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp @@ -29,13 +29,11 @@ #include "mongo/platform/basic.h" -#include "mongo/db/s/shard_server_catalog_cache_loader.h" - #include "mongo/db/s/catalog_cache_loader_mock.h" +#include "mongo/db/s/shard_server_catalog_cache_loader.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/s/catalog/type_chunk.h" #include "mongo/s/catalog/type_collection.h" -#include "mongo/s/shard_server_test_fixture.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace { diff --git a/src/mongo/s/shard_server_test_fixture.cpp b/src/mongo/db/s/shard_server_test_fixture.cpp index bd42dc5be66..b916c674792 100644 --- a/src/mongo/s/shard_server_test_fixture.cpp +++ b/src/mongo/db/s/shard_server_test_fixture.cpp @@ -29,9 +29,7 @@ #include "mongo/platform/basic.h" -#include "mongo/s/shard_server_test_fixture.h" - -#include <memory> +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/client/remote_command_targeter_mock.h" #include "mongo/db/commands.h" @@ -45,11 +43,8 @@ #include "mongo/s/config_server_catalog_cache_loader.h" namespace mongo { -namespace { - -const HostAndPort kConfigHostAndPort("dummy", 123); -} // namespace +const HostAndPort ShardServerTestFixture::kConfigHostAndPort("dummy", 123); ShardServerTestFixture::ShardServerTestFixture() = default; @@ -62,7 +57,6 @@ std::shared_ptr<RemoteCommandTargeterMock> ShardServerTestFixture::configTargete void ShardServerTestFixture::setUp() { ShardingMongodTestFixture::setUp(); - replicationCoordinator()->alwaysAllowWrites(true); // Initialize sharding components as a shard server. diff --git a/src/mongo/s/shard_server_test_fixture.h b/src/mongo/db/s/shard_server_test_fixture.h index e898b933d99..deee682e174 100644 --- a/src/mongo/s/shard_server_test_fixture.h +++ b/src/mongo/db/s/shard_server_test_fixture.h @@ -29,23 +29,23 @@ #pragma once -#include "mongo/db/server_options.h" -#include "mongo/s/sharding_mongod_test_fixture.h" +#include "mongo/db/s/sharding_mongod_test_fixture.h" namespace mongo { -class RemoteCommandTargeterMock; - /** * Test fixture for shard components, as opposed to config or mongos components. Provides a mock * network and ephemeral storage engine via ShardingMongodTestFixture. Additionally sets up mock * dist lock catalog and manager with a real catalog client. */ class ShardServerTestFixture : public ShardingMongodTestFixture { -public: +protected: ShardServerTestFixture(); ~ShardServerTestFixture(); + void setUp() override; + void tearDown() override; + /** * Returns the mock targeter for the config server. Useful to use like so, * @@ -57,11 +57,6 @@ public: */ std::shared_ptr<RemoteCommandTargeterMock> configTargeterMock(); -protected: - void setUp() override; - - void tearDown() override; - /** * Creates a DistLockCatalogMock. */ @@ -79,6 +74,8 @@ protected: std::unique_ptr<ShardingCatalogClient> makeShardingCatalogClient( std::unique_ptr<DistLockManager> distLockManager) override; + static const HostAndPort kConfigHostAndPort; + const ShardId _myShardName{"myShardName"}; OID _clusterId; }; diff --git a/src/mongo/db/s/sharding_initialization_mongod.cpp b/src/mongo/db/s/sharding_initialization_mongod.cpp index accb9c65406..0ab2d96fab7 100644 --- a/src/mongo/db/s/sharding_initialization_mongod.cpp +++ b/src/mongo/db/s/sharding_initialization_mongod.cpp @@ -50,6 +50,7 @@ #include "mongo/db/s/chunk_splitter.h" #include "mongo/db/s/periodic_balancer_config_refresher.h" #include "mongo/db/s/read_only_catalog_cache_loader.h" +#include "mongo/db/s/shard_local.h" #include "mongo/db/s/shard_server_catalog_cache_loader.h" #include "mongo/db/s/sharding_config_optime_gossip.h" #include "mongo/db/s/transaction_coordinator_service.h" @@ -59,7 +60,6 @@ #include "mongo/rpc/metadata/egress_metadata_hook_list.h" #include "mongo/s/catalog_cache.h" #include "mongo/s/client/shard_factory.h" -#include "mongo/s/client/shard_local.h" #include "mongo/s/client/shard_remote.h" #include "mongo/s/client/sharding_connection_hook.h" #include "mongo/s/config_server_catalog_cache_loader.h" diff --git a/src/mongo/db/s/sharding_initialization_mongod_test.cpp b/src/mongo/db/s/sharding_initialization_mongod_test.cpp index 6af6ff00399..a724a245f84 100644 --- a/src/mongo/db/s/sharding_initialization_mongod_test.cpp +++ b/src/mongo/db/s/sharding_initialization_mongod_test.cpp @@ -40,6 +40,7 @@ #include "mongo/db/s/op_observer_sharding_impl.h" #include "mongo/db/s/shard_server_catalog_cache_loader.h" #include "mongo/db/s/shard_server_op_observer.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/sharding_initialization_mongod.h" #include "mongo/db/s/type_shard_identity.h" #include "mongo/db/server_options.h" @@ -47,7 +48,6 @@ #include "mongo/s/catalog/sharding_catalog_client_impl.h" #include "mongo/s/client/shard_registry.h" #include "mongo/s/config_server_catalog_cache_loader.h" -#include "mongo/s/shard_server_test_fixture.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/sharding_initialization_op_observer_test.cpp b/src/mongo/db/s/sharding_initialization_op_observer_test.cpp index 6cd2ccd2605..563a6325454 100644 --- a/src/mongo/db/s/sharding_initialization_op_observer_test.cpp +++ b/src/mongo/db/s/sharding_initialization_op_observer_test.cpp @@ -40,12 +40,12 @@ #include "mongo/db/s/shard_server_catalog_cache_loader.h" #include "mongo/db/s/shard_server_op_observer.h" #include "mongo/db/s/sharding_initialization_mongod.h" +#include "mongo/db/s/sharding_mongod_test_fixture.h" #include "mongo/db/s/type_shard_identity.h" #include "mongo/db/server_options.h" #include "mongo/s/catalog/dist_lock_manager_mock.h" #include "mongo/s/client/shard_registry.h" #include "mongo/s/config_server_catalog_cache_loader.h" -#include "mongo/s/sharding_mongod_test_fixture.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/sharding_logging_test.cpp b/src/mongo/db/s/sharding_logging_test.cpp index a014091b49b..a5622798baa 100644 --- a/src/mongo/db/s/sharding_logging_test.cpp +++ b/src/mongo/db/s/sharding_logging_test.cpp @@ -33,14 +33,12 @@ #include <vector> -#include "mongo/client/remote_command_targeter_mock.h" #include "mongo/db/commands.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/sharding_logging.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor.h" #include "mongo/s/catalog/sharding_catalog_client.h" #include "mongo/s/client/shard_registry.h" -#include "mongo/s/sharding_router_test_fixture.h" #include "mongo/stdx/chrono.h" #include "mongo/stdx/future.h" #include "mongo/util/str.h" @@ -49,34 +47,24 @@ namespace mongo { namespace { -using executor::NetworkInterfaceMock; -using executor::TaskExecutor; -using stdx::async; using unittest::assertGet; -const HostAndPort configHost{"TestHost1"}; - -class InfoLoggingTest : public ShardingTestFixture { +class InfoLoggingTest : public ShardServerTestFixture { public: enum CollType { ActionLog, ChangeLog }; InfoLoggingTest(CollType configCollType, int cappedSize) : _configCollType(configCollType), _cappedSize(cappedSize) {} - void setUp() override { - ShardingTestFixture::setUp(); - - configTargeter()->setFindHostReturnValue(configHost); - } - protected: void noRetryAfterSuccessfulCreate() { auto future = launchAsync([this] { log("moved a chunk", "foo.bar", BSON("min" << 3 << "max" << 4)).transitional_ignore(); }); - expectConfigCollectionCreate(configHost, getConfigCollName(), _cappedSize, BSON("ok" << 1)); - expectConfigCollectionInsert(configHost, + expectConfigCollectionCreate( + kConfigHostAndPort, getConfigCollName(), _cappedSize, BSON("ok" << 1)); + expectConfigCollectionInsert(kConfigHostAndPort, getConfigCollName(), network()->now(), "moved a chunk", @@ -92,7 +80,7 @@ protected: .transitional_ignore(); }); - expectConfigCollectionInsert(configHost, + expectConfigCollectionInsert(kConfigHostAndPort, getConfigCollName(), network()->now(), "moved a second chunk", @@ -112,8 +100,8 @@ protected: CommandHelpers::appendCommandStatusNoThrow( createResponseBuilder, Status(ErrorCodes::NamespaceExists, "coll already exists")); expectConfigCollectionCreate( - configHost, getConfigCollName(), _cappedSize, createResponseBuilder.obj()); - expectConfigCollectionInsert(configHost, + kConfigHostAndPort, getConfigCollName(), _cappedSize, createResponseBuilder.obj()); + expectConfigCollectionInsert(kConfigHostAndPort, getConfigCollName(), network()->now(), "moved a chunk", @@ -129,7 +117,7 @@ protected: .transitional_ignore(); }); - expectConfigCollectionInsert(configHost, + expectConfigCollectionInsert(kConfigHostAndPort, getConfigCollName(), network()->now(), "moved a second chunk", @@ -149,7 +137,7 @@ protected: CommandHelpers::appendCommandStatusNoThrow( createResponseBuilder, Status(ErrorCodes::Interrupted, "operation interrupted")); expectConfigCollectionCreate( - configHost, getConfigCollName(), _cappedSize, createResponseBuilder.obj()); + kConfigHostAndPort, getConfigCollName(), _cappedSize, createResponseBuilder.obj()); // Now wait for the logAction call to return future.default_timed_get(); @@ -160,8 +148,9 @@ protected: .transitional_ignore(); }); - expectConfigCollectionCreate(configHost, getConfigCollName(), _cappedSize, BSON("ok" << 1)); - expectConfigCollectionInsert(configHost, + expectConfigCollectionCreate( + kConfigHostAndPort, getConfigCollName(), _cappedSize, BSON("ok" << 1)); + expectConfigCollectionInsert(kConfigHostAndPort, getConfigCollName(), network()->now(), "moved a second chunk", diff --git a/src/mongo/s/sharding_mongod_test_fixture.cpp b/src/mongo/db/s/sharding_mongod_test_fixture.cpp index 4ba28ab2f8c..932b2ff5424 100644 --- a/src/mongo/s/sharding_mongod_test_fixture.cpp +++ b/src/mongo/db/s/sharding_mongod_test_fixture.cpp @@ -29,16 +29,13 @@ #include "mongo/platform/basic.h" -#include "mongo/s/sharding_mongod_test_fixture.h" +#include "mongo/db/s/sharding_mongod_test_fixture.h" #include <algorithm> #include <memory> #include <vector> #include "mongo/base/checked_cast.h" -#include "mongo/base/status_with.h" -#include "mongo/client/remote_command_targeter_factory_mock.h" -#include "mongo/client/remote_command_targeter_mock.h" #include "mongo/client/replica_set_monitor.h" #include "mongo/db/catalog_raii.h" #include "mongo/db/client.h" @@ -58,8 +55,8 @@ #include "mongo/db/s/collection_sharding_state_factory_shard.h" #include "mongo/db/s/config_server_op_observer.h" #include "mongo/db/s/op_observer_sharding_impl.h" +#include "mongo/db/s/shard_local.h" #include "mongo/db/s/shard_server_op_observer.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor_pool.h" #include "mongo/executor/thread_pool_task_executor_test_fixture.h" #include "mongo/rpc/metadata/repl_set_metadata.h" @@ -67,13 +64,11 @@ #include "mongo/s/catalog/dist_lock_catalog.h" #include "mongo/s/catalog/dist_lock_manager.h" #include "mongo/s/catalog/sharding_catalog_client.h" -#include "mongo/s/catalog/type_changelog.h" #include "mongo/s/catalog/type_collection.h" #include "mongo/s/catalog/type_shard.h" #include "mongo/s/catalog_cache.h" #include "mongo/s/catalog_cache_loader.h" #include "mongo/s/client/shard_factory.h" -#include "mongo/s/client/shard_local.h" #include "mongo/s/client/shard_registry.h" #include "mongo/s/client/shard_remote.h" #include "mongo/s/grid.h" @@ -93,17 +88,10 @@ using repl::ReplicationCoordinatorMock; using repl::ReplSettings; using unittest::assertGet; -ShardingMongodTestFixture::ShardingMongodTestFixture() = default; - -ShardingMongodTestFixture::~ShardingMongodTestFixture() = default; - -void ShardingMongodTestFixture::setUp() { - ServiceContextMongoDTest::setUp(); - +ShardingMongodTestFixture::ShardingMongodTestFixture() { const auto service = getServiceContext(); - _opCtx = makeOperationContext(); - // Set up this node as part of a replica set. + // Set up this node as shard node, which is part of a replica set repl::ReplSettings replSettings; replSettings.setOplogSizeBytes(512'000); @@ -115,6 +103,7 @@ void ShardingMongodTestFixture::setUp() { for (size_t i = 0; i < _servers.size(); ++i) { serversBob.append(BSON("host" << _servers[i].toString() << "_id" << static_cast<int>(i))); } + auto replSetConfig = repl::ReplSetConfig::parse(BSON("_id" << _setName << "protocolVersion" << 1 << "version" << 3 << "members" << serversBob.arr())); @@ -133,7 +122,8 @@ void ShardingMongodTestFixture::setUp() { std::make_unique<repl::ReplicationConsistencyMarkersMock>(), std::make_unique<repl::ReplicationRecoveryMock>())); - ASSERT_OK(repl::ReplicationProcess::get(_opCtx.get())->initializeRollbackID(_opCtx.get())); + ASSERT_OK(repl::ReplicationProcess::get(operationContext()) + ->initializeRollbackID(operationContext())); repl::StorageInterface::set(service, std::move(storagePtr)); @@ -143,7 +133,7 @@ void ShardingMongodTestFixture::setUp() { opObserver->addObserver(std::make_unique<ShardServerOpObserver>()); repl::setOplogCollectionName(service); - repl::createOplog(_opCtx.get()); + repl::createOplog(operationContext()); // Set the highest FCV because otherwise it defaults to the lower FCV. This way we default to // testing this release's code, not backwards compatibility code. @@ -151,6 +141,8 @@ void ShardingMongodTestFixture::setUp() { ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo46); } +ShardingMongodTestFixture::~ShardingMongodTestFixture() = default; + std::unique_ptr<ReplicationCoordinatorMock> ShardingMongodTestFixture::makeReplicationCoordinator( ReplSettings replSettings) { auto coordinator = @@ -159,7 +151,7 @@ std::unique_ptr<ReplicationCoordinatorMock> ShardingMongodTestFixture::makeRepli return coordinator; } -std::unique_ptr<executor::TaskExecutorPool> ShardingMongodTestFixture::makeTaskExecutorPool() { +std::unique_ptr<executor::TaskExecutorPool> ShardingMongodTestFixture::_makeTaskExecutorPool() { // Set up a NetworkInterfaceMock. Note, unlike NetworkInterfaceASIO, which has its own pool of // threads, tasks in the NetworkInterfaceMock must be carried out synchronously by the (single) // thread the unit test is running on. @@ -250,7 +242,7 @@ Status ShardingMongodTestFixture::initializeGlobalShardingStateForMongodForTest( // Create and initialize each sharding component individually before moving them to the Grid // in order to control the order of initialization, since some components depend on others. - auto executorPoolPtr = makeTaskExecutorPool(); + auto executorPoolPtr = _makeTaskExecutorPool(); if (executorPoolPtr) { executorPoolPtr->startup(); } @@ -298,7 +290,6 @@ void ShardingMongodTestFixture::tearDown() { Grid::get(operationContext())->clearForUnitTests(); - _opCtx.reset(); ServiceContextMongoDTest::tearDown(); } diff --git a/src/mongo/s/sharding_mongod_test_fixture.h b/src/mongo/db/s/sharding_mongod_test_fixture.h index 2ef48dde70c..6495ee3377a 100644 --- a/src/mongo/s/sharding_mongod_test_fixture.h +++ b/src/mongo/db/s/sharding_mongod_test_fixture.h @@ -36,7 +36,6 @@ namespace mongo { class CatalogCacheLoader; -class ConnectionString; namespace repl { class ReplSettings; @@ -53,10 +52,12 @@ class ReplSettings; */ class ShardingMongodTestFixture : public ServiceContextMongoDTest, public ShardingTestFixtureCommon { -public: +protected: ShardingMongodTestFixture(); ~ShardingMongodTestFixture(); + void tearDown() override; + /** * Initializes sharding components according to the cluster role in * serverGlobalParams.clusterRole and puts the components on the Grid, mimicking the @@ -86,25 +87,6 @@ public: repl::ReplicationCoordinatorMock* replicationCoordinator() const; - /** - * Returns the stored raw pointer to the OperationContext. - */ - OperationContext* operationContext() const { - return _opCtx.get(); - } - -protected: - /** - * Sets up this fixture with a storage engine, OpObserver, and as a member of a replica set. - */ - void setUp() override; - - /** - * Resets the storage engine and operation context, and shuts down and resets any sharding - * components that have been initialized but not yet shut down and reset. - */ - void tearDown() override; - // Methods for creating and returning sharding components. Some of these methods have been // implemented to return the real implementation of the component as the default, while others // return a mock or nullptr. Subclasses can override any of these methods to create and @@ -121,13 +103,6 @@ protected: repl::ReplSettings replSettings); /** - * Base class returns a TaskExecutorPool with a fixed TaskExecutor and a set of arbitrary - * executors containing one TaskExecutor, each backed by a NetworkInterfaceMock/ThreadPoolMock - * subsytem. - */ - virtual std::unique_ptr<executor::TaskExecutorPool> makeTaskExecutorPool(); - - /** * Base class returns a real implementation of ShardRegistry. */ virtual std::unique_ptr<ShardRegistry> makeShardRegistry(ConnectionString configConnStr); @@ -157,12 +132,16 @@ protected: virtual std::unique_ptr<BalancerConfiguration> makeBalancerConfiguration(); private: - const HostAndPort _host{"node1:12345"}; + /** + * Base class returns a TaskExecutorPool with a fixed TaskExecutor and a set of arbitrary + * executors containing one TaskExecutor, each backed by a NetworkInterfaceMock/ThreadPoolMock + * subsytem. + */ + std::unique_ptr<executor::TaskExecutorPool> _makeTaskExecutorPool(); + const std::string _setName = "mySet"; const std::vector<HostAndPort> _servers{ - _host, HostAndPort("node2:12345"), HostAndPort("node3:12345")}; - - ServiceContext::UniqueOperationContext _opCtx; + HostAndPort("node1:12345"), HostAndPort("node2:12345"), HostAndPort("node3:12345")}; repl::ReplicationCoordinatorMock* _replCoord = nullptr; diff --git a/src/mongo/db/s/split_chunk_test.cpp b/src/mongo/db/s/split_chunk_test.cpp index cfdc61f2b61..532ff9dab55 100644 --- a/src/mongo/db/s/split_chunk_test.cpp +++ b/src/mongo/db/s/split_chunk_test.cpp @@ -33,12 +33,11 @@ #include <boost/optional.hpp> -#include "mongo/client/remote_command_targeter_mock.h" #include "mongo/db/json.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/sharding_initialization_mongod.h" #include "mongo/db/s/split_chunk.h" #include "mongo/db/server_options.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/remote_command_request.h" #include "mongo/executor/remote_command_response.h" #include "mongo/executor/task_executor.h" @@ -51,10 +50,8 @@ #include "mongo/s/catalog_cache_loader.h" #include "mongo/s/client/shard_registry.h" #include "mongo/s/grid.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/s/write_ops/batched_command_request.h" #include "mongo/s/write_ops/batched_command_response.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/split_vector_test.cpp b/src/mongo/db/s/split_vector_test.cpp index 7350527d8b3..807bb35d4aa 100644 --- a/src/mongo/db/s/split_vector_test.cpp +++ b/src/mongo/db/s/split_vector_test.cpp @@ -34,9 +34,8 @@ #include "mongo/db/db_raii.h" #include "mongo/db/dbdirectclient.h" #include "mongo/db/s/collection_sharding_runtime.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/split_vector.h" -#include "mongo/s/shard_server_test_fixture.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace { diff --git a/src/mongo/db/s/transaction_coordinator_futures_util_test.cpp b/src/mongo/db/s/transaction_coordinator_futures_util_test.cpp index fb145b325aa..e46ab94599f 100644 --- a/src/mongo/db/s/transaction_coordinator_futures_util_test.cpp +++ b/src/mongo/db/s/transaction_coordinator_futures_util_test.cpp @@ -30,12 +30,11 @@ #include "mongo/platform/basic.h" #include "mongo/client/remote_command_targeter_mock.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/transaction_coordinator_futures_util.h" #include "mongo/s/catalog/sharding_catalog_client_mock.h" #include "mongo/s/catalog/type_shard.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/unittest/barrier.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace txn { diff --git a/src/mongo/db/s/transaction_coordinator_test_fixture.h b/src/mongo/db/s/transaction_coordinator_test_fixture.h index 03763d3e2a1..37232f0d340 100644 --- a/src/mongo/db/s/transaction_coordinator_test_fixture.h +++ b/src/mongo/db/s/transaction_coordinator_test_fixture.h @@ -33,9 +33,9 @@ #include <vector> #include "mongo/base/status.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/s/transaction_coordinator.h" #include "mongo/s/shard_id.h" -#include "mongo/s/shard_server_test_fixture.h" namespace mongo { diff --git a/src/mongo/db/s/vector_clock_shard_server_test.cpp b/src/mongo/db/s/vector_clock_shard_server_test.cpp index a2c7577769c..0f6af735ac6 100644 --- a/src/mongo/db/s/vector_clock_shard_server_test.cpp +++ b/src/mongo/db/s/vector_clock_shard_server_test.cpp @@ -32,10 +32,9 @@ #include "mongo/db/keys_collection_client_direct.h" #include "mongo/db/keys_collection_manager.h" #include "mongo/db/logical_time_validator.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/vector_clock_mutable.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/unittest/death_test.h" -#include "mongo/unittest/unittest.h" #include "mongo/util/clock_source_mock.h" namespace mongo { diff --git a/src/mongo/db/service_context_d_test_fixture.cpp b/src/mongo/db/service_context_d_test_fixture.cpp index 8c0b6b8abf5..a0b8caab275 100644 --- a/src/mongo/db/service_context_d_test_fixture.cpp +++ b/src/mongo/db/service_context_d_test_fixture.cpp @@ -90,6 +90,9 @@ ServiceContextMongoDTest::ServiceContextMongoDTest(std::string engine, RepairAct IndexAccessMethodFactory::set(serviceContext, std::make_unique<IndexAccessMethodFactoryImpl>()); Collection::Factory::set(serviceContext, std::make_unique<CollectionImpl::FactoryImpl>()); IndexBuildsCoordinator::set(serviceContext, std::make_unique<IndexBuildsCoordinatorMongod>()); + CollectionShardingStateFactory::set( + getServiceContext(), + std::make_unique<CollectionShardingStateFactoryShard>(getServiceContext())); } ServiceContextMongoDTest::~ServiceContextMongoDTest() { @@ -107,14 +110,6 @@ ServiceContextMongoDTest::~ServiceContextMongoDTest() { std::swap(storageGlobalParams.repair, _stashedStorageParams.repair); } -void ServiceContextMongoDTest::setUp() { - ServiceContextTest::setUp(); - - CollectionShardingStateFactory::set( - getServiceContext(), - std::make_unique<CollectionShardingStateFactoryShard>(getServiceContext())); -} - void ServiceContextMongoDTest::tearDown() { { // Some tests set the current OperationContext but do not release it until destruction. diff --git a/src/mongo/db/service_context_d_test_fixture.h b/src/mongo/db/service_context_d_test_fixture.h index 0b25498a1a9..00f5f37883f 100644 --- a/src/mongo/db/service_context_d_test_fixture.h +++ b/src/mongo/db/service_context_d_test_fixture.h @@ -29,17 +29,15 @@ #pragma once -#include "mongo/db/operation_context.h" #include "mongo/db/service_context_test_fixture.h" #include "mongo/unittest/temp_dir.h" -#include "mongo/unittest/unittest.h" namespace mongo { /** * Test fixture class for tests that use the "ephemeralForTest" storage engine. */ -class ServiceContextMongoDTest : public ServiceContextTest { +class ServiceContextMongoDTest : public virtual ServiceContextTest { protected: enum class RepairAction { kNoRepair, kRepair }; @@ -52,8 +50,6 @@ protected: ServiceContextMongoDTest(std::string engine, RepairAction repair); virtual ~ServiceContextMongoDTest(); - void setUp() override; - void tearDown() override; private: @@ -62,6 +58,7 @@ private: bool engineSetByUser; bool repair; } _stashedStorageParams; + unittest::TempDir _tempDir; }; diff --git a/src/mongo/db/service_context_test_fixture.h b/src/mongo/db/service_context_test_fixture.h index e7508898c0f..a1097c6a943 100644 --- a/src/mongo/db/service_context_test_fixture.h +++ b/src/mongo/db/service_context_test_fixture.h @@ -35,7 +35,6 @@ namespace mongo { - class ScopedGlobalServiceContextForTest { public: /** diff --git a/src/mongo/db/vector_clock_mongod_test.cpp b/src/mongo/db/vector_clock_mongod_test.cpp index a54b966b8f6..758db55118e 100644 --- a/src/mongo/db/vector_clock_mongod_test.cpp +++ b/src/mongo/db/vector_clock_mongod_test.cpp @@ -32,10 +32,9 @@ #include "mongo/db/keys_collection_client_direct.h" #include "mongo/db/keys_collection_manager.h" #include "mongo/db/logical_time_validator.h" +#include "mongo/db/s/sharding_mongod_test_fixture.h" #include "mongo/db/vector_clock_mutable.h" -#include "mongo/s/sharding_mongod_test_fixture.h" #include "mongo/unittest/death_test.h" -#include "mongo/unittest/unittest.h" #include "mongo/util/clock_source_mock.h" namespace mongo { diff --git a/src/mongo/s/SConscript b/src/mongo/s/SConscript index 70604de3b82..7745088ead9 100644 --- a/src/mongo/s/SConscript +++ b/src/mongo/s/SConscript @@ -192,21 +192,22 @@ env.Library( ], LIBDEPS=[ '$BUILD_DIR/mongo/client/remote_command_targeter_mock', + '$BUILD_DIR/mongo/db/service_context_test_fixture', '$BUILD_DIR/mongo/executor/network_interface_mock', '$BUILD_DIR/mongo/executor/network_test_env', '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture', - '$BUILD_DIR/mongo/unittest/unittest', + 'write_ops/batch_write_types', ], ) env.Library( target='sharding_router_test_fixture', source=[ + 'catalog_cache_test_fixture.cpp', 'sharding_router_test_fixture.cpp', ], LIBDEPS=[ '$BUILD_DIR/mongo/db/query/collation/collator_factory_mock', - '$BUILD_DIR/mongo/db/service_context_test_fixture', '$BUILD_DIR/mongo/executor/task_executor_pool', '$BUILD_DIR/mongo/s/catalog/dist_lock_manager_mock', '$BUILD_DIR/mongo/s/catalog/sharding_catalog_client_impl', @@ -221,32 +222,6 @@ env.Library( ) env.Library( - target='sharding_mongod_test_fixture', - source=[ - 'sharding_mongod_test_fixture.cpp', - ], - LIBDEPS=[ - '$BUILD_DIR/mongo/db/repl/drop_pending_collection_reaper', - '$BUILD_DIR/mongo/db/repl/replmocks', - '$BUILD_DIR/mongo/db/s/sharding_runtime_d', - '$BUILD_DIR/mongo/db/service_context_d_test_fixture', - 'sharding_test_fixture_common', - ], -) - -env.Library( - target='shard_server_test_fixture', - source=[ - 'shard_server_test_fixture.cpp', - ], - LIBDEPS=[ - '$BUILD_DIR/mongo/s/catalog/dist_lock_catalog_mock', - '$BUILD_DIR/mongo/s/catalog/dist_lock_manager_mock', - 'sharding_mongod_test_fixture', - ], -) - -env.Library( target='sharding_task_executor', source=[ 'sharding_task_executor.cpp', @@ -320,19 +295,6 @@ env.Library( ) env.Library( - target='catalog_cache_test_fixture', - source=[ - 'catalog_cache_test_fixture.cpp', - ], - LIBDEPS=[ - '$BUILD_DIR/mongo/db/auth/authmocks', - '$BUILD_DIR/mongo/db/query/query_test_service_context', - 'coreshard', - 'sharding_router_test_fixture', - ] -) - -env.Library( target='cluster_last_error_info', source=[ 'cluster_last_error_info.cpp' @@ -458,6 +420,8 @@ env.CppUnitTest( 'chunk_test.cpp', 'chunk_version_test.cpp', 'chunk_writes_tracker_test.cpp', + 'client/shard_registry_data_test.cpp', + 'client/shard_remote_test.cpp', 'cluster_identity_loader_test.cpp', 'cluster_last_error_info_test.cpp', 'hedge_options_util_test.cpp', @@ -491,10 +455,9 @@ env.CppUnitTest( '$BUILD_DIR/mongo/db/auth/authmocks', '$BUILD_DIR/mongo/db/ops/write_ops_parsers_test_helpers', '$BUILD_DIR/mongo/db/pipeline/process_interface/mongos_process_interface_factory', - '$BUILD_DIR/mongo/db/service_context_test_fixture', + '$BUILD_DIR/mongo/db/query/query_test_service_context', '$BUILD_DIR/mongo/dbtests/mocklib', '$BUILD_DIR/mongo/util/net/network', - 'catalog_cache_test_fixture', 'catalog/sharding_catalog_client_mock', 'chunk_writes_tracker', 'cluster_last_error_info', diff --git a/src/mongo/s/catalog/SConscript b/src/mongo/s/catalog/SConscript index 9c0cbcf2efa..9cbe083901a 100644 --- a/src/mongo/s/catalog/SConscript +++ b/src/mongo/s/catalog/SConscript @@ -133,10 +133,10 @@ env.CppUnitTest( ], LIBDEPS=[ '$BUILD_DIR/mongo/db/auth/authmocks', + '$BUILD_DIR/mongo/db/s/shard_server_test_fixture', '$BUILD_DIR/mongo/db/storage/duplicate_key_error_info', '$BUILD_DIR/mongo/s/catalog/dist_lock_catalog_mock', '$BUILD_DIR/mongo/s/catalog/sharding_catalog_client_mock', - '$BUILD_DIR/mongo/s/shard_server_test_fixture', '$BUILD_DIR/mongo/s/sharding_router_test_fixture', 'dist_lock_catalog_impl', 'replset_dist_lock_manager', diff --git a/src/mongo/s/catalog/dist_lock_catalog_impl_test.cpp b/src/mongo/s/catalog/dist_lock_catalog_impl_test.cpp index 73e53f595e9..56f25d713c8 100644 --- a/src/mongo/s/catalog/dist_lock_catalog_impl_test.cpp +++ b/src/mongo/s/catalog/dist_lock_catalog_impl_test.cpp @@ -37,8 +37,8 @@ #include "mongo/db/commands.h" #include "mongo/db/query/find_and_modify_request.h" #include "mongo/db/repl/read_concern_args.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/db/storage/duplicate_key_error_info.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/network_test_env.h" #include "mongo/s/catalog/dist_lock_catalog_impl.h" #include "mongo/s/catalog/dist_lock_manager_mock.h" @@ -48,7 +48,6 @@ #include "mongo/s/client/shard_factory.h" #include "mongo/s/client/shard_registry.h" #include "mongo/s/grid.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/s/write_ops/batched_command_request.h" #include "mongo/util/time_support.h" diff --git a/src/mongo/s/catalog/replset_dist_lock_manager_test.cpp b/src/mongo/s/catalog/replset_dist_lock_manager_test.cpp index 6bef0ad7987..c71bdd93dd0 100644 --- a/src/mongo/s/catalog/replset_dist_lock_manager_test.cpp +++ b/src/mongo/s/catalog/replset_dist_lock_manager_test.cpp @@ -36,6 +36,7 @@ #include <vector> #include "mongo/bson/json.h" +#include "mongo/db/s/shard_server_test_fixture.h" #include "mongo/platform/mutex.h" #include "mongo/s/balancer_configuration.h" #include "mongo/s/catalog/dist_lock_catalog_mock.h" @@ -44,7 +45,6 @@ #include "mongo/s/catalog/type_lockpings.h" #include "mongo/s/catalog/type_locks.h" #include "mongo/s/grid.h" -#include "mongo/s/shard_server_test_fixture.h" #include "mongo/stdx/condition_variable.h" #include "mongo/unittest/unittest.h" #include "mongo/util/system_tick_source.h" diff --git a/src/mongo/s/catalog/sharding_catalog_test.cpp b/src/mongo/s/catalog/sharding_catalog_test.cpp index 3acf38fae8b..b30c044739d 100644 --- a/src/mongo/s/catalog/sharding_catalog_test.cpp +++ b/src/mongo/s/catalog/sharding_catalog_test.cpp @@ -39,7 +39,6 @@ #include "mongo/db/ops/write_ops.h" #include "mongo/db/query/query_request.h" #include "mongo/db/repl/read_concern_args.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor.h" #include "mongo/rpc/get_status_from_command_result.h" #include "mongo/rpc/metadata/repl_set_metadata.h" diff --git a/src/mongo/s/catalog/sharding_catalog_write_retry_test.cpp b/src/mongo/s/catalog/sharding_catalog_write_retry_test.cpp index 7381fe5980f..5fe063a6ce4 100644 --- a/src/mongo/s/catalog/sharding_catalog_write_retry_test.cpp +++ b/src/mongo/s/catalog/sharding_catalog_write_retry_test.cpp @@ -42,12 +42,10 @@ #include "mongo/db/ops/write_ops.h" #include "mongo/db/storage/duplicate_key_error_info.h" #include "mongo/db/write_concern.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor.h" #include "mongo/rpc/metadata/repl_set_metadata.h" #include "mongo/s/catalog/dist_lock_manager_mock.h" #include "mongo/s/catalog/sharding_catalog_client_impl.h" -#include "mongo/s/catalog/type_changelog.h" #include "mongo/s/catalog/type_chunk.h" #include "mongo/s/catalog/type_collection.h" #include "mongo/s/catalog/type_database.h" diff --git a/src/mongo/s/catalog/type_shard_collection_test.cpp b/src/mongo/s/catalog/type_shard_collection_test.cpp index bde4643c186..7dbae054904 100644 --- a/src/mongo/s/catalog/type_shard_collection_test.cpp +++ b/src/mongo/s/catalog/type_shard_collection_test.cpp @@ -29,7 +29,6 @@ #include "mongo/platform/basic.h" -#include "mongo/db/s/shard_metadata_util.h" #include "mongo/s/catalog/type_shard_collection.h" #include "mongo/bson/oid.h" diff --git a/src/mongo/s/chunk_manager_index_bounds_test.cpp b/src/mongo/s/chunk_manager_index_bounds_test.cpp index 7207db79f3d..8b8c490fd92 100644 --- a/src/mongo/s/chunk_manager_index_bounds_test.cpp +++ b/src/mongo/s/chunk_manager_index_bounds_test.cpp @@ -41,7 +41,6 @@ #include "mongo/s/chunk_manager.h" #include "mongo/s/shard_key_pattern.h" #include "mongo/s/sharding_router_test_fixture.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace { @@ -59,7 +58,8 @@ protected: const NamespaceString nss("test.foo"); auto qr = std::make_unique<QueryRequest>(nss); qr->setFilter(queryObj); - boost::intrusive_ptr<ExpressionContextForTest> expCtx(new ExpressionContextForTest()); + boost::intrusive_ptr<ExpressionContextForTest> expCtx( + new ExpressionContextForTest(operationContext())); auto statusWithCQ = CanonicalQuery::canonicalize(operationContext(), std::move(qr), diff --git a/src/mongo/s/client/SConscript b/src/mongo/s/client/SConscript index c488f2793d8..8e338108840 100644 --- a/src/mongo/s/client/SConscript +++ b/src/mongo/s/client/SConscript @@ -37,67 +37,3 @@ env.Library( '$BUILD_DIR/mongo/s/write_ops/batch_write_types', ], ) - -env.Library( - target='rs_local_client', - source=[ - 'rs_local_client.cpp', - ], - LIBDEPS=[ - '$BUILD_DIR/mongo/client/clientdriver_minimal', - '$BUILD_DIR/mongo/db/dbdirectclient', - '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface', - ], -) - -env.Library( - target='shard_local', - source=[ - 'shard_local.cpp', - ], - LIBDEPS=[ - '$BUILD_DIR/mongo/client/clientdriver_minimal', - '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface', - 'rs_local_client', - 'shard_interface', - ], - LIBDEPS_PRIVATE=[ - '$BUILD_DIR/mongo/db/catalog/collection_catalog', - '$BUILD_DIR/mongo/db/catalog_raii', - '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception', - '$BUILD_DIR/mongo/db/db_raii', - '$BUILD_DIR/mongo/db/index_builds_coordinator_interface', - '$BUILD_DIR/mongo/db/server_options_core', - ], -) - -env.CppUnitTest( - target='mongos_client_test', - source=[ - 'shard_registry_data_test.cpp', - 'shard_remote_test.cpp', - ], - LIBDEPS=[ - '$BUILD_DIR/mongo/s/coreshard', - '$BUILD_DIR/mongo/s/query/async_results_merger', - '$BUILD_DIR/mongo/s/sharding_router_test_fixture', - '$BUILD_DIR/mongo/s/vector_clock_mongos', - 'sharding_client', - ], -) - -# The shard local test globally sets server options into the config -# server state, which is incompatible with the other tests. -env.CppUnitTest( - target='mongos_client_local_test', - source=[ - 'shard_local_test.cpp', - ], - LIBDEPS=[ - '$BUILD_DIR/mongo/db/auth/authmocks', - '$BUILD_DIR/mongo/db/repl/replmocks', - '$BUILD_DIR/mongo/db/service_context_d_test_fixture', - '$BUILD_DIR/mongo/s/grid', - 'shard_local', - ], -) diff --git a/src/mongo/s/client/shard_registry_data_test.cpp b/src/mongo/s/client/shard_registry_data_test.cpp index d7f96320a08..2fcfed25e63 100644 --- a/src/mongo/s/client/shard_registry_data_test.cpp +++ b/src/mongo/s/client/shard_registry_data_test.cpp @@ -29,11 +29,6 @@ #include "mongo/platform/basic.h" -#include <memory> -#include <utility> - -#include "mongo/base/status.h" -#include "mongo/base/status_with.h" #include "mongo/bson/json.h" #include "mongo/client/remote_command_targeter_factory_mock.h" #include "mongo/client/remote_command_targeter_mock.h" @@ -83,7 +78,6 @@ private: std::unique_ptr<ShardFactory> _shardFactory; }; - TEST_F(ShardRegistryDataTest, AddConfigShard) { ConnectionString configCS("rs/dummy1:1234,dummy2:2345,dummy3:3456", ConnectionString::SET); auto configShard = shardFactory()->createShard(ShardRegistry::kConfigServerShardId, configCS); @@ -94,5 +88,5 @@ TEST_F(ShardRegistryDataTest, AddConfigShard) { ASSERT_EQUALS(configCS.toString(), data.getConfigShard()->originalConnString().toString()); } -} // unnamed namespace +} // namespace } // namespace mongo diff --git a/src/mongo/s/client/shard_remote_test.cpp b/src/mongo/s/client/shard_remote_test.cpp index 327ed75ed8c..3c4cc4181ca 100644 --- a/src/mongo/s/client/shard_remote_test.cpp +++ b/src/mongo/s/client/shard_remote_test.cpp @@ -30,9 +30,6 @@ #include "mongo/platform/basic.h" #include "mongo/client/connection_string.h" -#include "mongo/client/remote_command_targeter.h" -#include "mongo/client/remote_command_targeter_factory_mock.h" -#include "mongo/client/remote_command_targeter_mock.h" #include "mongo/db/logical_time.h" #include "mongo/db/query/cursor_response.h" #include "mongo/s/catalog/type_shard.h" @@ -42,7 +39,6 @@ #include "mongo/s/query/establish_cursors.h" #include "mongo/s/shard_id.h" #include "mongo/s/sharding_router_test_fixture.h" -#include "mongo/unittest/unittest.h" namespace mongo { namespace { diff --git a/src/mongo/s/cluster_identity_loader_test.cpp b/src/mongo/s/cluster_identity_loader_test.cpp index 770f437c584..94fe79d4271 100644 --- a/src/mongo/s/cluster_identity_loader_test.cpp +++ b/src/mongo/s/cluster_identity_loader_test.cpp @@ -37,7 +37,6 @@ #include "mongo/db/commands.h" #include "mongo/db/query/query_request.h" #include "mongo/db/service_context.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor.h" #include "mongo/rpc/metadata/repl_set_metadata.h" #include "mongo/rpc/metadata/tracking_metadata.h" diff --git a/src/mongo/s/cluster_last_error_info_test.cpp b/src/mongo/s/cluster_last_error_info_test.cpp index 0a3f0ae2cc2..0e210078413 100644 --- a/src/mongo/s/cluster_last_error_info_test.cpp +++ b/src/mongo/s/cluster_last_error_info_test.cpp @@ -34,7 +34,6 @@ #include <vector> #include "mongo/db/operation_context.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/rpc/metadata/sharding_metadata.h" #include "mongo/s/cluster_last_error_info.h" #include "mongo/s/sharding_router_test_fixture.h" diff --git a/src/mongo/s/commands/SConscript b/src/mongo/s/commands/SConscript index b11a0394cf2..e81c51aa805 100644 --- a/src/mongo/s/commands/SConscript +++ b/src/mongo/s/commands/SConscript @@ -154,7 +154,7 @@ env.Library( ], LIBDEPS=[ 'cluster_commands', - '$BUILD_DIR/mongo/s/catalog_cache_test_fixture', + '$BUILD_DIR/mongo/s/sharding_router_test_fixture', ] ) diff --git a/src/mongo/s/commands/cluster_balancer_collection_status_cmd.cpp b/src/mongo/s/commands/cluster_balancer_collection_status_cmd.cpp index bf07c401cff..2daf3a8169d 100644 --- a/src/mongo/s/commands/cluster_balancer_collection_status_cmd.cpp +++ b/src/mongo/s/commands/cluster_balancer_collection_status_cmd.cpp @@ -40,11 +40,6 @@ #include "mongo/db/commands.h" #include "mongo/db/operation_context.h" #include "mongo/db/repl/repl_client_info.h" -#include "mongo/db/s/database_sharding_state.h" -#include "mongo/db/s/migration_source_manager.h" -#include "mongo/db/s/operation_sharding_state.h" -#include "mongo/db/s/shard_filtering_metadata_refresh.h" -#include "mongo/db/s/sharding_state.h" #include "mongo/idl/idl_parser.h" #include "mongo/s/catalog_cache_loader.h" #include "mongo/s/grid.h" diff --git a/src/mongo/s/query/SConscript b/src/mongo/s/query/SConscript index 99159d1f925..0b924534119 100644 --- a/src/mongo/s/query/SConscript +++ b/src/mongo/s/query/SConscript @@ -159,15 +159,15 @@ env.CppUnitTest( "$BUILD_DIR/mongo/db/auth/saslauth", "$BUILD_DIR/mongo/db/logical_session_id", "$BUILD_DIR/mongo/db/query/query_request", - "$BUILD_DIR/mongo/db/service_context_test_fixture", + "$BUILD_DIR/mongo/db/query/query_test_service_context", "$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture", "$BUILD_DIR/mongo/s/commands/cluster_command_test_fixture", "$BUILD_DIR/mongo/s/sharding_router_test_fixture", "$BUILD_DIR/mongo/util/clock_source_mock", "async_results_merger", "cluster_aggregate", - "cluster_client_cursor", "cluster_client_cursor_mock", + "cluster_client_cursor", "cluster_cursor_manager", "router_exec_stage", "store_possible_cursor", diff --git a/src/mongo/s/query/results_merger_test_fixture.cpp b/src/mongo/s/query/results_merger_test_fixture.cpp index 11a1a8379bd..564d7e6bf0e 100644 --- a/src/mongo/s/query/results_merger_test_fixture.cpp +++ b/src/mongo/s/query/results_merger_test_fixture.cpp @@ -32,7 +32,6 @@ #include "mongo/client/remote_command_targeter_factory_mock.h" #include "mongo/client/remote_command_targeter_mock.h" #include "mongo/db/curop.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/thread_pool_task_executor_test_fixture.h" #include "mongo/s/catalog/type_shard.h" #include "mongo/s/query/results_merger_test_fixture.h" diff --git a/src/mongo/s/routing_table_history_test.cpp b/src/mongo/s/routing_table_history_test.cpp index 8218f505cd0..974437d512c 100644 --- a/src/mongo/s/routing_table_history_test.cpp +++ b/src/mongo/s/routing_table_history_test.cpp @@ -29,15 +29,11 @@ #include "mongo/platform/basic.h" -#include "mongo/s/chunk_manager.h" - #include "mongo/bson/bsonobjbuilder.h" -#include "mongo/db/catalog_raii.h" #include "mongo/db/namespace_string.h" -#include "mongo/db/repl/replication_coordinator_mock.h" -#include "mongo/db/s/sharding_state.h" #include "mongo/db/service_context.h" #include "mongo/s/catalog/type_chunk.h" +#include "mongo/s/chunk_manager.h" #include "mongo/s/chunk_writes_tracker.h" #include "mongo/unittest/death_test.h" #include "mongo/unittest/unittest.h" diff --git a/src/mongo/s/sessions_collection_sharded_test.cpp b/src/mongo/s/sessions_collection_sharded_test.cpp index ea2a7c29fdf..0bbfc0ea2c0 100644 --- a/src/mongo/s/sessions_collection_sharded_test.cpp +++ b/src/mongo/s/sessions_collection_sharded_test.cpp @@ -35,7 +35,6 @@ #include "mongo/db/commands.h" #include "mongo/db/logical_clock.h" #include "mongo/db/logical_session_id.h" -#include "mongo/db/s/sharding_state.h" #include "mongo/s/catalog/type_shard.h" #include "mongo/s/catalog_cache_test_fixture.h" #include "mongo/s/client/shard_registry.h" diff --git a/src/mongo/s/sharding_router_test_fixture.cpp b/src/mongo/s/sharding_router_test_fixture.cpp index b3fd6d362ed..a7a0e35b13d 100644 --- a/src/mongo/s/sharding_router_test_fixture.cpp +++ b/src/mongo/s/sharding_router_test_fixture.cpp @@ -47,7 +47,6 @@ #include "mongo/db/query/collation/collator_factory_mock.h" #include "mongo/db/query/query_request.h" #include "mongo/db/repl/read_concern_args.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor_pool.h" #include "mongo/executor/thread_pool_task_executor_test_fixture.h" #include "mongo/rpc/metadata/egress_metadata_hook_list.h" @@ -56,7 +55,6 @@ #include "mongo/s/balancer_configuration.h" #include "mongo/s/catalog/dist_lock_manager_mock.h" #include "mongo/s/catalog/sharding_catalog_client_impl.h" -#include "mongo/s/catalog/type_changelog.h" #include "mongo/s/catalog/type_collection.h" #include "mongo/s/catalog/type_shard.h" #include "mongo/s/catalog_cache.h" @@ -95,8 +93,9 @@ std::unique_ptr<ShardingTaskExecutor> makeShardingTestExecutor( } // namespace -ShardingTestFixture::ShardingTestFixture() { - auto const service = getServiceContext(); +ShardingTestFixture::ShardingTestFixture() + : _transportSession(transport::MockSession::create(nullptr)) { + const auto service = getServiceContext(); // Configure the service context service->setFastClockSource(std::make_unique<ClockSourceMock>()); @@ -104,8 +103,6 @@ ShardingTestFixture::ShardingTestFixture() { service->setTickSource(std::make_unique<TickSourceMock<>>()); CollatorFactoryInterface::set(service, std::make_unique<CollatorFactoryMock>()); - _transportSession = transport::MockSession::create(nullptr); - _opCtx = makeOperationContext(); // Set up executor pool used for most operations. auto makeMetadataHookList = [&] { @@ -147,10 +144,6 @@ ShardingTestFixture::ShardingTestFixture() { auto targeterFactoryPtr = targeterFactory.get(); _targeterFactory = targeterFactoryPtr; - auto configTargeter(std::make_unique<RemoteCommandTargeterMock>()); - _configTargeter = configTargeter.get(); - _targeterFactory->addTargeterToReturn(configCS, std::move(configTargeter)); - ShardFactory::BuilderCallable setBuilder = [targeterFactoryPtr]( const ShardId& shardId, const ConnectionString& connStr) { @@ -196,6 +189,10 @@ ShardingTestFixture::~ShardingTestFixture() { CatalogCacheLoader::clearForTests(getServiceContext()); } +std::shared_ptr<RemoteCommandTargeterMock> ShardingTestFixture::configTargeter() { + return RemoteCommandTargeterMock::get(shardRegistry()->getConfigShard()->getTargeter()); +} + void ShardingTestFixture::shutdownExecutor() { if (_fixedExecutor) _fixedExecutor->shutdown(); @@ -209,24 +206,12 @@ ShardRegistry* ShardingTestFixture::shardRegistry() const { return Grid::get(operationContext())->shardRegistry(); } -RemoteCommandTargeterMock* ShardingTestFixture::configTargeter() const { - invariant(_configTargeter); - - return _configTargeter; -} - std::shared_ptr<executor::TaskExecutor> ShardingTestFixture::executor() const { invariant(_fixedExecutor); return _fixedExecutor; } -OperationContext* ShardingTestFixture::operationContext() const { - invariant(_opCtx); - - return _opCtx.get(); -} - void ShardingTestFixture::onCommandForPoolExecutor(NetworkTestEnv::OnCommandFunction func) { _networkTestEnvForPool->onCommand(func); } @@ -315,94 +300,6 @@ void ShardingTestFixture::expectInserts(const NamespaceString& nss, }); } -void ShardingTestFixture::expectConfigCollectionCreate(const HostAndPort& configHost, - StringData collName, - int cappedSize, - const BSONObj& response) { - onCommand([&](const RemoteCommandRequest& request) { - ASSERT_EQUALS(configHost, request.target); - ASSERT_EQUALS("config", request.dbname); - - BSONObj expectedCreateCmd = - BSON("create" << collName << "capped" << true << "size" << cappedSize << "writeConcern" - << BSON("w" - << "majority" - << "wtimeout" << 60000) - << "maxTimeMS" << 30000); - ASSERT_BSONOBJ_EQ(expectedCreateCmd, request.cmdObj); - - return response; - }); -} - -void ShardingTestFixture::expectConfigCollectionInsert(const HostAndPort& configHost, - StringData collName, - Date_t timestamp, - const std::string& what, - const std::string& ns, - const BSONObj& detail) { - onCommand([&](const RemoteCommandRequest& request) { - ASSERT_EQUALS(configHost, request.target); - ASSERT_EQUALS(NamespaceString::kConfigDb, request.dbname); - - const auto opMsgRequest = OpMsgRequest::fromDBAndBody(request.dbname, request.cmdObj); - const auto insertOp = InsertOp::parse(opMsgRequest); - - ASSERT_EQ(NamespaceString::kConfigDb, insertOp.getNamespace().db()); - ASSERT_EQ(collName, insertOp.getNamespace().coll()); - - const auto& inserts = insertOp.getDocuments(); - ASSERT_EQUALS(1U, inserts.size()); - - const ChangeLogType& actualChangeLog = assertGet(ChangeLogType::fromBSON(inserts.front())); - - ASSERT_EQUALS(operationContext()->getClient()->clientAddress(true), - actualChangeLog.getClientAddr()); - ASSERT_BSONOBJ_EQ(detail, actualChangeLog.getDetails()); - ASSERT_EQUALS(ns, actualChangeLog.getNS()); - const std::string expectedServer = str::stream() << network()->getHostName() << ":27017"; - ASSERT_EQUALS(expectedServer, actualChangeLog.getServer()); - ASSERT_EQUALS(timestamp, actualChangeLog.getTime()); - ASSERT_EQUALS(what, actualChangeLog.getWhat()); - - // Handle changeId specially because there's no way to know what OID was generated - std::string changeId = actualChangeLog.getChangeId(); - size_t firstDash = changeId.find("-"); - size_t lastDash = changeId.rfind("-"); - - const std::string serverPiece = changeId.substr(0, firstDash); - const std::string timePiece = changeId.substr(firstDash + 1, lastDash - firstDash - 1); - const std::string oidPiece = changeId.substr(lastDash + 1); - - const std::string expectedServerPiece = str::stream() - << Grid::get(operationContext())->getNetwork()->getHostName() << ":27017"; - ASSERT_EQUALS(expectedServerPiece, serverPiece); - ASSERT_EQUALS(timestamp.toString(), timePiece); - - OID generatedOID; - // Just make sure this doesn't throws and assume the OID is valid - generatedOID.init(oidPiece); - - BatchedCommandResponse response; - response.setStatus(Status::OK()); - - return response.toBSON(); - }); -} - -void ShardingTestFixture::expectChangeLogCreate(const HostAndPort& configHost, - const BSONObj& response) { - expectConfigCollectionCreate(configHost, "changelog", 10 * 1024 * 1024, response); -} - -void ShardingTestFixture::expectChangeLogInsert(const HostAndPort& configHost, - Date_t timestamp, - const std::string& what, - const std::string& ns, - const BSONObj& detail) { - expectConfigCollectionInsert(configHost, "changelog", timestamp, what, ns, detail); -} - void ShardingTestFixture::expectUpdateCollection(const HostAndPort& expectedHost, const CollectionType& coll, bool expectUpsert) { diff --git a/src/mongo/s/sharding_router_test_fixture.h b/src/mongo/s/sharding_router_test_fixture.h index feccfa13134..87956428105 100644 --- a/src/mongo/s/sharding_router_test_fixture.h +++ b/src/mongo/s/sharding_router_test_fixture.h @@ -29,7 +29,6 @@ #pragma once -#include "mongo/db/service_context_test_fixture.h" #include "mongo/s/sharding_test_fixture_common.h" namespace mongo { @@ -39,8 +38,6 @@ class ShardingCatalogClient; struct ChunkVersion; class CollectionType; class DistLockManagerMock; -class RemoteCommandTargeterFactoryMock; -class RemoteCommandTargeterMock; class ShardRegistry; class ShardType; @@ -52,19 +49,27 @@ class TransportLayerMock; * Sets up the mocked out objects for testing the replica-set backed catalog manager and catalog * client. */ -class ShardingTestFixture : public ServiceContextTest, public ShardingTestFixtureCommon { -public: +class ShardingTestFixture : public ShardingTestFixtureCommon { +protected: ShardingTestFixture(); ~ShardingTestFixture(); + /** + * Returns the mock targeter for the config server. Useful to use like so, + * + * configTargeterMock()->setFindHostReturnValue(HostAndPort); + * configTargeterMock()->setFindHostReturnValue({ErrorCodes::InternalError, "can't target"}) + * + * Remote calls always need to resolve a host with RemoteCommandTargeterMock::findHost, so it + * must be set. + */ + std::shared_ptr<RemoteCommandTargeterMock> configTargeter(); + // Syntactic sugar for getting sharding components off the Grid, if they have been initialized. ShardingCatalogClient* catalogClient() const; ShardRegistry* shardRegistry() const; std::shared_ptr<executor::TaskExecutor> executor() const; - RemoteCommandTargeterMock* configTargeter() const; - - OperationContext* operationContext() const; /** * Same as the onCommand* variants, but expects the request to be placed on the arbitrary @@ -108,41 +113,6 @@ public: void expectFindSendBSONObjVector(const HostAndPort& configHost, std::vector<BSONObj> obj); /** - * Waits for an operation which creates a capped config collection with the specified name and - * capped size. - */ - void expectConfigCollectionCreate(const HostAndPort& configHost, - StringData collName, - int cappedSize, - const BSONObj& response); - - /** - * Wait for a single insert in one of the change or action log collections with the specified - * contents and return a successful response. - */ - void expectConfigCollectionInsert(const HostAndPort& configHost, - StringData collName, - Date_t timestamp, - const std::string& what, - const std::string& ns, - const BSONObj& detail); - - /** - * Wait for the config.changelog collection to be created on the specified host. - */ - void expectChangeLogCreate(const HostAndPort& configHost, const BSONObj& response); - - /** - * Expect a log message with the specified contents to be written to the config.changelog - * collection. - */ - void expectChangeLogInsert(const HostAndPort& configHost, - Date_t timestamp, - const std::string& what, - const std::string& ns, - const BSONObj& detail); - - /** * Expects an update call, which changes the specified collection's namespace contents to match * those of the input argument. */ @@ -176,11 +146,8 @@ private: std::unique_ptr<ShardingCatalogClient> makeShardingCatalogClient( std::unique_ptr<DistLockManager> distLockManager) override; - ServiceContext::UniqueOperationContext _opCtx; transport::SessionHandle _transportSession; - RemoteCommandTargeterMock* _configTargeter; - // For the Grid's fixed executor. std::shared_ptr<executor::TaskExecutor> _fixedExecutor; diff --git a/src/mongo/s/sharding_task_executor_test.cpp b/src/mongo/s/sharding_task_executor_test.cpp index 488e9a54315..df0fcd5b51c 100644 --- a/src/mongo/s/sharding_task_executor_test.cpp +++ b/src/mongo/s/sharding_task_executor_test.cpp @@ -32,7 +32,6 @@ #include "mongo/platform/basic.h" #include "mongo/client/remote_command_targeter_mock.h" -#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/task_executor_test_common.h" #include "mongo/executor/task_executor_test_fixture.h" #include "mongo/executor/thread_pool_mock.h" diff --git a/src/mongo/s/sharding_test_fixture_common.cpp b/src/mongo/s/sharding_test_fixture_common.cpp index 633e203ccc8..ed1fbd2b043 100644 --- a/src/mongo/s/sharding_test_fixture_common.cpp +++ b/src/mongo/s/sharding_test_fixture_common.cpp @@ -31,11 +31,19 @@ #include "mongo/s/sharding_test_fixture_common.h" +#include "mongo/s/catalog/type_changelog.h" +#include "mongo/s/write_ops/batched_command_request.h" +#include "mongo/s/write_ops/batched_command_response.h" + namespace mongo { using executor::NetworkTestEnv; +using executor::RemoteCommandRequest; +using unittest::assertGet; -ShardingTestFixtureCommon::ShardingTestFixtureCommon() = default; +ShardingTestFixtureCommon::ShardingTestFixtureCommon() { + _opCtxHolder = makeOperationContext(); +} ShardingTestFixtureCommon::~ShardingTestFixtureCommon() = default; @@ -62,6 +70,82 @@ void ShardingTestFixtureCommon::onFindWithMetadataCommand( _networkTestEnv->onFindWithMetadataCommand(func); } +void ShardingTestFixtureCommon::expectConfigCollectionCreate(const HostAndPort& configHost, + StringData collName, + int cappedSize, + const BSONObj& response) { + onCommand([&](const RemoteCommandRequest& request) { + ASSERT_EQUALS(configHost, request.target); + ASSERT_EQUALS("config", request.dbname); + + BSONObj expectedCreateCmd = + BSON("create" << collName << "capped" << true << "size" << cappedSize << "writeConcern" + << BSON("w" + << "majority" + << "wtimeout" << 60000) + << "maxTimeMS" << 30000); + ASSERT_BSONOBJ_EQ(expectedCreateCmd, request.cmdObj); + + return response; + }); +} + +void ShardingTestFixtureCommon::expectConfigCollectionInsert(const HostAndPort& configHost, + StringData collName, + Date_t timestamp, + const std::string& what, + const std::string& ns, + const BSONObj& detail) { + onCommand([&](const RemoteCommandRequest& request) { + ASSERT_EQUALS(configHost, request.target); + ASSERT_EQUALS(NamespaceString::kConfigDb, request.dbname); + + const auto opMsg = OpMsgRequest::fromDBAndBody(request.dbname, request.cmdObj); + const auto batchRequest(BatchedCommandRequest::parseInsert(opMsg)); + const auto& insertReq(batchRequest.getInsertRequest()); + + ASSERT_EQ(NamespaceString::kConfigDb, insertReq.getNamespace().db()); + ASSERT_EQ(collName, insertReq.getNamespace().coll()); + + const auto& inserts = insertReq.getDocuments(); + ASSERT_EQUALS(1U, inserts.size()); + + const ChangeLogType& actualChangeLog = assertGet(ChangeLogType::fromBSON(inserts.front())); + + ASSERT_EQUALS(operationContext()->getClient()->clientAddress(true), + actualChangeLog.getClientAddr()); + ASSERT_BSONOBJ_EQ(detail, actualChangeLog.getDetails()); + ASSERT_EQUALS(ns, actualChangeLog.getNS()); + const std::string expectedServer = str::stream() << network()->getHostName() << ":27017"; + ASSERT_EQUALS(expectedServer, actualChangeLog.getServer()); + ASSERT_EQUALS(timestamp, actualChangeLog.getTime()); + ASSERT_EQUALS(what, actualChangeLog.getWhat()); + + // Handle changeId specially because there's no way to know what OID was generated + std::string changeId = actualChangeLog.getChangeId(); + size_t firstDash = changeId.find("-"); + size_t lastDash = changeId.rfind("-"); + + const std::string serverPiece = changeId.substr(0, firstDash); + const std::string timePiece = changeId.substr(firstDash + 1, lastDash - firstDash - 1); + const std::string oidPiece = changeId.substr(lastDash + 1); + + const std::string expectedServerPiece = str::stream() + << Grid::get(operationContext())->getNetwork()->getHostName() << ":27017"; + ASSERT_EQUALS(expectedServerPiece, serverPiece); + ASSERT_EQUALS(timestamp.toString(), timePiece); + + OID generatedOID; + // Just make sure this doesn't throws and assume the OID is valid + generatedOID.init(oidPiece); + + BatchedCommandResponse response; + response.setStatus(Status::OK()); + + return response.toBSON(); + }); +} + std::unique_ptr<ShardingCatalogClient> ShardingTestFixtureCommon::makeShardingCatalogClient( std::unique_ptr<DistLockManager> distLockManager) { return nullptr; diff --git a/src/mongo/s/sharding_test_fixture_common.h b/src/mongo/s/sharding_test_fixture_common.h index 36d4a5221a4..317e7f03b50 100644 --- a/src/mongo/s/sharding_test_fixture_common.h +++ b/src/mongo/s/sharding_test_fixture_common.h @@ -29,32 +29,34 @@ #pragma once -#include "mongo/db/operation_context.h" -#include "mongo/db/service_context.h" +#include "mongo/client/remote_command_targeter_factory_mock.h" +#include "mongo/db/service_context_test_fixture.h" +#include "mongo/executor/network_interface_mock.h" #include "mongo/executor/network_test_env.h" #include "mongo/s/grid.h" #include "mongo/transport/session.h" -#include "mongo/unittest/unittest.h" namespace mongo { class DistLockCatalog; class DistLockManager; -class RemoteCommandTargeterFactoryMock; namespace executor { -class NetworkInterfaceMock; class TaskExecutor; } // namespace executor /** * Contains common functionality and tools, which apply to both mongos and mongod unit-tests. */ -class ShardingTestFixtureCommon { -public: +class ShardingTestFixtureCommon : public virtual ServiceContextTest { +protected: ShardingTestFixtureCommon(); ~ShardingTestFixtureCommon(); + OperationContext* operationContext() const { + return _opCtxHolder.get(); + } + template <typename Lambda> executor::NetworkTestEnv::FutureHandle<typename std::invoke_result<Lambda>::type> launchAsync( Lambda&& func) const { @@ -93,6 +95,26 @@ public: void onFindWithMetadataCommand( executor::NetworkTestEnv::OnFindCommandWithMetadataFunction func); + /** + * Waits for an operation which creates a capped config collection with the specified name and + * capped size. + */ + void expectConfigCollectionCreate(const HostAndPort& configHost, + StringData collName, + int cappedSize, + const BSONObj& response); + + /** + * Wait for a single insert in one of the change or action log collections with the specified + * contents and return a successful response. + */ + void expectConfigCollectionInsert(const HostAndPort& configHost, + StringData collName, + Date_t timestamp, + const std::string& what, + const std::string& ns, + const BSONObj& detail); + protected: /** * Base class returns nullptr. @@ -125,6 +147,10 @@ protected: // Since the DistLockManager is currently a private member of ShardingCatalogClient, we // store a raw pointer to it here. DistLockManager* _distLockManager = nullptr; + +private: + // Keeps the lifetime of the operation context + ServiceContext::UniqueOperationContext _opCtxHolder; }; } // namespace mongo diff --git a/src/mongo/s/write_ops/batch_write_op.cpp b/src/mongo/s/write_ops/batch_write_op.cpp index 4b3698b1ec6..b9bd33d9782 100644 --- a/src/mongo/s/write_ops/batch_write_op.cpp +++ b/src/mongo/s/write_ops/batch_write_op.cpp @@ -37,7 +37,6 @@ #include "mongo/base/error_codes.h" #include "mongo/db/operation_context.h" #include "mongo/db/ops/write_ops_parsers.h" -#include "mongo/db/s/database_sharding_state.h" #include "mongo/s/client/num_hosts_targeted_metrics.h" #include "mongo/s/cluster_commands_helpers.h" #include "mongo/s/grid.h" |