- 
    Type:
Task
 - 
    Resolution: Done
 - 
    Priority:
Major - P3
 - 
    Affects Version/s: None
 - 
    Component/s: Testing Infrastructure
 - 
    None
 
- 
        Fully Compatible
 - 
        TIG 2017-04-17
 - 
        0
 - 
        None
 
- 
        None
 - 
        None
 - 
        None
 - 
        None
 - 
        None
 - 
        None
 
The "shardCollection" command may fail with an ConflictingOperationInProgress error response if a parallel shell started by the test runs the "drop" command. This is known to happen when running the queryoptimizer3.js test as part of the sharded_collections_jscore_passthrough suite.
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 2017-03-16T22:27:54.977+0000 E QUERY    [thread1] Error: command failed: {
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 	"code" : 117,
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 	"ok" : 0,
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 	"errmsg" : "Collection was successfully written as sharded but got dropped before it could be evenly distributed",
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 	"logicalTime" : {
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 		"clusterTime" : Timestamp(1489703274, 47),
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 		"signature" : BinData(0,"BzSDcnuxcSxhtKKsU3yXUkRM+kw=")
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 	}
[js_test:queryoptimizer3] 2017-03-16T22:27:54.979+0000 } : sharding 'test.jstests_queryoptimizer3' with a hashed _id key failed :
[js_test:queryoptimizer3] 2017-03-16T22:27:54.980+0000 _getErrorWithCode@src/mongo/shell/utils.js:25:13
[js_test:queryoptimizer3] 2017-03-16T22:27:54.980+0000 doassert@src/mongo/shell/assert.js:16:14
[js_test:queryoptimizer3] 2017-03-16T22:27:54.980+0000 assert.commandWorked@src/mongo/shell/assert.js:387:5
[js_test:queryoptimizer3] 2017-03-16T22:27:54.980+0000 shardCollection@jstests/libs/override_methods/implicitly_shard_accessed_collections.js:47:9
[js_test:queryoptimizer3] 2017-03-16T22:27:54.980+0000 DBCollection.prototype.drop@jstests/libs/override_methods/implicitly_shard_accessed_collections.js:69:9
[js_test:queryoptimizer3] 2017-03-16T22:27:54.980+0000 @jstests\core\queryoptimizer3.js:10:5
[js_test:queryoptimizer3] 2017-03-16T22:27:54.982+0000 failed to load: jstests\core\queryoptimizer3.js
We can override the startParallelShell() function so that it sets a variable in an outer scope that controls whether or not we should swallow an ConflictingOperationInProgress error response. This way we can still run these tests as part of the sharded_collections_jscore_passthrough suite and are much less likely to mask the ConflictingOperationInProgress error response being returned in other contexts for the "shardCollection" command.
var testMayRunDropInParallel = false; var originalStartParallelShell = startParallelShell; function shardCollection(collection) { ... res = db.adminCommand({shardCollection: fullName, key: {_id: 'hashed'}}); if (res.ok === 0 && testMayRunDropInParallel) { assert.commandFailedWithCode(res, ErrorCodes.ConflictingOperationInProgress); } else { assert.commandWorked(res, "sharding '" + fullName + "' with a hashed _id key failed"); } } startParallelShell = function() { testMayRunDropInParallel = true; return originalStartParallelShell.apply(this, arguments); }
- is related to
 - 
                    
SERVER-26315 sharded_collections_jscore_passthrough should re-shard the collection after the test drops it
-         
 - Closed
 
 -