summaryrefslogtreecommitdiff
path: root/jstests/sharding/write_transactions_during_migration.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/write_transactions_during_migration.js')
-rw-r--r--jstests/sharding/write_transactions_during_migration.js299
1 files changed, 149 insertions, 150 deletions
diff --git a/jstests/sharding/write_transactions_during_migration.js b/jstests/sharding/write_transactions_during_migration.js
index d8d86bd4516..9b043eb0f1a 100644
--- a/jstests/sharding/write_transactions_during_migration.js
+++ b/jstests/sharding/write_transactions_during_migration.js
@@ -13,159 +13,158 @@ load('./jstests/libs/chunk_manipulation_util.js');
* 4. Retry writes and confirm that writes are not duplicated.
*/
(function() {
- "use strict";
-
- load("jstests/libs/retryable_writes_util.js");
-
- if (!RetryableWritesUtil.storageEngineSupportsRetryableWrites(jsTest.options().storageEngine)) {
- jsTestLog("Retryable writes are not supported, skipping test");
- return;
- }
-
- var staticMongod = MongoRunner.runMongod({}); // For startParallelOps.
-
- var st = new ShardingTest({shards: {rs0: {nodes: 1}, rs1: {nodes: 1}}});
- st.adminCommand({enableSharding: 'test'});
- st.ensurePrimaryShard('test', st.shard0.shardName);
- st.adminCommand({shardCollection: 'test.user', key: {x: 1}});
- assert.commandWorked(st.s.adminCommand({split: 'test.user', middle: {x: 0}}));
-
- pauseMoveChunkAtStep(st.shard0, moveChunkStepNames.reachedSteadyState);
- var joinMoveChunk =
- moveChunkParallel(staticMongod, st.s.host, {x: 0}, null, 'test.user', st.shard1.shardName);
-
- waitForMoveChunkStep(st.shard0, moveChunkStepNames.reachedSteadyState);
-
- const insertCmd = {
- insert: 'user',
- documents: [
- // For findAndModify not touching chunk being migrated.
- {x: -30},
- // For changing doc to become owned by chunk being migrated.
- {x: -20},
- {x: -20},
- // For basic insert.
- {x: 10},
- // For changing doc to become owned by another chunk not being migrated.
- {x: 20},
- {x: 20},
- // For basic findAndModify.
- {x: 30}
- ],
- ordered: false,
- lsid: {id: UUID()},
- txnNumber: NumberLong(34),
- };
-
- var testDB = st.getDB('test');
- const insertResult = assert.commandWorked(testDB.runCommand(insertCmd));
-
- const findAndModCmd = {
- findAndModify: 'user',
- query: {x: 30},
- update: {$inc: {y: 1}},
- new: true,
- upsert: true,
- lsid: {id: UUID()},
- txnNumber: NumberLong(37),
- };
-
- const findAndModifyResult = assert.commandWorked(testDB.runCommand(findAndModCmd));
-
- const changeDocToChunkNotMigrated = {
- findAndModify: 'user',
- query: {x: 20},
- update: {$set: {x: -120}, $inc: {y: 1}},
- new: false,
- upsert: true,
- lsid: {id: UUID()},
- txnNumber: NumberLong(37),
- };
-
- const changeDocToNotMigratedResult =
- assert.commandWorked(testDB.runCommand(changeDocToChunkNotMigrated));
-
- const changeDocToChunkMigrated = {
- findAndModify: 'user',
- query: {x: -20},
- update: {$set: {x: 120}, $inc: {y: 1}},
- new: false,
- upsert: true,
- lsid: {id: UUID()},
- txnNumber: NumberLong(37),
- };
-
- const changeDocToMigratedResult =
- assert.commandWorked(testDB.runCommand(changeDocToChunkMigrated));
-
- const findAndModifyNotMigrated = {
- findAndModify: 'user',
- query: {x: -30},
- update: {$inc: {y: 1}},
- new: false,
- upsert: true,
- lsid: {id: UUID()},
- txnNumber: NumberLong(37),
- };
-
- const findAndModifyNotMigratedResult =
- assert.commandWorked(testDB.runCommand(findAndModifyNotMigrated));
-
- unpauseMoveChunkAtStep(st.shard0, moveChunkStepNames.reachedSteadyState);
- joinMoveChunk();
-
- ///////////////////////////////////////////////////////////////////////////////////////////////
- // Retry phase
-
- var insertRetryResult = assert.commandWorked(testDB.runCommand(insertCmd));
-
- assert.eq(insertResult.ok, insertRetryResult.ok);
- assert.eq(insertResult.n, insertRetryResult.n);
- assert.eq(insertResult.writeErrors, insertRetryResult.writeErrors);
- assert.eq(insertResult.writeConcernErrors, insertRetryResult.writeConcernErrors);
-
- assert.eq(1, testDB.user.find({x: 10}).itcount());
- assert.eq(1, testDB.user.find({x: 30}).itcount());
-
- var findAndModifyRetryResult = assert.commandWorked(testDB.runCommand(findAndModCmd));
-
- assert.eq(findAndModifyResult.ok, findAndModifyRetryResult.ok);
- assert.eq(findAndModifyResult.value, findAndModifyRetryResult.value);
- assert.eq(findAndModifyResult.lastErrorObject, findAndModifyRetryResult.lastErrorObject);
-
- assert.eq(1, testDB.user.findOne({x: 30}).y);
-
- let changeDocToNotMigratedRetryResult =
- assert.commandWorked(testDB.runCommand(changeDocToChunkNotMigrated));
-
- assert.eq(changeDocToNotMigratedResult.ok, changeDocToNotMigratedRetryResult.ok);
- assert.eq(changeDocToNotMigratedResult.value, changeDocToNotMigratedRetryResult.value);
- assert.eq(changeDocToNotMigratedResult.lastErrorObject,
- changeDocToNotMigratedRetryResult.lastErrorObject);
-
- assert.eq(1, testDB.user.find({x: -120}).itcount());
-
- let changeDocToMigratedRetryResult =
- assert.commandWorked(testDB.runCommand(changeDocToChunkMigrated));
-
- assert.eq(changeDocToMigratedResult.ok, changeDocToMigratedRetryResult.ok);
- assert.eq(changeDocToMigratedResult.value, changeDocToMigratedRetryResult.value);
- assert.eq(changeDocToMigratedResult.lastErrorObject,
- changeDocToMigratedRetryResult.lastErrorObject);
-
- assert.eq(1, testDB.user.find({x: 120}).itcount());
+"use strict";
+
+load("jstests/libs/retryable_writes_util.js");
+
+if (!RetryableWritesUtil.storageEngineSupportsRetryableWrites(jsTest.options().storageEngine)) {
+ jsTestLog("Retryable writes are not supported, skipping test");
+ return;
+}
+
+var staticMongod = MongoRunner.runMongod({}); // For startParallelOps.
+
+var st = new ShardingTest({shards: {rs0: {nodes: 1}, rs1: {nodes: 1}}});
+st.adminCommand({enableSharding: 'test'});
+st.ensurePrimaryShard('test', st.shard0.shardName);
+st.adminCommand({shardCollection: 'test.user', key: {x: 1}});
+assert.commandWorked(st.s.adminCommand({split: 'test.user', middle: {x: 0}}));
+
+pauseMoveChunkAtStep(st.shard0, moveChunkStepNames.reachedSteadyState);
+var joinMoveChunk =
+ moveChunkParallel(staticMongod, st.s.host, {x: 0}, null, 'test.user', st.shard1.shardName);
+
+waitForMoveChunkStep(st.shard0, moveChunkStepNames.reachedSteadyState);
+
+const insertCmd = {
+ insert: 'user',
+ documents: [
+ // For findAndModify not touching chunk being migrated.
+ {x: -30},
+ // For changing doc to become owned by chunk being migrated.
+ {x: -20},
+ {x: -20},
+ // For basic insert.
+ {x: 10},
+ // For changing doc to become owned by another chunk not being migrated.
+ {x: 20},
+ {x: 20},
+ // For basic findAndModify.
+ {x: 30}
+ ],
+ ordered: false,
+ lsid: {id: UUID()},
+ txnNumber: NumberLong(34),
+};
+
+var testDB = st.getDB('test');
+const insertResult = assert.commandWorked(testDB.runCommand(insertCmd));
+
+const findAndModCmd = {
+ findAndModify: 'user',
+ query: {x: 30},
+ update: {$inc: {y: 1}},
+ new: true,
+ upsert: true,
+ lsid: {id: UUID()},
+ txnNumber: NumberLong(37),
+};
+
+const findAndModifyResult = assert.commandWorked(testDB.runCommand(findAndModCmd));
+
+const changeDocToChunkNotMigrated = {
+ findAndModify: 'user',
+ query: {x: 20},
+ update: {$set: {x: -120}, $inc: {y: 1}},
+ new: false,
+ upsert: true,
+ lsid: {id: UUID()},
+ txnNumber: NumberLong(37),
+};
+
+const changeDocToNotMigratedResult =
+ assert.commandWorked(testDB.runCommand(changeDocToChunkNotMigrated));
+
+const changeDocToChunkMigrated = {
+ findAndModify: 'user',
+ query: {x: -20},
+ update: {$set: {x: 120}, $inc: {y: 1}},
+ new: false,
+ upsert: true,
+ lsid: {id: UUID()},
+ txnNumber: NumberLong(37),
+};
+
+const changeDocToMigratedResult = assert.commandWorked(testDB.runCommand(changeDocToChunkMigrated));
+
+const findAndModifyNotMigrated = {
+ findAndModify: 'user',
+ query: {x: -30},
+ update: {$inc: {y: 1}},
+ new: false,
+ upsert: true,
+ lsid: {id: UUID()},
+ txnNumber: NumberLong(37),
+};
+
+const findAndModifyNotMigratedResult =
+ assert.commandWorked(testDB.runCommand(findAndModifyNotMigrated));
+
+unpauseMoveChunkAtStep(st.shard0, moveChunkStepNames.reachedSteadyState);
+joinMoveChunk();
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// Retry phase
+
+var insertRetryResult = assert.commandWorked(testDB.runCommand(insertCmd));
+
+assert.eq(insertResult.ok, insertRetryResult.ok);
+assert.eq(insertResult.n, insertRetryResult.n);
+assert.eq(insertResult.writeErrors, insertRetryResult.writeErrors);
+assert.eq(insertResult.writeConcernErrors, insertRetryResult.writeConcernErrors);
+
+assert.eq(1, testDB.user.find({x: 10}).itcount());
+assert.eq(1, testDB.user.find({x: 30}).itcount());
+
+var findAndModifyRetryResult = assert.commandWorked(testDB.runCommand(findAndModCmd));
+
+assert.eq(findAndModifyResult.ok, findAndModifyRetryResult.ok);
+assert.eq(findAndModifyResult.value, findAndModifyRetryResult.value);
+assert.eq(findAndModifyResult.lastErrorObject, findAndModifyRetryResult.lastErrorObject);
+
+assert.eq(1, testDB.user.findOne({x: 30}).y);
+
+let changeDocToNotMigratedRetryResult =
+ assert.commandWorked(testDB.runCommand(changeDocToChunkNotMigrated));
+
+assert.eq(changeDocToNotMigratedResult.ok, changeDocToNotMigratedRetryResult.ok);
+assert.eq(changeDocToNotMigratedResult.value, changeDocToNotMigratedRetryResult.value);
+assert.eq(changeDocToNotMigratedResult.lastErrorObject,
+ changeDocToNotMigratedRetryResult.lastErrorObject);
+
+assert.eq(1, testDB.user.find({x: -120}).itcount());
+
+let changeDocToMigratedRetryResult =
+ assert.commandWorked(testDB.runCommand(changeDocToChunkMigrated));
+
+assert.eq(changeDocToMigratedResult.ok, changeDocToMigratedRetryResult.ok);
+assert.eq(changeDocToMigratedResult.value, changeDocToMigratedRetryResult.value);
+assert.eq(changeDocToMigratedResult.lastErrorObject,
+ changeDocToMigratedRetryResult.lastErrorObject);
+
+assert.eq(1, testDB.user.find({x: 120}).itcount());
- let findAndModifyNotMigratedRetryResult =
- assert.commandWorked(testDB.runCommand(findAndModifyNotMigrated));
+let findAndModifyNotMigratedRetryResult =
+ assert.commandWorked(testDB.runCommand(findAndModifyNotMigrated));
- assert.eq(findAndModifyNotMigratedResult.ok, findAndModifyNotMigratedRetryResult.ok);
- assert.eq(findAndModifyNotMigratedResult.value, findAndModifyNotMigratedRetryResult.value);
- assert.eq(findAndModifyNotMigratedResult.lastErrorObject,
- findAndModifyNotMigratedRetryResult.lastErrorObject);
+assert.eq(findAndModifyNotMigratedResult.ok, findAndModifyNotMigratedRetryResult.ok);
+assert.eq(findAndModifyNotMigratedResult.value, findAndModifyNotMigratedRetryResult.value);
+assert.eq(findAndModifyNotMigratedResult.lastErrorObject,
+ findAndModifyNotMigratedRetryResult.lastErrorObject);
- assert.eq(1, testDB.user.findOne({x: -30}).y);
+assert.eq(1, testDB.user.findOne({x: -30}).y);
- st.stop();
+st.stop();
- MongoRunner.stopMongod(staticMongod);
+MongoRunner.stopMongod(staticMongod);
})();