diff options
author | Alberto Lerner <alerner@10gen.com> | 2013-10-09 14:45:56 -0400 |
---|---|---|
committer | Alberto Lerner <alerner@10gen.com> | 2013-10-11 17:23:39 -0400 |
commit | 716b1a5b3895b5822700c0c478043f7f15a227f4 (patch) | |
tree | c51a9d79bf69859e30bc03faf3759578345d9c34 /jstests | |
parent | d538a7729829a5cd24b6ec8bb8ffdae22d616a0f (diff) | |
download | mongo-716b1a5b3895b5822700c0c478043f7f15a227f4.tar.gz |
SEVER-10521 Update write commands types to comform to v0.4 of the spec
This is the first pass on the write protocol changes made for v0.4.
The changes and fixes in here are:
* commands take name of a collection, rather than a namespace
* continueOnError is now called ordered
* w:0 returns a condensed responses in case of errors
* upserted is now only returned in updates
* prep work for returning the _ids of upserted documents (but
not there yet
* we're reporting (tentatively) error messages in the 'errMsg'
field (as opposed to the 'errmsg' one). If this causes some
havoc, we'll stick to the old way and live with one non-stadard
named field.
Diffstat (limited to 'jstests')
-rw-r--r-- | jstests/batch_write_protocol.js | 240 | ||||
-rw-r--r-- | jstests/sharding/sharded_batch_write_protocol.js | 257 |
2 files changed, 0 insertions, 497 deletions
diff --git a/jstests/batch_write_protocol.js b/jstests/batch_write_protocol.js deleted file mode 100644 index 773abe1fdb5..00000000000 --- a/jstests/batch_write_protocol.js +++ /dev/null @@ -1,240 +0,0 @@ -// -// Ensures that mongod respects the basic batch write protocols -// - -var coll = db.getCollection("batch_write_protocol"); - -var PRESENT = "PRESENT"; -var ABSENT = "ABSENT"; - -var assertHasFields = function(docA, docB) { - print("checking " + tojson(docA) + " vs. " + tojson(docB)); - - for ( var field in docB) { - if (docB[field] === PRESENT && docA[field] === undefined) - assert(false, "field is absent that shouldn't be: " + field); - } - - for ( var field in docA) { - if (docB[field] === undefined) continue; - if (docB[field] === ABSENT) assert(false, "field is present that shouldn't be: " + field); - if (docB[field] === PRESENT) continue; - assert.eq(docA[field], docB[field]); - } -}; - -var request; -var response; - -// -// INSERT -// - -jsTest.log("Starting insert tests..."); - -coll.remove({}); - -// Only check the parsing lightly, we do this elsewhere -// NO DOCS -request = {insert : coll + "", writeConcern : {}, continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); - -// NO WC -request = {insert : coll + "", documents : [{a : 1}], continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); - -// NO COE -request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); - -// Correct single insert -request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}, continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - -// Correct multi insert -request = {insert : coll + "", - documents : [{a : 2}, {a : 3}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 2}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on single insert -coll.ensureIndex({a : 1}, {unique : true}); -request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}, continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on multi insert -request = {insert : coll + "", - documents : [{a : 1}, {a : 4}], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT, errDetails : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 4); - -// Error on multi insert, no COE -request = {insert : coll + "", - documents : [{a : 1}, {a : 5}], - writeConcern : {}, - continueOnError : false}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT, errDetails : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 4); - -// -// Update -// - -jsTest.log("Starting update tests..."); - -coll.remove({}); - -// Correct single update -request = {update : coll + "", - updates : [{q : {a : 1}, u : {a : 1}}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 0); - -// Correct single upsert -request = {update : coll + "", - updates : [{q : {a : 1}, u : {a : 1}, upsert : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 1}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - -// Correct multiple upsert -request = {update : coll + "", - updates : [{q : {a : 2}, u : {a : 2}, upsert : true}, - {q : {a : 3}, u : {a : 3}, upsert : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 2}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Correct multiple update -request = {update : coll + "", - updates : [{q : {}, u : {$set : {b : 1}}, multi : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 3, upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on single update -request = {update : coll + "", - updates : [{q : {}, u : {b : 1}, multi : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on multiple update -request = {update : coll + "", - updates : [{q : {}, u : {b : 1}, multi : true}, - {q : {}, u : {$set : {b : 2}}, multi : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, - errCode : PRESENT, - errMessage : PRESENT, - errDetails : PRESENT, - n : 3, - upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on multiple update, no COE -request = {update : coll + "", - updates : [{q : {}, u : {b : 1}, multi : true}, - {q : {}, u : {$set : {b : 2}}, multi : true}], - writeConcern : {}, - continueOnError : false}; -response = {ok : false, - errCode : PRESENT, - errMessage : PRESENT, - errDetails : PRESENT, - n : 0, - upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// -// Delete -// - -jsTest.log( "Starting delete tests..." ); - -// Correct single delete -request = {delete : coll + "", - deletes : [{q : {a : 1}}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1, upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 2); - -// Correct multi delete -request = {delete : coll + "", - deletes : [{q : {a : 2}}, { q : { a : 10}}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1, upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - -// Error on single delete -request = {delete : coll + "", - deletes : [{q : {$set : {a : 2}}}], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - - // Error on multi delete -request = {delete : coll + "", - deletes : [{q : {$set : {a : 2}}}, - { q : { a : 3 } }], - writeConcern : {}, - continueOnError : true}; - response = {ok : false, - errCode : PRESENT, - errMessage : PRESENT, - errDetails : PRESENT, - n : 1, - upserted : 0}; - assertHasFields(coll.runCommand(request), response); - assert.eq(coll.count(), 0); - -// Error on multi delete, no COE -coll.insert({ a : 3 }); -request = {delete : coll + "", - deletes : [{q : {$set : {a : 2}}}, - {q : { a : 3 }}], - writeConcern : {}, - continueOnError : false}; -response = {ok : false, - errCode : PRESENT, - errMessage : PRESENT, - errDetails : PRESENT, - n : 0, - upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - diff --git a/jstests/sharding/sharded_batch_write_protocol.js b/jstests/sharding/sharded_batch_write_protocol.js deleted file mode 100644 index f8819018009..00000000000 --- a/jstests/sharding/sharded_batch_write_protocol.js +++ /dev/null @@ -1,257 +0,0 @@ -// -// Tests batch writes in a sharded cluster -// - -var options = {separateConfig : true}; - -var st = new ShardingTest({shards : 1, mongos : 1, other : options}); -st.stopBalancer(); - -var mongos = st.s0; -var shards = mongos.getDB("config").shards.find().toArray(); -var admin = mongos.getDB("admin"); -var coll = mongos.getCollection("foo.bar"); - -assert(admin.runCommand({enableSharding : coll.getDB() + ""}).ok); -printjson(admin.runCommand({movePrimary : coll.getDB() + "", to : shards[0]._id})); - -var PRESENT = "PRESENT"; -var ABSENT = "ABSENT"; - -var assertHasFields = function(docA, docB) { - print("checking " + tojson(docA) + " vs. " + tojson(docB)); - - for ( var field in docB) { - if (docB[field] === PRESENT && docA[field] === undefined) - assert(false, "field is absent that shouldn't be: " + field); - } - - for ( var field in docA) { - if (docB[field] === undefined) continue; - if (docB[field] === ABSENT) assert(false, "field is present that shouldn't be: " + field); - if (docB[field] === PRESENT) continue; - assert.eq(docA[field], docB[field]); - } -}; - -var request; -var response; - -// -// INSERT -// - -jsTest.log("Starting insert tests..."); - -coll.remove({}); -assert.eq( null, coll.getDB().getLastError() ); -assert(admin.runCommand({ shardCollection : coll + "", key : {a : 1} }).ok); - -// Only check the parsing lightly, we do this elsewhere -// NO DOCS -request = {insert : coll + "", writeConcern : {}, continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); - -// NO WC -request = {insert : coll + "", documents : [{a : 1}], continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); - -// NO COE -request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); - -// Correct single insert -request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}, continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - -// Correct multi insert -request = {insert : coll + "", - documents : [{a : 2}, {a : 3}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 2}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on single insert -st.shard0.getCollection( coll + "" ).dropIndex({a : 1}); -st.shard0.getCollection( coll + "" ).ensureIndex({a : 1}, {unique : true}); -request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}, continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on multi insert -request = {insert : coll + "", - documents : [{a : 1}, {a : 4}], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT, errDetails : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 4); - -// Error on multi insert, no COE -request = {insert : coll + "", - documents : [{a : 1}, {a : 5}], - writeConcern : {}, - continueOnError : false}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT, errDetails : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 4); - -// -// Update -// - -jsTest.log("Starting update tests..."); - -coll.remove({}); -assert.eq( null, coll.getDB().getLastError() ); -st.shard0.getCollection( coll + "" ).dropIndex({a : 1}); -st.shard0.getCollection( coll + "" ).ensureIndex({a : 1}); - -// Correct single update -request = {update : coll + "", - updates : [{q : {a : 1}, u : {a : 1}}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 0); - -// Correct single upsert -request = {update : coll + "", - updates : [{q : {a : 1}, u : {a : 1}, upsert : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 1}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - -// Correct multiple upsert -request = {update : coll + "", - updates : [{q : {a : 2}, u : {a : 2}, upsert : true}, - {q : {a : 3}, u : {a : 3}, upsert : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 2}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Correct multiple update -request = {update : coll + "", - updates : [{q : {}, u : {$set : {b : 1}}, multi : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 3, upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on single update -request = {update : coll + "", - updates : [{q : {}, u : {b : 1}, multi : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on multiple update -request = {update : coll + "", - updates : [{q : {}, u : {b : 1}, multi : true}, - {q : {}, u : {$set : {b : 2}}, multi : true}], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, - errCode : PRESENT, - errMessage : PRESENT, - errDetails : PRESENT, - n : 3, - upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// Error on multiple update, no COE -request = {update : coll + "", - updates : [{q : {}, u : {b : 1}, multi : true}, - {q : {}, u : {$set : {b : 2}}, multi : true}], - writeConcern : {}, - continueOnError : false}; -response = {ok : false, - errCode : PRESENT, - errMessage : PRESENT, - errDetails : PRESENT, - n : 0, - upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 3); - -// -// Delete -// - -jsTest.log( "Starting delete tests..." ); - -// Correct single delete -request = {delete : coll + "", - deletes : [{q : {a : 1}}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1, upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 2); - -// Correct multi delete -request = {delete : coll + "", - deletes : [{q : {a : 2}}, { q : { a : 10}}], - writeConcern : {}, - continueOnError : true}; -response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1, upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - -// Error on single delete -request = {delete : coll + "", - deletes : [{q : {$set : {a : 2}}}], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, errCode : PRESENT, errMessage : PRESENT}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); - -// Error on multi delete -request = {delete : coll + "", - deletes : [{q : {$set : {a : 2}}}, - { q : { a : 3 } }], - writeConcern : {}, - continueOnError : true}; -response = {ok : false, - errCode : PRESENT, - errMessage : PRESENT, - errDetails : PRESENT, - n : 1, - upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 0); - -// Error on multi delete, no COE -coll.insert({ a : 3 }); -assert.eq( null, coll.getDB().getLastError() ); -request = {delete : coll + "", - deletes : [{q : {$set : {a : 2}}}, - {q : { a : 3 }}], - writeConcern : {}, - continueOnError : false}; -response = {ok : false, - errCode : PRESENT, - errMessage : PRESENT, - errDetails : PRESENT, - n : 0, - upserted : 0}; -assertHasFields(coll.runCommand(request), response); -assert.eq(coll.count(), 1); |