summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandolph Tan <randolph@10gen.com>2014-11-21 16:35:21 -0500
committerRandolph Tan <randolph@10gen.com>2014-11-25 13:57:30 -0500
commit8cbb64b0bc8180079e2247143ae16f8d83bb3a00 (patch)
tree4adee4645ef2c91f80021b2869f2aa783043fadc
parent9b520aab07f8f098561061603efba1b0351d9a35 (diff)
downloadmongo-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-xbuildscripts/smoke.py1
-rw-r--r--jstests/sharding/copydb_from_mongos.js16
-rw-r--r--src/mongo/client/dbclientinterface.h16
-rw-r--r--src/mongo/db/dbcommands.cpp26
-rw-r--r--src/mongo/db/dbcommands_generic.cpp14
-rw-r--r--src/mongo/s/commands_public.cpp27
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,