diff options
author | Randolph Tan <randolph@10gen.com> | 2014-11-21 16:35:21 -0500 |
---|---|---|
committer | Randolph Tan <randolph@10gen.com> | 2014-11-25 13:57:30 -0500 |
commit | 8cbb64b0bc8180079e2247143ae16f8d83bb3a00 (patch) | |
tree | 4adee4645ef2c91f80021b2869f2aa783043fadc | |
parent | 9b520aab07f8f098561061603efba1b0351d9a35 (diff) | |
download | mongo-8cbb64b0bc8180079e2247143ae16f8d83bb3a00.tar.gz |
SERVER-15318 copydb should not use exhaust flag when used against mongos
(cherry picked from commit 8deddb065c6124f31346d5f96efe8734da98d125)
Conflicts:
src/mongo/db/dbcommands_generic.cpp
src/mongo/s/commands_public.cpp
-rwxr-xr-x | buildscripts/smoke.py | 1 | ||||
-rw-r--r-- | jstests/sharding/copydb_from_mongos.js | 16 | ||||
-rw-r--r-- | src/mongo/client/dbclientinterface.h | 16 | ||||
-rw-r--r-- | src/mongo/db/dbcommands.cpp | 26 | ||||
-rw-r--r-- | src/mongo/db/dbcommands_generic.cpp | 14 | ||||
-rw-r--r-- | src/mongo/s/commands_public.cpp | 27 |
6 files changed, 84 insertions, 16 deletions
diff --git a/buildscripts/smoke.py b/buildscripts/smoke.py index 3e3c5730e5d..d5a4cc03808 100755 --- a/buildscripts/smoke.py +++ b/buildscripts/smoke.py @@ -434,6 +434,7 @@ def skipTest(path): ("sharding", "sync3.js"), # SERVER-6388 for this and those below ("sharding", "sync6.js"), ("sharding", "parallel.js"), + ("sharding", "copydb_from_mongos.js"), # SERVER-13080 ("jstests", "bench_test1.js"), ("jstests", "bench_test2.js"), ("jstests", "bench_test3.js"), diff --git a/jstests/sharding/copydb_from_mongos.js b/jstests/sharding/copydb_from_mongos.js new file mode 100644 index 00000000000..c0aac23d552 --- /dev/null +++ b/jstests/sharding/copydb_from_mongos.js @@ -0,0 +1,16 @@ +var st = new ShardingTest({ shards: 2, other: { shardOptions: { verbose: 1 }}}); + +var testDB = st.s.getDB('test'); +assert.writeOK(testDB.foo.insert({ a: 1 })); + +var res = testDB.adminCommand({ copydb: 1, + fromhost: st.s.host, + fromdb: 'test', + todb: 'test_copy' }); +assert.commandWorked(res); + +var copy = st.s.getDB('test_copy'); +assert.eq(1, copy.foo.count()); +assert.eq(1, copy.foo.findOne().a); + +st.stop(); diff --git a/src/mongo/client/dbclientinterface.h b/src/mongo/client/dbclientinterface.h index 3682fd11ede..8ac36ea15b4 100644 --- a/src/mongo/client/dbclientinterface.h +++ b/src/mongo/client/dbclientinterface.h @@ -85,8 +85,20 @@ namespace mongo { */ QueryOption_PartialResults = 1 << 7 , - QueryOption_AllSupported = QueryOption_CursorTailable | QueryOption_SlaveOk | QueryOption_OplogReplay | QueryOption_NoCursorTimeout | QueryOption_AwaitData | QueryOption_Exhaust | QueryOption_PartialResults - + QueryOption_AllSupported = QueryOption_CursorTailable | + QueryOption_SlaveOk | + QueryOption_OplogReplay | + QueryOption_NoCursorTimeout | + QueryOption_AwaitData | + QueryOption_Exhaust | + QueryOption_PartialResults, + + QueryOption_AllSupportedForSharding = QueryOption_CursorTailable | + QueryOption_SlaveOk | + QueryOption_OplogReplay | + QueryOption_NoCursorTimeout | + QueryOption_AwaitData | + QueryOption_PartialResults, }; enum MONGO_CLIENT_API UpdateOptions { diff --git a/src/mongo/db/dbcommands.cpp b/src/mongo/db/dbcommands.cpp index 4c83aa5b27a..edebcd96e7d 100644 --- a/src/mongo/db/dbcommands.cpp +++ b/src/mongo/db/dbcommands.cpp @@ -1344,6 +1344,32 @@ namespace mongo { } } cmdWhatsMyUri; + class AvailableQueryOptions: public Command { + public: + AvailableQueryOptions(): Command("availableQueryOptions", + false, + "availablequeryoptions") { + } + + virtual LockType locktype() const { return NONE; } + virtual bool slaveOk() const { return true; } + virtual bool isWriteCommandForConfigServer() const { return false; } + virtual Status checkAuthForCommand(ClientBasic* client, + const std::string& dbname, + const BSONObj& cmdObj) { + return Status::OK(); + } + + virtual bool run(const string& dbname, + BSONObj& cmdObj, + int, + string& errmsg, + BSONObjBuilder& result, + bool) { + result << "options" << QueryOption_AllSupported; + return true; + } + } availableQueryOptionsCmd; bool _execCommand(Command *c, const string& dbname, diff --git a/src/mongo/db/dbcommands_generic.cpp b/src/mongo/db/dbcommands_generic.cpp index 0767952e826..22aa29fc16f 100644 --- a/src/mongo/db/dbcommands_generic.cpp +++ b/src/mongo/db/dbcommands_generic.cpp @@ -339,20 +339,6 @@ namespace mongo { } } cmdForceError; - class AvailableQueryOptions : public Command { - public: - AvailableQueryOptions() : Command( "availableQueryOptions" , false , "availablequeryoptions" ) {} - virtual bool slaveOk() const { return true; } - virtual LockType locktype() const { return NONE; } - virtual void addRequiredPrivileges(const std::string& dbname, - const BSONObj& cmdObj, - std::vector<Privilege>* out) {} // No auth required - virtual bool run(const string& dbname , BSONObj& cmdObj, int, string& errmsg, BSONObjBuilder& result, bool) { - result << "options" << QueryOption_AllSupported; - return true; - } - } availableQueryOptionsCmd; - class GetLogCmd : public Command { public: GetLogCmd() : Command( "getLog" ){} diff --git a/src/mongo/s/commands_public.cpp b/src/mongo/s/commands_public.cpp index bf9b205ead0..b5c2737f699 100644 --- a/src/mongo/s/commands_public.cpp +++ b/src/mongo/s/commands_public.cpp @@ -2477,6 +2477,33 @@ namespace mongo { } } + class AvailableQueryOptions : public Command { + public: + AvailableQueryOptions(): Command("availableQueryOptions", + false , + "availablequeryoptions") { + } + + virtual LockType locktype() const { return NONE; } + virtual bool slaveOk() const { return true; } + virtual bool isWriteCommandForConfigServer() const { return false; } + virtual Status checkAuthForCommand(ClientBasic* client, + const std::string& dbname, + const BSONObj& cmdObj) { + return Status::OK(); + } + + virtual bool run(const string& dbname, + BSONObj& cmdObj, + int, + string& errmsg, + BSONObjBuilder& result, + bool) { + result << "options" << QueryOption_AllSupportedForSharding; + return true; + } + } availableQueryOptionsCmd; + } // namespace pub_grid_cmds void Command::runAgainstRegistered(const char *ns, BSONObj& jsobj, BSONObjBuilder& anObjBuilder, |