diff options
author | kauboy26 <vishnu.kaushik@mongodb.com> | 2023-05-15 16:12:20 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-05-15 21:09:51 +0000 |
commit | 8564269159e3c4391c676eee5bdb110e4c0367d1 (patch) | |
tree | 89e56b1422fe9628e1ba3b9721150019ed5e5fe3 /src/mongo/db/bulk_write_shard_test.cpp | |
parent | b3d9e271fa9ed5234972959d4e616cffc3d0347e (diff) | |
download | mongo-8564269159e3c4391c676eee5bdb110e4c0367d1.tar.gz |
SERVER-75202 Add ordered bulk write update test and delete test for sharded mongod
Diffstat (limited to 'src/mongo/db/bulk_write_shard_test.cpp')
-rw-r--r-- | src/mongo/db/bulk_write_shard_test.cpp | 72 |
1 files changed, 47 insertions, 25 deletions
diff --git a/src/mongo/db/bulk_write_shard_test.cpp b/src/mongo/db/bulk_write_shard_test.cpp index b9162b73913..c0ef402a428 100644 --- a/src/mongo/db/bulk_write_shard_test.cpp +++ b/src/mongo/db/bulk_write_shard_test.cpp @@ -454,31 +454,53 @@ TEST_F(BulkWriteShardTest, InsertsAndUpdatesFailUnordered) { OperationShardingState::get(opCtx()).resetShardingOperationFailedStatus(); } -// TODO (SERVER-75202): Re-enable this test & write a test for deletes. -// Unordered updates into different collections where some fail. -// TEST_F(BulkWriteShardTest, UpdatesFailUnordered) { -// BulkWriteCommandRequest request( -// { -// BulkWriteUpdateOp(1, BSON("x" << BSON("$gt" << 0)), BSON("x" << -99)), -// BulkWriteUpdateOp(0, BSON("x" << BSON("$gt" << 0)), BSON("x" << -9)), -// BulkWriteInsertOp(1, BSON("x" << -1))}, -// {nsInfoWithShardDatabaseVersions( -// nssShardedCollection1, dbVersionTestDb, incorrectShardVersion), -// nsInfoWithShardDatabaseVersions( -// nssShardedCollection2, dbVersionTestDb, shardVersionShardedCollection2)}); - -// request.setOrdered(false); - -// const auto& [replyItems, retriedStmtIds, numErrors] = -// bulk_write::performWrites(opCtx(), request); - -// ASSERT_EQ(2, replyItems.size()); -// ASSERT_OK(replyItems.front().getStatus()); -// ASSERT_EQ(ErrorCodes::StaleConfig, replyItems[1].getStatus().code()); -// ASSERT_EQ(1, numErrors); - -// OperationShardingState::get(opCtx()).resetShardingOperationFailedStatus(); -// } +// Ordered updates into different collections where some fail. +TEST_F(BulkWriteShardTest, UpdatesFailOrdered) { + BulkWriteCommandRequest request( + {BulkWriteUpdateOp(1, BSON("x" << BSON("$gt" << 0)), BSON("x" << -99)), + BulkWriteUpdateOp(0, BSON("x" << BSON("$gt" << 0)), BSON("x" << -9)), + BulkWriteInsertOp(1, BSON("x" << -1))}, + {nsInfoWithShardDatabaseVersions( + nssShardedCollection1, dbVersionTestDb1, incorrectShardVersion), + nsInfoWithShardDatabaseVersions( + nssShardedCollection2, dbVersionTestDb2, shardVersionShardedCollection2)}); + + request.setOrdered(true); + + const auto& [replyItems, retriedStmtIds, numErrors] = + bulk_write::performWrites(opCtx(), request); + + ASSERT_EQ(2, replyItems.size()); + ASSERT_OK(replyItems.front().getStatus()); + ASSERT_EQ(ErrorCodes::StaleConfig, replyItems[1].getStatus().code()); + ASSERT_EQ(1, numErrors); + + OperationShardingState::get(opCtx()).resetShardingOperationFailedStatus(); +} + +// Ordered deletes into different collections where some fail. +TEST_F(BulkWriteShardTest, DeletesFailOrdered) { + BulkWriteCommandRequest request( + {BulkWriteInsertOp(1, BSON("x" << -1)), + BulkWriteDeleteOp(0, BSON("x" << BSON("$gt" << 0))), + BulkWriteInsertOp(1, BSON("x" << -1))}, + {nsInfoWithShardDatabaseVersions( + nssShardedCollection1, dbVersionTestDb1, incorrectShardVersion), + nsInfoWithShardDatabaseVersions( + nssShardedCollection2, dbVersionTestDb2, shardVersionShardedCollection2)}); + + request.setOrdered(true); + + const auto& [replyItems, retriedStmtIds, numErrors] = + bulk_write::performWrites(opCtx(), request); + + ASSERT_EQ(2, replyItems.size()); + ASSERT_OK(replyItems.front().getStatus()); + ASSERT_EQ(ErrorCodes::StaleConfig, replyItems[1].getStatus().code()); + ASSERT_EQ(1, numErrors); + + OperationShardingState::get(opCtx()).resetShardingOperationFailedStatus(); +} // After the first insert fails due to an incorrect database version, the rest // of the writes are skipped when operations are ordered. |