diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2023-01-30 16:35:56 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-01-31 02:23:21 +0000 |
commit | 8aca0afe03fd7f9c3041463a470c7758e3c2a73e (patch) | |
tree | 956dab3499b3968fa24bbb8fa6925eea24f7098b /src/mongo/db/s/session_catalog_migration_source_test.cpp | |
parent | 1b0c8231c24f550fc24453c3ce220eb58ba83663 (diff) | |
download | mongo-8aca0afe03fd7f9c3041463a470c7758e3c2a73e.tar.gz |
SERVER-73238 Move some shard_key_pattern query methods out of 'grid'
Diffstat (limited to 'src/mongo/db/s/session_catalog_migration_source_test.cpp')
-rw-r--r-- | src/mongo/db/s/session_catalog_migration_source_test.cpp | 105 |
1 files changed, 103 insertions, 2 deletions
diff --git a/src/mongo/db/s/session_catalog_migration_source_test.cpp b/src/mongo/db/s/session_catalog_migration_source_test.cpp index f3a3e8d5154..040c438c13c 100644 --- a/src/mongo/db/s/session_catalog_migration_source_test.cpp +++ b/src/mongo/db/s/session_catalog_migration_source_test.cpp @@ -27,8 +27,6 @@ * it in the license file. */ -#include "mongo/platform/basic.h" - #include <algorithm> #include <utility> #include <vector> @@ -141,6 +139,31 @@ repl::OplogEntry makeOplogEntry( needsRetryImage); } +repl::OplogEntry makeOplogEntry(repl::OpTime opTime, + repl::OpTypeEnum opType, + BSONObj oField, + boost::optional<BSONObj> o2Field = boost::none) { + return { + repl::DurableOplogEntry(opTime, // optime + opType, // opType + kNs, // namespace + boost::none, // uuid + boost::none, // fromMigrate + repl::OplogEntry::kOplogVersion, // version + oField, // o + o2Field, // o2 + {}, // sessionInfo + boost::none, // upsert + Date_t(), // wall clock time + {}, // statement ids + boost::none, // optime of previous write within same transaction + boost::none, // pre-image optime + boost::none, // post-image optime + boost::none, // ShardId of resharding recipient + boost::none, // _id + boost::none)}; // needsRetryImage +} + repl::OplogEntry makeSentinelOplogEntry(const LogicalSessionId& sessionId, const TxnNumber& txnNumber, Date_t wallClockTime) { @@ -3034,5 +3057,83 @@ TEST_F(SessionCatalogMigrationSourceTest, ShouldSkipOplogEntryWorksWithRewritten rewrittenEntryOne, shardKeyPattern, kNestedChunkRange)); } +TEST_F(SessionCatalogMigrationSourceTest, ExtractShardKeyFromOplogUnnested) { + // + // Unnested ShardKeyPatterns from oplog entries with CRUD operation + // + + ShardKeyPattern pattern(BSON("a" << 1)); + auto deleteOplog = makeOplogEntry(repl::OpTime(Timestamp(50, 10), 1), // optime + repl::OpTypeEnum::kDelete, // op type + BSON("_id" << 1 << "a" << 5)); // o + auto insertOplog = makeOplogEntry(repl::OpTime(Timestamp(60, 10), 1), // optime + repl::OpTypeEnum::kInsert, // op type + BSON("_id" << 2 << "a" << 6)); // o + auto updateOplog = makeOplogEntry(repl::OpTime(Timestamp(70, 10), 1), // optime + repl::OpTypeEnum::kUpdate, // op type + BSON("_id" << 3), // o + BSON("_id" << 3 << "a" << 7)); // o2 + + ASSERT_BSONOBJ_EQ( + SessionCatalogMigrationSource::extractShardKeyFromOplogEntry(pattern, deleteOplog), + fromjson("{a: 5}")); + ASSERT_BSONOBJ_EQ( + SessionCatalogMigrationSource::extractShardKeyFromOplogEntry(pattern, insertOplog), + fromjson("{a: 6}")); + ASSERT_BSONOBJ_EQ( + SessionCatalogMigrationSource::extractShardKeyFromOplogEntry(pattern, updateOplog), + fromjson("{a: 7}")); +} + +TEST_F(SessionCatalogMigrationSourceTest, ExtractShardKeyFromOplogNested) { + // + // Nested ShardKeyPatterns from oplog entries with CRUD operation + // + + ShardKeyPattern pattern(BSON("a.b" << 1)); + auto deleteOplog = makeOplogEntry(repl::OpTime(Timestamp(50, 10), 1), // optime + repl::OpTypeEnum::kDelete, // op type + BSON("_id" << 1 << "a.b" << 5)); // o + auto insertOplog = makeOplogEntry(repl::OpTime(Timestamp(60, 10), 1), // optime + repl::OpTypeEnum::kInsert, // op type + BSON("_id" << 2 << "a" << BSON("b" << 6))); // o + auto updateOplog = makeOplogEntry(repl::OpTime(Timestamp(70, 10), 1), // optime + repl::OpTypeEnum::kUpdate, // op type + BSON("_id" << 3), // o + BSON("_id" << 3 << "a.b" << 7)); // o2 + + ASSERT_BSONOBJ_EQ( + SessionCatalogMigrationSource::extractShardKeyFromOplogEntry(pattern, deleteOplog), + fromjson("{'a.b': 5}")); + ASSERT_BSONOBJ_EQ( + SessionCatalogMigrationSource::extractShardKeyFromOplogEntry(pattern, insertOplog), + fromjson("{'a.b': 6}")); + ASSERT_BSONOBJ_EQ( + SessionCatalogMigrationSource::extractShardKeyFromOplogEntry(pattern, updateOplog), + fromjson("{'a.b': 7}")); +} + +TEST_F(SessionCatalogMigrationSourceTest, ExtractShardKeyFromOplogNonCRUD) { + // + // Oplogs with non-CRUD op types + // + + ShardKeyPattern pattern(BSON("a.b" << 1)); + auto noopOplog = makeOplogEntry(repl::OpTime(Timestamp(50, 10), 1), // optime + repl::OpTypeEnum::kNoop, // op type + BSON("_id" << 1 << "a.b" << 5)); // o + auto commandOplog = makeOplogEntry(repl::OpTime(Timestamp(60, 10), 1), // optime + repl::OpTypeEnum::kCommand, // op type + BSON("create" + << "c")); // o + + ASSERT_BSONOBJ_EQ( + SessionCatalogMigrationSource::extractShardKeyFromOplogEntry(pattern, noopOplog), + BSONObj()); + ASSERT_BSONOBJ_EQ( + SessionCatalogMigrationSource::extractShardKeyFromOplogEntry(pattern, commandOplog), + BSONObj()); +} + } // namespace } // namespace mongo |