diff options
author | Sergi Mateo Bellido <sergi.mateo-bellido@mongodb.com> | 2020-12-03 11:02:49 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-12-10 10:14:41 +0000 |
commit | 457ad84c771a6cdd78f44593760613f3abf2d24c (patch) | |
tree | 1029a0044907c5c5cf2d564fac6dd6682ccdd2a2 /src/mongo/db/s | |
parent | 4e5de13940486910b57c1feb57e58687f778b855 (diff) | |
download | mongo-457ad84c771a6cdd78f44593760613f3abf2d24c.tar.gz |
SERVER-53093 Add timestamp to ChunkVersion
PART 2: Fixing our tests
Diffstat (limited to 'src/mongo/db/s')
30 files changed, 345 insertions, 218 deletions
diff --git a/src/mongo/db/s/active_migrations_registry_test.cpp b/src/mongo/db/s/active_migrations_registry_test.cpp index 0f268e23fb0..4d3418fb331 100644 --- a/src/mongo/db/s/active_migrations_registry_test.cpp +++ b/src/mongo/db/s/active_migrations_registry_test.cpp @@ -59,7 +59,7 @@ protected: }; MoveChunkRequest createMoveChunkRequest(const NamespaceString& nss) { - const ChunkVersion chunkVersion(1, 2, OID::gen()); + const ChunkVersion chunkVersion(1, 2, OID::gen(), boost::none /* timestamp */); BSONObjBuilder builder; MoveChunkRequest::appendAsCommand( diff --git a/src/mongo/db/s/active_shard_collection_registry_test.cpp b/src/mongo/db/s/active_shard_collection_registry_test.cpp index dccf0bdf63d..f154d7af00d 100644 --- a/src/mongo/db/s/active_shard_collection_registry_test.cpp +++ b/src/mongo/db/s/active_shard_collection_registry_test.cpp @@ -88,7 +88,7 @@ TEST_F(ShardCollectionRegistrationTest, ScopedShardCollectionConstructorAndAssig ASSERT(originalScopedShardCollection.mustExecute()); // Need to signal the registered shard collection so the destructor doesn't invariant - CreateCollectionResponse response(ChunkVersion(1, 0, OID::gen())); + CreateCollectionResponse response(ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */)); response.setCollectionUUID(UUID::gen()); originalScopedShardCollection.emplaceResponse(response); } @@ -119,7 +119,7 @@ TEST_F(ShardCollectionRegistrationTest, _registry.registerShardCollection(secondShardsvrShardCollectionRequest); ASSERT_EQ(ErrorCodes::ConflictingOperationInProgress, secondScopedShardCollection.getStatus()); - CreateCollectionResponse response(ChunkVersion(1, 0, OID::gen())); + CreateCollectionResponse response(ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */)); response.setCollectionUUID(UUID::gen()); originalScopedShardCollection.emplaceResponse(response); } @@ -153,7 +153,7 @@ TEST_F(ShardCollectionRegistrationTest, SecondShardCollectionWithSameOptionsJoin auto uuid = UUID::gen(); - CreateCollectionResponse response(ChunkVersion(1, 0, OID::gen())); + CreateCollectionResponse response(ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */)); response.setCollectionUUID(uuid); originalScopedShardCollection.emplaceResponse(response); @@ -220,10 +220,12 @@ TEST_F(ShardCollectionRegistrationTest, TwoShardCollectionsOnDifferentCollection assertGet(_registry.registerShardCollection(secondShardsvrShardCollectionRequest)); ASSERT(secondScopedShardCollection.mustExecute()); - CreateCollectionResponse responseOriginal(ChunkVersion(1, 0, OID::gen())); + CreateCollectionResponse responseOriginal( + ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */)); responseOriginal.setCollectionUUID(UUID::gen()); - CreateCollectionResponse responseSecond(ChunkVersion(1, 0, OID::gen())); + CreateCollectionResponse responseSecond( + ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */)); responseOriginal.setCollectionUUID(UUID::gen()); originalScopedShardCollection.emplaceResponse(responseOriginal); diff --git a/src/mongo/db/s/balancer/balancer_chunk_selection_policy_test.cpp b/src/mongo/db/s/balancer/balancer_chunk_selection_policy_test.cpp index 5607901f2c2..980fb82cad8 100644 --- a/src/mongo/db/s/balancer/balancer_chunk_selection_policy_test.cpp +++ b/src/mongo/db/s/balancer/balancer_chunk_selection_policy_test.cpp @@ -126,7 +126,7 @@ TEST_F(BalancerChunkSelectionTest, TagRangesOverlap) { operationContext(), ShardType::ConfigNS, kShard1, kMajorityWriteConcern)); // Set up a database and a sharded collection in the metadata. - ChunkVersion version(2, 0, OID::gen()); + ChunkVersion version(2, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(kDbName, kShardId0); setUpCollection(kNamespace, version); @@ -182,7 +182,7 @@ TEST_F(BalancerChunkSelectionTest, TagRangeMaxNotAlignedWithChunkMax) { kMajorityWriteConcern)); // Set up a database and a sharded collection in the metadata. - ChunkVersion version(2, 0, OID::gen()); + ChunkVersion version(2, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(kDbName, kShardId0); setUpCollection(kNamespace, version); diff --git a/src/mongo/db/s/balancer/balancer_policy_test.cpp b/src/mongo/db/s/balancer/balancer_policy_test.cpp index cb353dfe6d4..f5b45711037 100644 --- a/src/mongo/db/s/balancer/balancer_policy_test.cpp +++ b/src/mongo/db/s/balancer/balancer_policy_test.cpp @@ -77,7 +77,7 @@ std::pair<ShardStatisticsVector, ShardToChunksMap> generateCluster( int64_t currentChunk = 0; - ChunkVersion chunkVersion(1, 0, OID::gen()); + ChunkVersion chunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); const KeyPattern shardKeyPattern(BSON("x" << 1)); diff --git a/src/mongo/db/s/balancer/migration_manager_test.cpp b/src/mongo/db/s/balancer/migration_manager_test.cpp index 9cca1178bd4..4948ac24e48 100644 --- a/src/mongo/db/s/balancer/migration_manager_test.cpp +++ b/src/mongo/db/s/balancer/migration_manager_test.cpp @@ -117,7 +117,7 @@ TEST_F(MigrationManagerTest, OneCollectionTwoMigrations) { // Set up the database and collection as sharded in the metadata. const std::string dbName = "foo"; const NamespaceString collName(dbName, "bar"); - ChunkVersion version(2, 0, OID::gen()); + ChunkVersion version(2, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName, version); @@ -175,8 +175,8 @@ TEST_F(MigrationManagerTest, TwoCollectionsTwoMigrationsEach) { std::string dbName = "foo"; const NamespaceString collName1(dbName, "bar"); const NamespaceString collName2(dbName, "baz"); - ChunkVersion version1(2, 0, OID::gen()); - ChunkVersion version2(2, 0, OID::gen()); + ChunkVersion version1(2, 0, OID::gen(), boost::none /* timestamp */); + ChunkVersion version2(2, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName1, version1); @@ -252,7 +252,7 @@ TEST_F(MigrationManagerTest, SourceShardNotFound) { // Set up the database and collection as sharded in the metadata. const std::string dbName = "foo"; const NamespaceString collName(dbName, "bar"); - ChunkVersion version(2, 0, OID::gen()); + ChunkVersion version(2, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName, version); @@ -309,7 +309,7 @@ TEST_F(MigrationManagerTest, JumboChunkResponseBackwardsCompatibility) { // Set up the database and collection as sharded in the metadata. const std::string dbName = "foo"; const NamespaceString collName(dbName, "bar"); - ChunkVersion version(2, 0, OID::gen()); + ChunkVersion version(2, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName, version); @@ -354,7 +354,7 @@ TEST_F(MigrationManagerTest, InterruptMigration) { // Set up the database and collection as sharded in the metadata. const std::string dbName = "foo"; const NamespaceString collName(dbName, "bar"); - ChunkVersion version(2, 0, OID::gen()); + ChunkVersion version(2, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName, version); @@ -450,7 +450,7 @@ TEST_F(MigrationManagerTest, RestartMigrationManager) { // Set up the database and collection as sharded in the metadata. const std::string dbName = "foo"; const NamespaceString collName(dbName, "bar"); - ChunkVersion version(2, 0, OID::gen()); + ChunkVersion version(2, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName, version); @@ -501,7 +501,7 @@ TEST_F(MigrationManagerTest, MigrationRecovery) { // Set up the database and collection as sharded in the metadata. const std::string dbName = "foo"; const NamespaceString collName(dbName, "bar"); - ChunkVersion version(1, 0, OID::gen()); + ChunkVersion version(1, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName, version); @@ -556,7 +556,7 @@ TEST_F(MigrationManagerTest, FailMigrationRecovery) { // Set up the database and collection as sharded in the metadata. const std::string dbName = "foo"; const NamespaceString collName(dbName, "bar"); - ChunkVersion version(1, 0, OID::gen()); + ChunkVersion version(1, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName, version); @@ -615,7 +615,7 @@ TEST_F(MigrationManagerTest, RemoteCallErrorConversionToOperationFailed) { // Set up the database and collection as sharded in the metadata. const std::string dbName = "foo"; const NamespaceString collName(dbName, "bar"); - ChunkVersion version(1, 0, OID::gen()); + ChunkVersion version(1, 0, OID::gen(), boost::none /* timestamp */); setUpDatabase(dbName, kShardId0); setUpCollection(collName, version); diff --git a/src/mongo/db/s/balancer/scoped_migration_request_test.cpp b/src/mongo/db/s/balancer/scoped_migration_request_test.cpp index 9f97de3ee27..75442f5c09a 100644 --- a/src/mongo/db/s/balancer/scoped_migration_request_test.cpp +++ b/src/mongo/db/s/balancer/scoped_migration_request_test.cpp @@ -98,7 +98,7 @@ ScopedMigrationRequest ScopedMigrationRequestTest::makeScopedMigrationRequest( } MigrateInfo makeMigrateInfo() { - const ChunkVersion kChunkVersion{1, 2, OID::gen()}; + const ChunkVersion kChunkVersion{1, 2, OID::gen(), boost::none /* timestamp */}; BSONObjBuilder chunkBuilder; chunkBuilder.append(ChunkType::ns(), kNs); diff --git a/src/mongo/db/s/balancer/type_migration_test.cpp b/src/mongo/db/s/balancer/type_migration_test.cpp index 186cd0172be..13e10d94a9f 100644 --- a/src/mongo/db/s/balancer/type_migration_test.cpp +++ b/src/mongo/db/s/balancer/type_migration_test.cpp @@ -48,7 +48,7 @@ const ShardId kToShard("shard0001"); const bool kWaitForDelete{true}; TEST(MigrationTypeTest, ConvertFromMigrationInfo) { - const ChunkVersion version(1, 2, OID::gen()); + const ChunkVersion version(1, 2, OID::gen(), boost::none /* timestamp */); BSONObjBuilder chunkBuilder; chunkBuilder.append(ChunkType::name(), OID::gen()); @@ -84,7 +84,7 @@ TEST(MigrationTypeTest, ConvertFromMigrationInfo) { } TEST(MigrationTypeTest, FromAndToBSON) { - const ChunkVersion version(1, 2, OID::gen()); + const ChunkVersion version(1, 2, OID::gen(), boost::none /* timestamp */); BSONObjBuilder builder; builder.append(MigrationType::ns(), kNs); @@ -104,7 +104,7 @@ TEST(MigrationTypeTest, FromAndToBSON) { } TEST(MigrationTypeTest, MissingRequiredNamespaceField) { - const ChunkVersion version(1, 2, OID::gen()); + const ChunkVersion version(1, 2, OID::gen(), boost::none /* timestamp */); BSONObjBuilder builder; builder.append(MigrationType::min(), kMin); @@ -121,7 +121,7 @@ TEST(MigrationTypeTest, MissingRequiredNamespaceField) { } TEST(MigrationTypeTest, MissingRequiredMinField) { - const ChunkVersion version(1, 2, OID::gen()); + const ChunkVersion version(1, 2, OID::gen(), boost::none /* timestamp */); BSONObjBuilder builder; builder.append(MigrationType::ns(), kNs); @@ -138,7 +138,7 @@ TEST(MigrationTypeTest, MissingRequiredMinField) { } TEST(MigrationTypeTest, MissingRequiredMaxField) { - const ChunkVersion version(1, 2, OID::gen()); + const ChunkVersion version(1, 2, OID::gen(), boost::none /* timestamp */); BSONObjBuilder builder; builder.append(MigrationType::ns(), kNs); @@ -155,7 +155,7 @@ TEST(MigrationTypeTest, MissingRequiredMaxField) { } TEST(MigrationTypeTest, MissingRequiredFromShardField) { - const ChunkVersion version(1, 2, OID::gen()); + const ChunkVersion version(1, 2, OID::gen(), boost::none /* timestamp */); BSONObjBuilder builder; builder.append(MigrationType::ns(), kNs); @@ -172,7 +172,7 @@ TEST(MigrationTypeTest, MissingRequiredFromShardField) { } TEST(MigrationTypeTest, MissingRequiredToShardField) { - const ChunkVersion version(1, 2, OID::gen()); + const ChunkVersion version(1, 2, OID::gen(), boost::none /* timestamp */); BSONObjBuilder builder; builder.append(MigrationType::ns(), kNs); diff --git a/src/mongo/db/s/collection_metadata_filtering_test.cpp b/src/mongo/db/s/collection_metadata_filtering_test.cpp index ce95b6b5a46..e0559141e43 100644 --- a/src/mongo/db/s/collection_metadata_filtering_test.cpp +++ b/src/mongo/db/s/collection_metadata_filtering_test.cpp @@ -70,10 +70,11 @@ protected: nullptr, false, epoch, + boost::none /* timestamp */, boost::none, true, [&] { - ChunkVersion version(1, 0, epoch); + ChunkVersion version(1, 0, epoch, boost::none /* timestamp */); ChunkType chunk1(kNss, {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << -100)}, diff --git a/src/mongo/db/s/collection_metadata_test.cpp b/src/mongo/db/s/collection_metadata_test.cpp index c42989221ef..b2e27794f62 100644 --- a/src/mongo/db/s/collection_metadata_test.cpp +++ b/src/mongo/db/s/collection_metadata_test.cpp @@ -59,7 +59,7 @@ CollectionMetadata makeCollectionMetadataImpl( std::vector<ChunkType> allChunks; auto nextMinKey = shardKeyPattern.globalMin(); - ChunkVersion version{1, 0, epoch}; + ChunkVersion version{1, 0, epoch, boost::none /* timestamp */}; for (const auto& myNextChunk : thisShardsChunks) { if (SimpleBSONObjComparator::kInstance.evaluate(nextMinKey < myNextChunk.first)) { // Need to add a chunk to the other shard from nextMinKey to myNextChunk.first. @@ -94,6 +94,7 @@ CollectionMetadata makeCollectionMetadataImpl( nullptr, false, epoch, + boost::none /* timestamp */, reshardingFields, true, allChunks)), diff --git a/src/mongo/db/s/collection_sharding_runtime_test.cpp b/src/mongo/db/s/collection_sharding_runtime_test.cpp index 9c4ce69c65d..1779b75b60b 100644 --- a/src/mongo/db/s/collection_sharding_runtime_test.cpp +++ b/src/mongo/db/s/collection_sharding_runtime_test.cpp @@ -51,21 +51,24 @@ protected: UUID uuid = UUID::gen()) { const OID epoch = OID::gen(); auto range = ChunkRange(BSON(kShardKey << MINKEY), BSON(kShardKey << MAXKEY)); - auto chunk = - ChunkType(kTestNss, std::move(range), ChunkVersion(1, 0, epoch), ShardId("other")); - ChunkManager cm( - ShardId("0"), - DatabaseVersion(UUID::gen()), - makeStandaloneRoutingTableHistory(RoutingTableHistory::makeNew(kTestNss, - uuid, - kShardKeyPattern, - nullptr, - false, - epoch, - boost::none, - true, - {std::move(chunk)})), - boost::none); + auto chunk = ChunkType(kTestNss, + std::move(range), + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), + ShardId("other")); + ChunkManager cm(ShardId("0"), + DatabaseVersion(UUID::gen()), + makeStandaloneRoutingTableHistory( + RoutingTableHistory::makeNew(kTestNss, + uuid, + kShardKeyPattern, + nullptr, + false, + epoch, + boost::none /* timestamp */, + boost::none, + true, + {std::move(chunk)})), + boost::none); if (!OperationShardingState::isOperationVersioned(opCtx)) { const auto version = cm.getVersion(ShardId("0")); diff --git a/src/mongo/db/s/config/initial_split_policy_test.cpp b/src/mongo/db/s/config/initial_split_policy_test.cpp index d0866e449d2..b583c6b87c4 100644 --- a/src/mongo/db/s/config/initial_split_policy_test.cpp +++ b/src/mongo/db/s/config/initial_split_policy_test.cpp @@ -206,7 +206,7 @@ public: std::vector<ChunkType> chunks; for (unsigned long i = 0; i < chunkRanges.size(); ++i) { - ChunkVersion version(1, 0, OID::gen()); + ChunkVersion version(1, 0, OID::gen(), boost::none /* timestamp */); ChunkType chunk(_nss, chunkRanges[i], version, shardIds[i]); chunk.setHistory({ChunkHistory(timeStamp, shardIds[i])}); chunks.push_back(chunk); diff --git a/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp index a73d0aa1d0a..9c36446fd15 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp @@ -138,14 +138,24 @@ protected: TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, BumpChunkVersionOneChunkPerShard) { const auto epoch = OID::gen(); - const auto shard0Chunk0 = generateChunkType( - kNss, ChunkVersion(10, 1, epoch), kShard0.getName(), BSON("a" << 1), BSON("a" << 10)); - const auto shard1Chunk0 = generateChunkType( - kNss, ChunkVersion(11, 2, epoch), kShard1.getName(), BSON("a" << 11), BSON("a" << 20)); + const auto shard0Chunk0 = + generateChunkType(kNss, + ChunkVersion(10, 1, epoch, boost::none /* timestamp */), + kShard0.getName(), + BSON("a" << 1), + BSON("a" << 10)); + const auto shard1Chunk0 = + generateChunkType(kNss, + ChunkVersion(11, 2, epoch, boost::none /* timestamp */), + kShard1.getName(), + BSON("a" << 11), + BSON("a" << 20)); const auto collectionVersion = shard1Chunk0.getVersion(); - ChunkVersion targetChunkVersion( - collectionVersion.majorVersion() + 1, 0, collectionVersion.epoch()); + ChunkVersion targetChunkVersion(collectionVersion.majorVersion() + 1, + 0, + collectionVersion.epoch(), + collectionVersion.getTimestamp()); setupCollection(kNss, kKeyPattern, {shard0Chunk0, shard1Chunk0}); @@ -165,16 +175,30 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, BumpChunkVersionTwoChunksOnOneShard) { const auto epoch = OID::gen(); - const auto shard0Chunk0 = generateChunkType( - kNss, ChunkVersion(10, 1, epoch), kShard0.getName(), BSON("a" << 1), BSON("a" << 10)); - const auto shard0Chunk1 = generateChunkType( - kNss, ChunkVersion(11, 2, epoch), kShard0.getName(), BSON("a" << 11), BSON("a" << 20)); - const auto shard1Chunk0 = generateChunkType( - kNss, ChunkVersion(8, 1, epoch), kShard1.getName(), BSON("a" << 21), BSON("a" << 100)); + const auto shard0Chunk0 = + generateChunkType(kNss, + ChunkVersion(10, 1, epoch, boost::none /* timestamp */), + kShard0.getName(), + BSON("a" << 1), + BSON("a" << 10)); + const auto shard0Chunk1 = + generateChunkType(kNss, + ChunkVersion(11, 2, epoch, boost::none /* timestamp */), + kShard0.getName(), + BSON("a" << 11), + BSON("a" << 20)); + const auto shard1Chunk0 = + generateChunkType(kNss, + ChunkVersion(8, 1, epoch, boost::none /* timestamp */), + kShard1.getName(), + BSON("a" << 21), + BSON("a" << 100)); const auto collectionVersion = shard0Chunk1.getVersion(); - ChunkVersion targetChunkVersion( - collectionVersion.majorVersion() + 1, 0, collectionVersion.epoch()); + ChunkVersion targetChunkVersion(collectionVersion.majorVersion() + 1, + 0, + collectionVersion.epoch(), + collectionVersion.getTimestamp()); setupCollection(kNss, kKeyPattern, {shard0Chunk0, shard0Chunk1, shard1Chunk0}); @@ -193,18 +217,36 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, BumpChunkVersionTwoChunksOnTwoShards) { const auto epoch = OID::gen(); - const auto shard0Chunk0 = generateChunkType( - kNss, ChunkVersion(10, 1, epoch), kShard0.getName(), BSON("a" << 1), BSON("a" << 10)); - const auto shard0Chunk1 = generateChunkType( - kNss, ChunkVersion(11, 2, epoch), kShard0.getName(), BSON("a" << 11), BSON("a" << 20)); - const auto shard1Chunk0 = generateChunkType( - kNss, ChunkVersion(8, 1, epoch), kShard1.getName(), BSON("a" << 21), BSON("a" << 100)); - const auto shard1Chunk1 = generateChunkType( - kNss, ChunkVersion(12, 1, epoch), kShard1.getName(), BSON("a" << 101), BSON("a" << 200)); + const auto shard0Chunk0 = + generateChunkType(kNss, + ChunkVersion(10, 1, epoch, boost::none /* timestamp */), + kShard0.getName(), + BSON("a" << 1), + BSON("a" << 10)); + const auto shard0Chunk1 = + generateChunkType(kNss, + ChunkVersion(11, 2, epoch, boost::none /* timestamp */), + kShard0.getName(), + BSON("a" << 11), + BSON("a" << 20)); + const auto shard1Chunk0 = + generateChunkType(kNss, + ChunkVersion(8, 1, epoch, boost::none /* timestamp */), + kShard1.getName(), + BSON("a" << 21), + BSON("a" << 100)); + const auto shard1Chunk1 = + generateChunkType(kNss, + ChunkVersion(12, 1, epoch, boost::none /* timestamp */), + kShard1.getName(), + BSON("a" << 101), + BSON("a" << 200)); const auto collectionVersion = shard1Chunk1.getVersion(); - ChunkVersion targetChunkVersion( - collectionVersion.majorVersion() + 1, 0, collectionVersion.epoch()); + ChunkVersion targetChunkVersion(collectionVersion.majorVersion() + 1, + 0, + collectionVersion.epoch(), + collectionVersion.getTimestamp()); setupCollection(kNss, kKeyPattern, {shard0Chunk0, shard0Chunk1, shard1Chunk0, shard1Chunk1}); @@ -223,10 +265,18 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, SucceedsInThePresenceOfTransientTransactionErrors) { const auto epoch = OID::gen(); - const auto shard0Chunk0 = generateChunkType( - kNss, ChunkVersion(10, 1, epoch), kShard0.getName(), BSON("a" << 1), BSON("a" << 10)); - const auto shard1Chunk0 = generateChunkType( - kNss, ChunkVersion(11, 2, epoch), kShard1.getName(), BSON("a" << 11), BSON("a" << 20)); + const auto shard0Chunk0 = + generateChunkType(kNss, + ChunkVersion(10, 1, epoch, boost::none /* timestamp */), + kShard0.getName(), + BSON("a" << 1), + BSON("a" << 10)); + const auto shard1Chunk0 = + generateChunkType(kNss, + ChunkVersion(11, 2, epoch, boost::none /* timestamp */), + kShard1.getName(), + BSON("a" << 11), + BSON("a" << 20)); const auto initialCollectionVersion = shard1Chunk0.getVersion(); setupCollection(kNss, kKeyPattern, {shard0Chunk0, shard1Chunk0}); @@ -242,8 +292,10 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, } }); - auto targetChunkVersion = ChunkVersion{ - initialCollectionVersion.majorVersion() + 1, 0, initialCollectionVersion.epoch()}; + auto targetChunkVersion = ChunkVersion{initialCollectionVersion.majorVersion() + 1, + 0, + initialCollectionVersion.epoch(), + initialCollectionVersion.getTimestamp()}; ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged( shard0Chunk0, getChunkDoc(operationContext(), shard0Chunk0.getMin()), targetChunkVersion)); @@ -269,8 +321,10 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, } }); - targetChunkVersion = ChunkVersion{ - initialCollectionVersion.majorVersion() + 2, 0, initialCollectionVersion.epoch()}; + targetChunkVersion = ChunkVersion{initialCollectionVersion.majorVersion() + 2, + 0, + initialCollectionVersion.epoch(), + initialCollectionVersion.getTimestamp()}; ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged( shard0Chunk0, getChunkDoc(operationContext(), shard0Chunk0.getMin()), targetChunkVersion)); @@ -284,10 +338,18 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest, StopsRetryingOnPermanentServerErrors) { const auto epoch = OID::gen(); - const auto shard0Chunk0 = generateChunkType( - kNss, ChunkVersion(10, 1, epoch), kShard0.getName(), BSON("a" << 1), BSON("a" << 10)); - const auto shard1Chunk0 = generateChunkType( - kNss, ChunkVersion(11, 2, epoch), kShard1.getName(), BSON("a" << 11), BSON("a" << 20)); + const auto shard0Chunk0 = + generateChunkType(kNss, + ChunkVersion(10, 1, epoch, boost::none /* timestamp */), + kShard0.getName(), + BSON("a" << 1), + BSON("a" << 10)); + const auto shard1Chunk0 = + generateChunkType(kNss, + ChunkVersion(11, 2, epoch, boost::none /* timestamp */), + kShard1.getName(), + BSON("a" << 11), + BSON("a" << 20)); setupCollection(kNss, kKeyPattern, {shard0Chunk0, shard1Chunk0}); diff --git a/src/mongo/db/s/config/sharding_catalog_manager_clear_jumbo_flag_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_clear_jumbo_flag_test.cpp index 0982c6fe76e..bd428f52954 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_clear_jumbo_flag_test.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_clear_jumbo_flag_test.cpp @@ -77,7 +77,7 @@ protected: ChunkType chunk; chunk.setName(OID::gen()); chunk.setNS(_namespace); - chunk.setVersion({12, 7, _epoch}); + chunk.setVersion({12, 7, _epoch, boost::none /* timestamp */}); chunk.setShard(shard.getName()); chunk.setMin(jumboChunk().getMin()); chunk.setMax(jumboChunk().getMax()); @@ -86,7 +86,7 @@ protected: ChunkType otherChunk; otherChunk.setName(OID::gen()); otherChunk.setNS(_namespace); - otherChunk.setVersion({14, 7, _epoch}); + otherChunk.setVersion({14, 7, _epoch, boost::none /* timestamp */}); otherChunk.setShard(shard.getName()); otherChunk.setMin(nonJumboChunk().getMin()); otherChunk.setMax(nonJumboChunk().getMax()); @@ -105,7 +105,7 @@ TEST_F(ClearJumboFlagTest, ClearJumboShouldBumpVersion) { auto chunkDoc = uassertStatusOK(getChunkDoc(operationContext(), jumboChunk().getMin())); ASSERT_FALSE(chunkDoc.getJumbo()); - ASSERT_EQ(ChunkVersion(15, 0, epoch()), chunkDoc.getVersion()); + ASSERT_EQ(ChunkVersion(15, 0, epoch(), boost::none /* timestamp */), chunkDoc.getVersion()); } TEST_F(ClearJumboFlagTest, ClearJumboShouldNotBumpVersionIfChunkNotJumbo) { @@ -114,7 +114,7 @@ TEST_F(ClearJumboFlagTest, ClearJumboShouldNotBumpVersionIfChunkNotJumbo) { auto chunkDoc = uassertStatusOK(getChunkDoc(operationContext(), nonJumboChunk().getMin())); ASSERT_FALSE(chunkDoc.getJumbo()); - ASSERT_EQ(ChunkVersion(14, 7, epoch()), chunkDoc.getVersion()); + ASSERT_EQ(ChunkVersion(14, 7, epoch(), boost::none /* timestamp */), chunkDoc.getVersion()); } TEST_F(ClearJumboFlagTest, AssertsOnEpochMismatch) { diff --git a/src/mongo/db/s/config/sharding_catalog_manager_commit_chunk_migration_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_commit_chunk_migration_test.cpp index 754deb1bf86..79a0cd0414d 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_commit_chunk_migration_test.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_commit_chunk_migration_test.cpp @@ -62,7 +62,7 @@ TEST_F(CommitChunkMigrate, ChunksUpdatedCorrectly) { ChunkType migratedChunk, controlChunk; { - ChunkVersion origVersion(12, 7, OID::gen()); + ChunkVersion origVersion(12, 7, OID::gen(), boost::none /* timestamp */); migratedChunk.setName(OID::gen()); migratedChunk.setNS(kNamespace); @@ -100,7 +100,8 @@ TEST_F(CommitChunkMigrate, ChunksUpdatedCorrectly) { auto mver = assertGet(ChunkVersion::parseWithField(versions, "shardVersion")); ASSERT_EQ(ChunkVersion(migratedChunk.getVersion().majorVersion() + 1, 1, - migratedChunk.getVersion().epoch()), + migratedChunk.getVersion().epoch(), + migratedChunk.getVersion().getTimestamp()), mver); // Verify that a collection version is returned @@ -140,7 +141,8 @@ TEST_F(CommitChunkMigrate, ChunksUpdatedCorrectlyWithoutControlChunk) { setupShards({shard0, shard1}); int origMajorVersion = 15; - auto const origVersion = ChunkVersion(origMajorVersion, 4, OID::gen()); + auto const origVersion = + ChunkVersion(origMajorVersion, 4, OID::gen(), boost::none /* timestamp */); ChunkType chunk0; chunk0.setName(OID::gen()); @@ -174,7 +176,7 @@ TEST_F(CommitChunkMigrate, ChunksUpdatedCorrectlyWithoutControlChunk) { BSONObj versions = resultBSON.getValue(); auto mver = ChunkVersion::parseWithField(versions, "shardVersion"); ASSERT_OK(mver.getStatus()); - ASSERT_EQ(ChunkVersion(0, 0, origVersion.epoch()), mver.getValue()); + ASSERT_EQ(ChunkVersion(0, 0, origVersion.epoch(), origVersion.getTimestamp()), mver.getValue()); // Verify the chunk ended up in the right shard. auto chunkDoc0 = uassertStatusOK(getChunkDoc(operationContext(), chunkMin)); @@ -197,7 +199,8 @@ TEST_F(CommitChunkMigrate, CheckCorrectOpsCommandNoCtlTrimHistory) { setupShards({shard0, shard1}); int origMajorVersion = 15; - auto const origVersion = ChunkVersion(origMajorVersion, 4, OID::gen()); + auto const origVersion = + ChunkVersion(origMajorVersion, 4, OID::gen(), boost::none /* timestamp */); ChunkType chunk0; chunk0.setName(OID::gen()); @@ -232,7 +235,7 @@ TEST_F(CommitChunkMigrate, CheckCorrectOpsCommandNoCtlTrimHistory) { BSONObj versions = resultBSON.getValue(); auto mver = ChunkVersion::parseWithField(versions, "shardVersion"); ASSERT_OK(mver.getStatus()); - ASSERT_EQ(ChunkVersion(0, 0, origVersion.epoch()), mver.getValue()); + ASSERT_EQ(ChunkVersion(0, 0, origVersion.epoch(), origVersion.getTimestamp()), mver.getValue()); // Verify the chunk ended up in the right shard. auto chunkDoc0 = uassertStatusOK(getChunkDoc(operationContext(), chunkMin)); @@ -256,7 +259,8 @@ TEST_F(CommitChunkMigrate, RejectOutOfOrderHistory) { setupShards({shard0, shard1}); int origMajorVersion = 15; - auto const origVersion = ChunkVersion(origMajorVersion, 4, OID::gen()); + auto const origVersion = + ChunkVersion(origMajorVersion, 4, OID::gen(), boost::none /* timestamp */); ChunkType chunk0; chunk0.setName(OID::gen()); @@ -300,7 +304,8 @@ TEST_F(CommitChunkMigrate, RejectWrongCollectionEpoch0) { setupShards({shard0, shard1}); int origMajorVersion = 12; - auto const origVersion = ChunkVersion(origMajorVersion, 7, OID::gen()); + auto const origVersion = + ChunkVersion(origMajorVersion, 7, OID::gen(), boost::none /* timestamp */); ChunkType chunk0; chunk0.setName(OID::gen()); @@ -352,8 +357,10 @@ TEST_F(CommitChunkMigrate, RejectWrongCollectionEpoch1) { setupShards({shard0, shard1}); int origMajorVersion = 12; - auto const origVersion = ChunkVersion(origMajorVersion, 7, OID::gen()); - auto const otherVersion = ChunkVersion(origMajorVersion, 7, OID::gen()); + auto const origVersion = + ChunkVersion(origMajorVersion, 7, OID::gen(), boost::none /* timestamp */); + auto const otherVersion = + ChunkVersion(origMajorVersion, 7, OID::gen(), boost::none /* timestamp */); ChunkType chunk0; chunk0.setName(OID::gen()); @@ -406,7 +413,8 @@ TEST_F(CommitChunkMigrate, RejectChunkMissing0) { setupShards({shard0, shard1}); int origMajorVersion = 12; - auto const origVersion = ChunkVersion(origMajorVersion, 7, OID::gen()); + auto const origVersion = + ChunkVersion(origMajorVersion, 7, OID::gen(), boost::none /* timestamp */); ChunkType chunk0; chunk0.setName(OID::gen()); @@ -458,7 +466,8 @@ TEST_F(CommitChunkMigrate, CommitWithLastChunkOnShardShouldNotAffectOtherChunks) setupShards({shard0, shard1}); int origMajorVersion = 12; - auto const origVersion = ChunkVersion(origMajorVersion, 7, OID::gen()); + auto const origVersion = + ChunkVersion(origMajorVersion, 7, OID::gen(), boost::none /* timestamp */); ChunkType chunk0; chunk0.setName(OID::gen()); @@ -504,7 +513,7 @@ TEST_F(CommitChunkMigrate, CommitWithLastChunkOnShardShouldNotAffectOtherChunks) BSONObj versions = resultBSON.getValue(); auto mver = ChunkVersion::parseWithField(versions, "shardVersion"); ASSERT_OK(mver.getStatus()); - ASSERT_EQ(ChunkVersion(0, 0, origVersion.epoch()), mver.getValue()); + ASSERT_EQ(ChunkVersion(0, 0, origVersion.epoch(), origVersion.getTimestamp()), mver.getValue()); // Verify the chunks ended up in the right shards. auto chunkDoc0 = uassertStatusOK(getChunkDoc(operationContext(), chunkMin)); @@ -534,7 +543,7 @@ TEST_F(CommitChunkMigrate, RejectMissingChunkVersion) { setupShards({shard0, shard1}); - ChunkVersion origVersion(12, 7, OID::gen()); + ChunkVersion origVersion(12, 7, OID::gen(), boost::none /* timestamp */); // Create migrate chunk with no chunk version set. ChunkType migratedChunk; @@ -581,7 +590,7 @@ TEST_F(CommitChunkMigrate, RejectOlderChunkVersion) { setupShards({shard0, shard1}); auto epoch = OID::gen(); - ChunkVersion origVersion(12, 7, epoch); + ChunkVersion origVersion(12, 7, epoch, boost::none /* timestamp */); ChunkType migratedChunk; migratedChunk.setName(OID::gen()); @@ -592,7 +601,7 @@ TEST_F(CommitChunkMigrate, RejectOlderChunkVersion) { migratedChunk.setMin(BSON("a" << 1)); migratedChunk.setMax(BSON("a" << 10)); - ChunkVersion currentChunkVersion(14, 7, epoch); + ChunkVersion currentChunkVersion(14, 7, epoch, boost::none /* timestamp */); ChunkType currentChunk; currentChunk.setName(OID::gen()); @@ -630,7 +639,7 @@ TEST_F(CommitChunkMigrate, RejectMismatchedEpoch) { setupShards({shard0, shard1}); - ChunkVersion origVersion(12, 7, OID::gen()); + ChunkVersion origVersion(12, 7, OID::gen(), boost::none /* timestamp */); ChunkType migratedChunk; migratedChunk.setName(OID::gen()); @@ -641,7 +650,7 @@ TEST_F(CommitChunkMigrate, RejectMismatchedEpoch) { migratedChunk.setMin(BSON("a" << 1)); migratedChunk.setMax(BSON("a" << 10)); - ChunkVersion currentChunkVersion(12, 7, OID::gen()); + ChunkVersion currentChunkVersion(12, 7, OID::gen(), boost::none /* timestamp */); ChunkType currentChunk; currentChunk.setName(OID::gen()); diff --git a/src/mongo/db/s/config/sharding_catalog_manager_ensure_chunk_version_is_greater_than_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_ensure_chunk_version_is_greater_than_test.cpp index f2f308811d3..5795eb04d72 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_ensure_chunk_version_is_greater_than_test.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_ensure_chunk_version_is_greater_than_test.cpp @@ -81,11 +81,12 @@ void assertChunkVersionWasBumpedTo(const ChunkType& chunkTypeBefore, } TEST_F(EnsureChunkVersionIsGreaterThanTest, IfNoChunksFoundFoundReturnsSuccess) { - const auto requestedChunkType = generateChunkType(kNss, - ChunkVersion(10, 2, OID::gen()), - ShardId("shard0000"), - BSON("a" << 1), - BSON("a" << 10)); + const auto requestedChunkType = + generateChunkType(kNss, + ChunkVersion(10, 2, OID::gen(), boost::none /* timestamp */), + ShardId("shard0000"), + BSON("a" << 1), + BSON("a" << 10)); ShardingCatalogManager::get(operationContext()) ->ensureChunkVersionIsGreaterThan(operationContext(), @@ -95,15 +96,16 @@ TEST_F(EnsureChunkVersionIsGreaterThanTest, IfNoChunksFoundFoundReturnsSuccess) } TEST_F(EnsureChunkVersionIsGreaterThanTest, IfNoChunkWithMatchingEpochFoundReturnsSuccess) { - const auto requestedChunkType = generateChunkType(kNss, - ChunkVersion(10, 2, OID::gen()), - ShardId("shard0000"), - BSON("a" << 1), - BSON("a" << 10)); + const auto requestedChunkType = + generateChunkType(kNss, + ChunkVersion(10, 2, OID::gen(), boost::none /* timestamp */), + ShardId("shard0000"), + BSON("a" << 1), + BSON("a" << 10)); ChunkType existingChunkType = requestedChunkType; // Epoch is different. - existingChunkType.setVersion(ChunkVersion(10, 2, OID::gen())); + existingChunkType.setVersion(ChunkVersion(10, 2, OID::gen(), boost::none /* timestamp */)); setupCollection(kNss, kKeyPattern, {existingChunkType}); ShardingCatalogManager::get(operationContext()) @@ -117,11 +119,12 @@ TEST_F(EnsureChunkVersionIsGreaterThanTest, IfNoChunkWithMatchingEpochFoundRetur } TEST_F(EnsureChunkVersionIsGreaterThanTest, IfNoChunkWithMatchingMinKeyFoundReturnsSuccess) { - const auto requestedChunkType = generateChunkType(kNss, - ChunkVersion(10, 2, OID::gen()), - ShardId("shard0000"), - BSON("a" << 1), - BSON("a" << 10)); + const auto requestedChunkType = + generateChunkType(kNss, + ChunkVersion(10, 2, OID::gen(), boost::none /* timestamp */), + ShardId("shard0000"), + BSON("a" << 1), + BSON("a" << 10)); ChunkType existingChunkType = requestedChunkType; // Min key is different. @@ -139,11 +142,12 @@ TEST_F(EnsureChunkVersionIsGreaterThanTest, IfNoChunkWithMatchingMinKeyFoundRetu } TEST_F(EnsureChunkVersionIsGreaterThanTest, IfNoChunkWithMatchingMaxKeyFoundReturnsSuccess) { - const auto requestedChunkType = generateChunkType(kNss, - ChunkVersion(10, 2, OID::gen()), - ShardId("shard0000"), - BSON("a" << 1), - BSON("a" << 10)); + const auto requestedChunkType = + generateChunkType(kNss, + ChunkVersion(10, 2, OID::gen(), boost::none /* timestamp */), + ShardId("shard0000"), + BSON("a" << 1), + BSON("a" << 10)); ChunkType existingChunkType = requestedChunkType; // Max key is different. @@ -163,12 +167,20 @@ TEST_F(EnsureChunkVersionIsGreaterThanTest, IfNoChunkWithMatchingMaxKeyFoundRetu TEST_F(EnsureChunkVersionIsGreaterThanTest, IfChunkMatchingRequestedChunkFoundBumpsChunkVersionAndReturnsSuccess) { const auto epoch = OID::gen(); - const auto requestedChunkType = generateChunkType( - kNss, ChunkVersion(10, 2, epoch), ShardId("shard0000"), BSON("a" << 1), BSON("a" << 10)); + const auto requestedChunkType = + generateChunkType(kNss, + ChunkVersion(10, 2, epoch, boost::none /* timestamp */), + ShardId("shard0000"), + BSON("a" << 1), + BSON("a" << 10)); const auto existingChunkType = requestedChunkType; - const auto highestChunkType = generateChunkType( - kNss, ChunkVersion(20, 3, epoch), ShardId("shard0001"), BSON("a" << 11), BSON("a" << 20)); + const auto highestChunkType = + generateChunkType(kNss, + ChunkVersion(20, 3, epoch, boost::none /* timestamp */), + ShardId("shard0001"), + BSON("a" << 11), + BSON("a" << 20)); setupCollection(kNss, kKeyPattern, {existingChunkType, highestChunkType}); ShardingCatalogManager::get(operationContext()) @@ -177,21 +189,27 @@ TEST_F(EnsureChunkVersionIsGreaterThanTest, requestedChunkType.getMax(), requestedChunkType.getVersion()); - assertChunkVersionWasBumpedTo( - existingChunkType, - getChunkDoc(operationContext(), existingChunkType.getMin()), - ChunkVersion(highestChunkType.getVersion().majorVersion() + 1, 0, epoch)); + assertChunkVersionWasBumpedTo(existingChunkType, + getChunkDoc(operationContext(), existingChunkType.getMin()), + ChunkVersion(highestChunkType.getVersion().majorVersion() + 1, + 0, + epoch, + boost::none /* timestamp */)); } TEST_F( EnsureChunkVersionIsGreaterThanTest, IfChunkMatchingRequestedChunkFoundAndHasHigherChunkVersionReturnsSuccessWithoutBumpingChunkVersion) { const auto epoch = OID::gen(); - const auto requestedChunkType = generateChunkType( - kNss, ChunkVersion(10, 2, epoch), ShardId("shard0000"), BSON("a" << 1), BSON("a" << 10)); + const auto requestedChunkType = + generateChunkType(kNss, + ChunkVersion(10, 2, epoch, boost::none /* timestamp */), + ShardId("shard0000"), + BSON("a" << 1), + BSON("a" << 10)); ChunkType existingChunkType = requestedChunkType; - existingChunkType.setVersion(ChunkVersion(11, 1, epoch)); + existingChunkType.setVersion(ChunkVersion(11, 1, epoch, boost::none /* timestamp */)); setupCollection(kNss, kKeyPattern, {existingChunkType}); ShardingCatalogManager::get(operationContext()) diff --git a/src/mongo/db/s/config/sharding_catalog_manager_merge_chunks_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_merge_chunks_test.cpp index 269bb6e6253..50f44d531b7 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_merge_chunks_test.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_merge_chunks_test.cpp @@ -51,7 +51,7 @@ TEST_F(MergeChunkTest, MergeExistingChunksCorrectlyShouldSucceed) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -90,8 +90,10 @@ TEST_F(MergeChunkTest, MergeExistingChunksCorrectlyShouldSucceed) { ASSERT_EQ(collVersion, shardVersion); // Check for increment on mergedChunk's minor version - auto expectedShardVersion = ChunkVersion( - origVersion.majorVersion(), origVersion.minorVersion() + 1, origVersion.epoch()); + auto expectedShardVersion = ChunkVersion(origVersion.majorVersion(), + origVersion.minorVersion() + 1, + origVersion.epoch(), + origVersion.getTimestamp()); ASSERT_EQ(expectedShardVersion, shardVersion); auto findResponse = uassertStatusOK( @@ -126,7 +128,7 @@ TEST_F(MergeChunkTest, MergeSeveralChunksCorrectlyShouldSucceed) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -203,7 +205,7 @@ TEST_F(MergeChunkTest, NewMergeShouldClaimHighestVersion) { otherChunk.setNS(kNamespace); auto collEpoch = OID::gen(); - auto origVersion = ChunkVersion(1, 2, collEpoch); + auto origVersion = ChunkVersion(1, 2, collEpoch, boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -225,7 +227,7 @@ TEST_F(MergeChunkTest, NewMergeShouldClaimHighestVersion) { std::vector<BSONObj> chunkBoundaries{chunkMin, chunkBound, chunkMax}; // Set up other chunk with competing version - auto competingVersion = ChunkVersion(2, 1, collEpoch); + auto competingVersion = ChunkVersion(2, 1, collEpoch, boost::none /* timestamp */); otherChunk.setVersion(competingVersion); otherChunk.setShard(ShardId("shard0000")); otherChunk.setMin(BSON("a" << 10)); @@ -278,7 +280,7 @@ TEST_F(MergeChunkTest, MergeLeavesOtherChunksAlone) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 2, OID::gen()); + auto origVersion = ChunkVersion(1, 2, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -352,7 +354,7 @@ TEST_F(MergeChunkTest, NonExistingNamespace) { ChunkType chunk; chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -389,7 +391,7 @@ TEST_F(MergeChunkTest, NonMatchingEpochsOfChunkAndRequestErrors) { ChunkType chunk; chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -427,7 +429,7 @@ TEST_F(MergeChunkTest, MergeAlreadyHappenedSucceeds) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -492,7 +494,7 @@ TEST_F(MergeChunkTest, ChunkBoundariesOutOfOrderFails) { { std::vector<ChunkType> originalChunks; - ChunkVersion version = ChunkVersion(1, 0, epoch); + ChunkVersion version = ChunkVersion(1, 0, epoch, boost::none /* timestamp */); ChunkType chunk; chunk.setName(OID::gen()); @@ -535,7 +537,7 @@ TEST_F(MergeChunkTest, MergingChunksWithDollarPrefixShouldSucceed) { chunk1.setName(OID::gen()); chunk1.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk1.setVersion(origVersion); chunk1.setShard(ShardId("shard0000")); 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 f8f73c0c7c7..ac1de7140e0 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 @@ -201,15 +201,15 @@ TEST_F(RemoveShardTest, RemoveShardStillDrainingChunksRemaining) { auto epoch = OID::gen(); ChunkType chunk1(NamespaceString("testDB.testColl"), ChunkRange(BSON("_id" << 0), BSON("_id" << 20)), - ChunkVersion(1, 1, epoch), + ChunkVersion(1, 1, epoch, boost::none /* timestamp */), shard1.getName()); ChunkType chunk2(NamespaceString("testDB.testColl"), ChunkRange(BSON("_id" << 21), BSON("_id" << 50)), - ChunkVersion(1, 2, epoch), + ChunkVersion(1, 2, epoch, boost::none /* timestamp */), shard1.getName()); ChunkType chunk3(NamespaceString("testDB.testColl"), ChunkRange(BSON("_id" << 51), BSON("_id" << 1000)), - ChunkVersion(1, 3, epoch), + ChunkVersion(1, 3, epoch, boost::none /* timestamp */), shard1.getName()); chunk3.setJumbo(true); @@ -286,15 +286,15 @@ TEST_F(RemoveShardTest, RemoveShardCompletion) { auto epoch = OID::gen(); ChunkType chunk1(NamespaceString("testDB.testColl"), ChunkRange(BSON("_id" << 0), BSON("_id" << 20)), - ChunkVersion(1, 1, epoch), + ChunkVersion(1, 1, epoch, boost::none /* timestamp */), shard1.getName()); ChunkType chunk2(NamespaceString("testDB.testColl"), ChunkRange(BSON("_id" << 21), BSON("_id" << 50)), - ChunkVersion(1, 2, epoch), + ChunkVersion(1, 2, epoch, boost::none /* timestamp */), shard1.getName()); ChunkType chunk3(NamespaceString("testDB.testColl"), ChunkRange(BSON("_id" << 51), BSON("_id" << 1000)), - ChunkVersion(1, 3, epoch), + ChunkVersion(1, 3, epoch, boost::none /* timestamp */), shard1.getName()); std::vector<ChunkType> chunks{chunk1, chunk2, chunk3}; diff --git a/src/mongo/db/s/config/sharding_catalog_manager_split_chunk_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_split_chunk_test.cpp index 24281e68389..dfe32cca0ac 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_split_chunk_test.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_split_chunk_test.cpp @@ -49,7 +49,7 @@ TEST_F(SplitChunkTest, SplitExistingChunkCorrectlyShouldSucceed) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -79,8 +79,10 @@ TEST_F(SplitChunkTest, SplitExistingChunkCorrectlyShouldSucceed) { ASSERT_EQ(collVersion, shardVersion); // Check for increment on mergedChunk's minor version - auto expectedShardVersion = ChunkVersion( - origVersion.majorVersion(), origVersion.minorVersion() + 2, origVersion.epoch()); + auto expectedShardVersion = ChunkVersion(origVersion.majorVersion(), + origVersion.minorVersion() + 2, + origVersion.epoch(), + origVersion.getTimestamp()); ASSERT_EQ(expectedShardVersion, shardVersion); ASSERT_EQ(shardVersion, collVersion); @@ -121,7 +123,7 @@ TEST_F(SplitChunkTest, MultipleSplitsOnExistingChunkShouldSucceed) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -202,7 +204,7 @@ TEST_F(SplitChunkTest, NewSplitShouldClaimHighestVersion) { auto collEpoch = OID::gen(); // set up first chunk - auto origVersion = ChunkVersion(1, 2, collEpoch); + auto origVersion = ChunkVersion(1, 2, collEpoch, boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -216,7 +218,7 @@ TEST_F(SplitChunkTest, NewSplitShouldClaimHighestVersion) { splitPoints.push_back(chunkSplitPoint); // set up second chunk (chunk2) - auto competingVersion = ChunkVersion(2, 1, collEpoch); + auto competingVersion = ChunkVersion(2, 1, collEpoch, boost::none /* timestamp */); chunk2.setVersion(competingVersion); chunk2.setShard(ShardId("shard0000")); chunk2.setMin(BSON("a" << 10)); @@ -260,7 +262,7 @@ TEST_F(SplitChunkTest, PreConditionFailErrors) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -289,7 +291,7 @@ TEST_F(SplitChunkTest, NonExisingNamespaceErrors) { ChunkType chunk; chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -316,7 +318,7 @@ TEST_F(SplitChunkTest, NonMatchingEpochsOfChunkAndRequestErrors) { ChunkType chunk; chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -344,7 +346,7 @@ TEST_F(SplitChunkTest, SplitPointsOutOfOrderShouldFail) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -371,7 +373,7 @@ TEST_F(SplitChunkTest, SplitPointsOutOfRangeAtMinShouldFail) { ChunkType chunk; chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -399,7 +401,7 @@ TEST_F(SplitChunkTest, SplitPointsOutOfRangeAtMaxShouldFail) { chunk.setName(OID::gen()); chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); @@ -426,7 +428,7 @@ TEST_F(SplitChunkTest, SplitPointsWithDollarPrefixShouldFail) { ChunkType chunk; chunk.setNS(kNamespace); - auto origVersion = ChunkVersion(1, 0, OID::gen()); + auto origVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); chunk.setVersion(origVersion); chunk.setShard(ShardId("shard0000")); diff --git a/src/mongo/db/s/metadata_manager_test.cpp b/src/mongo/db/s/metadata_manager_test.cpp index a2391f2631f..106172047ab 100644 --- a/src/mongo/db/s/metadata_manager_test.cpp +++ b/src/mongo/db/s/metadata_manager_test.cpp @@ -85,9 +85,11 @@ protected: nullptr, false, epoch, + boost::none /* timestamp */, boost::none, true, - {ChunkType{kNss, range, ChunkVersion(1, 0, epoch), kOtherShard}}); + {ChunkType{ + kNss, range, ChunkVersion(1, 0, epoch, boost::none /* timestamp */), kOtherShard}}); return CollectionMetadata(ChunkManager(kThisShard, DatabaseVersion(UUID::gen()), 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 40d63f60f3d..80380de60f8 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 @@ -154,11 +154,12 @@ protected: nullptr, false, epoch, + boost::none /* timestamp */, boost::none, true, {ChunkType{kNss, ChunkRange{BSON(kShardKey << MINKEY), BSON(kShardKey << MAXKEY)}, - ChunkVersion(1, 0, epoch), + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), ShardId("dummyShardId")}}); AutoGetDb autoDb(operationContext(), kNss.db(), MODE_IX); @@ -187,7 +188,7 @@ protected: MoveChunkRequest::appendAsCommand( &cmdBuilder, kNss, - ChunkVersion(1, 0, OID::gen()), + ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */), kConfigConnStr, kDonorConnStr.getSetName(), kRecipientConnStr.getSetName(), diff --git a/src/mongo/db/s/migration_util_test.cpp b/src/mongo/db/s/migration_util_test.cpp index 6f329a120e4..35838eb6953 100644 --- a/src/mongo/db/s/migration_util_test.cpp +++ b/src/mongo/db/s/migration_util_test.cpp @@ -547,7 +547,7 @@ TEST_F(SubmitRangeDeletionTaskTest, SucceedsIfFilteringMetadataUUIDMatchesTaskUU _mockCatalogCacheLoader->setDatabaseRefreshReturnValue(kDefaultDatabaseType); _mockCatalogCacheLoader->setCollectionRefreshReturnValue(coll); _mockCatalogCacheLoader->setChunkRefreshReturnValue( - makeChangedChunks(ChunkVersion(1, 0, kEpoch))); + makeChangedChunks(ChunkVersion(1, 0, kEpoch, boost::none /* timestamp */))); _mockCatalogClient->setCollections({coll}); forceShardFilteringMetadataRefresh(opCtx, kNss); @@ -575,7 +575,7 @@ TEST_F( _mockCatalogCacheLoader->setDatabaseRefreshReturnValue(kDefaultDatabaseType); _mockCatalogCacheLoader->setCollectionRefreshReturnValue(coll); _mockCatalogCacheLoader->setChunkRefreshReturnValue( - makeChangedChunks(ChunkVersion(1, 0, kEpoch))); + makeChangedChunks(ChunkVersion(1, 0, kEpoch, boost::none /* timestamp */))); _mockCatalogClient->setCollections({coll}); // The task should have been submitted successfully. @@ -607,7 +607,7 @@ TEST_F(SubmitRangeDeletionTaskTest, auto matchingColl = makeCollectionType(collectionUUID, kEpoch); _mockCatalogCacheLoader->setCollectionRefreshReturnValue(matchingColl); _mockCatalogCacheLoader->setChunkRefreshReturnValue( - makeChangedChunks(ChunkVersion(10, 0, kEpoch))); + makeChangedChunks(ChunkVersion(10, 0, kEpoch, boost::none /* timestamp */))); _mockCatalogClient->setCollections({matchingColl}); // The task should have been submitted successfully. @@ -627,7 +627,7 @@ TEST_F(SubmitRangeDeletionTaskTest, _mockCatalogCacheLoader->setDatabaseRefreshReturnValue(kDefaultDatabaseType); _mockCatalogCacheLoader->setCollectionRefreshReturnValue(staleColl); _mockCatalogCacheLoader->setChunkRefreshReturnValue( - makeChangedChunks(ChunkVersion(1, 0, staleEpoch))); + makeChangedChunks(ChunkVersion(1, 0, staleEpoch, boost::none /* timestamp */))); _mockCatalogClient->setCollections({staleColl}); forceShardFilteringMetadataRefresh(opCtx, kNss); @@ -644,7 +644,7 @@ TEST_F(SubmitRangeDeletionTaskTest, auto matchingColl = makeCollectionType(collectionUUID, kEpoch); _mockCatalogCacheLoader->setCollectionRefreshReturnValue(matchingColl); _mockCatalogCacheLoader->setChunkRefreshReturnValue( - makeChangedChunks(ChunkVersion(10, 0, kEpoch))); + makeChangedChunks(ChunkVersion(10, 0, kEpoch, boost::none /* timestamp */))); _mockCatalogClient->setCollections({matchingColl}); // The task should have been submitted successfully. @@ -670,7 +670,7 @@ TEST_F(SubmitRangeDeletionTaskTest, _mockCatalogCacheLoader->setDatabaseRefreshReturnValue(kDefaultDatabaseType); _mockCatalogCacheLoader->setCollectionRefreshReturnValue(otherColl); _mockCatalogCacheLoader->setChunkRefreshReturnValue( - makeChangedChunks(ChunkVersion(1, 0, otherEpoch))); + makeChangedChunks(ChunkVersion(1, 0, otherEpoch, boost::none /* timestamp */))); _mockCatalogClient->setCollections({otherColl}); // The task should not have been submitted, and the task's entry should have been removed from diff --git a/src/mongo/db/s/op_observer_sharding_test.cpp b/src/mongo/db/s/op_observer_sharding_test.cpp index bd4d1c03d7e..2e88a2de050 100644 --- a/src/mongo/db/s/op_observer_sharding_test.cpp +++ b/src/mongo/db/s/op_observer_sharding_test.cpp @@ -64,14 +64,17 @@ protected: static CollectionMetadata makeAMetadata(BSONObj const& keyPattern) { const OID epoch = OID::gen(); auto range = ChunkRange(BSON("key" << MINKEY), BSON("key" << MAXKEY)); - auto chunk = - ChunkType(kTestNss, std::move(range), ChunkVersion(1, 0, epoch), ShardId("other")); + auto chunk = ChunkType(kTestNss, + std::move(range), + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), + ShardId("other")); auto rt = RoutingTableHistory::makeNew(kTestNss, UUID::gen(), KeyPattern(keyPattern), nullptr, false, epoch, + boost::none /* timestamp */, boost::none, true, {std::move(chunk)}); diff --git a/src/mongo/db/s/range_deletion_util_test.cpp b/src/mongo/db/s/range_deletion_util_test.cpp index a3d2cdc568e..12b5e11546d 100644 --- a/src/mongo/db/s/range_deletion_util_test.cpp +++ b/src/mongo/db/s/range_deletion_util_test.cpp @@ -96,11 +96,12 @@ public: nullptr, false, epoch, + boost::none /* timestamp */, boost::none, true, {ChunkType{kNss, ChunkRange{BSON(kShardKey << MINKEY), BSON(kShardKey << MAXKEY)}, - ChunkVersion(1, 0, epoch), + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), ShardId("dummyShardId")}}); AutoGetDb autoDb(operationContext(), kNss.db(), MODE_IX); diff --git a/src/mongo/db/s/resharding/resharding_coordinator_test.cpp b/src/mongo/db/s/resharding/resharding_coordinator_test.cpp index 0b8eda09f7d..7484e570aac 100644 --- a/src/mongo/db/s/resharding/resharding_coordinator_test.cpp +++ b/src/mongo/db/s/resharding/resharding_coordinator_test.cpp @@ -157,7 +157,7 @@ protected: _newShardKey.isShardKey(shardKey.toBSON()) ? _newChunkRanges : _oldChunkRanges; // Create two chunks, one on each shard with the given namespace and epoch - ChunkVersion version(1, 0, epoch); + ChunkVersion version(1, 0, epoch, boost::none /* timestamp */); ChunkType chunk1(nss, chunkRanges[0], version, ShardId("shard0000")); chunk1.setName(ids[0]); ChunkType chunk2(nss, chunkRanges[1], version, ShardId("shard0001")); @@ -201,7 +201,10 @@ protected: client.insert(CollectionType::ConfigNS.ns(), originalNssCatalogEntry.toBSON()); auto tempNssCatalogEntry = resharding::createTempReshardingCollectionType( - opCtx, coordinatorDoc, ChunkVersion(1, 1, OID::gen()), BSONObj()); + opCtx, + coordinatorDoc, + ChunkVersion(1, 1, OID::gen(), boost::none /* timestamp */), + BSONObj()); client.insert(CollectionType::ConfigNS.ns(), tempNssCatalogEntry.toBSON()); return coordinatorDoc; @@ -440,7 +443,10 @@ protected: if (expectedCoordinatorDoc.getState() < CoordinatorStateEnum::kCommitted || expectedCoordinatorDoc.getState() == CoordinatorStateEnum::kError) { tempCollType = resharding::createTempReshardingCollectionType( - opCtx, expectedCoordinatorDoc, ChunkVersion(1, 1, OID::gen()), BSONObj()); + opCtx, + expectedCoordinatorDoc, + ChunkVersion(1, 1, OID::gen(), boost::none /* timestamp */), + BSONObj()); } readTemporaryCollectionCatalogEntryAndAssertReshardingFieldsMatchExpected(opCtx, diff --git a/src/mongo/db/s/resharding/resharding_donor_recipient_common_test.cpp b/src/mongo/db/s/resharding/resharding_donor_recipient_common_test.cpp index fdb30128ea3..3894b722254 100644 --- a/src/mongo/db/s/resharding/resharding_donor_recipient_common_test.cpp +++ b/src/mongo/db/s/resharding/resharding_donor_recipient_common_test.cpp @@ -94,20 +94,24 @@ protected: const UUID& uuid, const OID& epoch) { auto range = ChunkRange(BSON(shardKey << MINKEY), BSON(shardKey << MAXKEY)); - auto chunk = ChunkType(nss, std::move(range), ChunkVersion(1, 0, epoch), kShardTwo); - ChunkManager cm( - kShardOne, - DatabaseVersion(uuid), - makeStandaloneRoutingTableHistory(RoutingTableHistory::makeNew(nss, - uuid, - shardKeyPattern, - nullptr, - false, - epoch, - boost::none, - true, - {std::move(chunk)})), - boost::none); + auto chunk = ChunkType(nss, + std::move(range), + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), + kShardTwo); + ChunkManager cm(kShardOne, + DatabaseVersion(uuid), + makeStandaloneRoutingTableHistory( + RoutingTableHistory::makeNew(nss, + uuid, + shardKeyPattern, + nullptr, + false, + epoch, + boost::none /* timestamp */, + boost::none, + true, + {std::move(chunk)})), + boost::none); if (!OperationShardingState::isOperationVersioned(opCtx)) { const auto version = cm.getVersion(kShardOne); diff --git a/src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp b/src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp index 579ba2cfdd5..341e29343f5 100644 --- a/src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp +++ b/src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp @@ -148,11 +148,11 @@ public: std::vector<ChunkType> chunks = { ChunkType{kCrudNs, ChunkRange{BSON(kOriginalShardKey << MINKEY), BSON(kOriginalShardKey << 0)}, - ChunkVersion(1, 0, epoch), + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), kOtherShardId}, ChunkType{kCrudNs, ChunkRange{BSON(kOriginalShardKey << 0), BSON(kOriginalShardKey << MAXKEY)}, - ChunkVersion(1, 0, epoch), + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), _sourceId.getShardId()}}; auto rt = RoutingTableHistory::makeNew(kCrudNs, @@ -161,6 +161,7 @@ public: nullptr, false, epoch, + boost::none /* timestamp */, boost::none, false, chunks); diff --git a/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp b/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp index b85dd36f1d2..beabdd98639 100644 --- a/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp +++ b/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp @@ -154,7 +154,7 @@ public: return std::vector<BSONObj>{coll.toBSON()}; }()); expectFindSendBSONObjVector(kConfigHostAndPort, [&]() { - ChunkVersion version(1, 0, epoch); + ChunkVersion version(1, 0, epoch, boost::none /* timestamp */); ChunkType chunk(tempNss, {skey.getKeyPattern().globalMin(), skey.getKeyPattern().globalMax()}, diff --git a/src/mongo/db/s/resharding_destined_recipient_test.cpp b/src/mongo/db/s/resharding_destined_recipient_test.cpp index ab9a81c876f..78108531fbb 100644 --- a/src/mongo/db/s/resharding_destined_recipient_test.cpp +++ b/src/mongo/db/s/resharding_destined_recipient_test.cpp @@ -157,10 +157,16 @@ public: protected: std::vector<ChunkType> createChunks(const OID& epoch, const std::string& shardKey) { auto range1 = ChunkRange(BSON(shardKey << MINKEY), BSON(shardKey << 5)); - ChunkType chunk1(kNss, range1, ChunkVersion(1, 0, epoch), kShardList[0].getName()); + ChunkType chunk1(kNss, + range1, + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), + kShardList[0].getName()); auto range2 = ChunkRange(BSON(shardKey << 5), BSON(shardKey << MAXKEY)); - ChunkType chunk2(kNss, range2, ChunkVersion(1, 0, epoch), kShardList[1].getName()); + ChunkType chunk2(kNss, + range2, + ChunkVersion(1, 0, epoch, boost::none /* timestamp */), + kShardList[1].getName()); return {chunk1, chunk2}; } @@ -182,7 +188,7 @@ protected: ReshardingEnv env(CollectionCatalog::get(opCtx)->lookupUUIDByNSS(opCtx, kNss).value()); env.destShard = kShardList[1].getName(); - env.version = ChunkVersion(1, 0, OID::gen()); + env.version = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */); env.dbVersion = DatabaseVersion(UUID::gen()); env.tempNss = diff --git a/src/mongo/db/s/shard_metadata_util_test.cpp b/src/mongo/db/s/shard_metadata_util_test.cpp index f3512d077bf..d20ba3be849 100644 --- a/src/mongo/db/s/shard_metadata_util_test.cpp +++ b/src/mongo/db/s/shard_metadata_util_test.cpp @@ -102,8 +102,8 @@ struct ShardMetadataUtilTest : public ShardServerTestFixture { << ChunkType::max(maxs[i]) << ChunkType::shard(kShardId.toString()) << ChunkType::lastmod(Date_t::fromMillisSinceEpoch(maxCollVersion.toLong()))); - chunks.push_back( - assertGet(ChunkType::fromShardBSON(shardChunk, maxCollVersion.epoch()))); + chunks.push_back(assertGet(ChunkType::fromShardBSON( + shardChunk, maxCollVersion.epoch(), maxCollVersion.getTimestamp()))); } return chunks; @@ -148,8 +148,8 @@ struct ShardMetadataUtilTest : public ShardServerTestFixture { ASSERT(cursor->more()); BSONObj queryResult = cursor->nextSafe(); - ChunkType foundChunk = - assertGet(ChunkType::fromShardBSON(queryResult, chunk.getVersion().epoch())); + ChunkType foundChunk = assertGet(ChunkType::fromShardBSON( + queryResult, chunk.getVersion().epoch(), chunk.getVersion().getTimestamp())); ASSERT_BSONOBJ_EQ(chunk.getMin(), foundChunk.getMin()); ASSERT_BSONOBJ_EQ(chunk.getMax(), foundChunk.getMax()); ASSERT_EQUALS(chunk.getShard(), foundChunk.getShard()); @@ -160,7 +160,7 @@ struct ShardMetadataUtilTest : public ShardServerTestFixture { } } - ChunkVersion maxCollVersion{0, 0, OID::gen()}; + ChunkVersion maxCollVersion{0, 0, OID::gen(), boost::none /* timestamp */}; const KeyPattern keyPattern{BSON("a" << 1)}; const BSONObj defaultCollation{BSON("locale" << "fr_CA")}; @@ -214,7 +214,8 @@ TEST_F(ShardMetadataUtilTest, PersistedRefreshSignalStartAndFinish) { ASSERT_EQUALS(state.epoch, maxCollVersion.epoch()); ASSERT_EQUALS(state.refreshing, true); - ASSERT_EQUALS(state.lastRefreshedCollectionVersion, ChunkVersion(0, 0, maxCollVersion.epoch())); + ASSERT_EQUALS(state.lastRefreshedCollectionVersion, + ChunkVersion(0, 0, maxCollVersion.epoch(), maxCollVersion.getTimestamp())); // Signal refresh finish ASSERT_OK(unsetPersistedRefreshFlags(operationContext(), kNss, maxCollVersion)); @@ -232,14 +233,15 @@ TEST_F(ShardMetadataUtilTest, WriteAndReadChunks) { checkChunks(kChunkMetadataNss, chunks); // read all the chunks - QueryAndSort allChunkDiff = - createShardChunkDiffQuery(ChunkVersion(0, 0, maxCollVersion.epoch())); + QueryAndSort allChunkDiff = createShardChunkDiffQuery( + ChunkVersion(0, 0, maxCollVersion.epoch(), boost::none /* timestamp */)); std::vector<ChunkType> readChunks = assertGet(readShardChunks(operationContext(), kNss, allChunkDiff.query, allChunkDiff.sort, boost::none, - maxCollVersion.epoch())); + maxCollVersion.epoch(), + maxCollVersion.getTimestamp())); for (auto chunkIt = chunks.begin(), readChunkIt = readChunks.begin(); chunkIt != chunks.end() && readChunkIt != readChunks.end(); ++chunkIt, ++readChunkIt) { @@ -253,7 +255,8 @@ TEST_F(ShardMetadataUtilTest, WriteAndReadChunks) { oneChunkDiff.query, oneChunkDiff.sort, boost::none, - maxCollVersion.epoch())); + maxCollVersion.epoch(), + maxCollVersion.getTimestamp())); ASSERT(readChunks.size() == 1); ASSERT_BSONOBJ_EQ(chunks.back().toShardBSON(), readChunks.front().toShardBSON()); @@ -283,8 +286,8 @@ TEST_F(ShardMetadataUtilTest, UpdateWithWriteNewChunks) { } splitChunkOneBuilder.append(ChunkType::shard(), lastChunk.getShard().toString()); collVersion.appendLegacyWithField(&splitChunkOneBuilder, ChunkType::lastmod()); - ChunkType splitChunkOne = - assertGet(ChunkType::fromShardBSON(splitChunkOneBuilder.obj(), collVersion.epoch())); + ChunkType splitChunkOne = assertGet(ChunkType::fromShardBSON( + splitChunkOneBuilder.obj(), collVersion.epoch(), collVersion.getTimestamp())); newChunks.push_back(splitChunkOne); collVersion.incMajor(); // chunk split and moved @@ -297,8 +300,8 @@ TEST_F(ShardMetadataUtilTest, UpdateWithWriteNewChunks) { splitChunkTwoMovedBuilder.append(ChunkType::max(), lastChunk.getMax()); splitChunkTwoMovedBuilder.append(ChunkType::shard(), "altShard"); collVersion.appendLegacyWithField(&splitChunkTwoMovedBuilder, ChunkType::lastmod()); - ChunkType splitChunkTwoMoved = - assertGet(ChunkType::fromShardBSON(splitChunkTwoMovedBuilder.obj(), collVersion.epoch())); + ChunkType splitChunkTwoMoved = assertGet(ChunkType::fromShardBSON( + splitChunkTwoMovedBuilder.obj(), collVersion.epoch(), collVersion.getTimestamp())); newChunks.push_back(splitChunkTwoMoved); collVersion.incMinor(); // bump control chunk version 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 444093c8078..fbe67ed204f 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 @@ -193,7 +193,7 @@ CollectionType ShardServerCatalogCacheLoaderTest::makeCollectionType( } vector<ChunkType> ShardServerCatalogCacheLoaderTest::setUpChunkLoaderWithFiveChunks() { - ChunkVersion collectionVersion(1, 0, OID::gen()); + ChunkVersion collectionVersion(1, 0, OID::gen(), boost::none /* timestamp */); CollectionType collectionType = makeCollectionType(collectionVersion); vector<ChunkType> chunks = makeFiveChunks(collectionVersion); @@ -360,7 +360,7 @@ TEST_F(ShardServerCatalogCacheLoaderTest, PrimaryLoadFromShardedAndFindNewEpoch) // Then refresh again and find that the collection has been dropped and recreated. - ChunkVersion collVersionWithNewEpoch(1, 0, OID::gen()); + ChunkVersion collVersionWithNewEpoch(1, 0, OID::gen(), boost::none /* timestamp */); CollectionType collectionTypeWithNewEpoch = makeCollectionType(collVersionWithNewEpoch); vector<ChunkType> chunksWithNewEpoch = makeFiveChunks(collVersionWithNewEpoch); _remoteLoaderMock->setCollectionRefreshReturnValue(collectionTypeWithNewEpoch); @@ -389,7 +389,7 @@ TEST_F(ShardServerCatalogCacheLoaderTest, PrimaryLoadFromShardedAndFindMixedChun CollectionType originalCollectionType = makeCollectionType(chunks.back().getVersion()); - ChunkVersion collVersionWithNewEpoch(1, 0, OID::gen()); + ChunkVersion collVersionWithNewEpoch(1, 0, OID::gen(), boost::none /* timestamp */); CollectionType collectionTypeWithNewEpoch = makeCollectionType(collVersionWithNewEpoch); vector<ChunkType> chunksWithNewEpoch = makeFiveChunks(collVersionWithNewEpoch); vector<ChunkType> mixedChunks; |