/** Tests that a background index will be successfully * replicated to a secondary when the indexed collection * is renamed. */ (function() { "use strict"; // Bring up a 2 node replset. var name = "bg_index_rename"; var rst = new ReplSetTest({name: name, nodes: 3}); rst.startSet(); rst.initiate(); // Create and populate a collection. var primary = rst.getPrimary(); var coll = primary.getCollection("test.foo"); var adminDB = primary.getDB("admin"); for (var i = 0; i < 100; i++) { assert.writeOK(coll.insert({_id: i, x: i * 3, str: "hello world"})); } // Add a background index. coll.ensureIndex({x: 1}, {background: true}); // Rename the collection. assert.commandWorked( adminDB.runCommand({renameCollection: "test.foo", to: "bar.test", dropTarget: true}), "Call to renameCollection failed."); // Await replication. rst.awaitReplication(); // Step down the primary. try { adminDB.runCommand({replSetStepDown: 60, force: true}); } catch (e) { // Left empty on purpose. } // Wait for new primary. var newPrimary = rst.getPrimary(); assert.neq(primary, newPrimary); var barDB = newPrimary.getDB("bar"); coll = newPrimary.getCollection("bar.test"); coll.insert({_id: 200, x: 600, str: "goodnight moon"}); // Check that the new primary has the index // on the renamed collection. var indexes = barDB.runCommand({listIndexes: "test"}); assert.eq(indexes.cursor.firstBatch.length, 2); rst.stopSet(); }());