summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorADAM David Alan Martin <adam.martin@10gen.com>2016-12-12 18:33:41 -0500
committerADAM David Alan Martin <adam.martin@10gen.com>2016-12-12 18:33:41 -0500
commitd961eb8cade2b41b2a241d95d4c1d19418a5a033 (patch)
treea06f80fb466366efce3b76c85bc3d162b3e72dc0
parent6dc9fc6ba93b62830dd905f6fac39e0802566a9a (diff)
downloadmongo-d961eb8cade2b41b2a241d95d4c1d19418a5a033.tar.gz
SERVER-27384 Deduplicate `class mongo::Command`.
There are two `mongo::Command` classes which perform different functions and have different purposes. They will cause ODR violations in future linking. Some meber function names are also duplicated, further compounding the duplicate symbol problem. This change alters the name of one of the `mongo::Command` classes to something which doesn't collide.
-rw-r--r--src/mongo/tools/bridge.cpp4
-rw-r--r--src/mongo/tools/bridge_commands.cpp26
-rw-r--r--src/mongo/tools/bridge_commands.h6
3 files changed, 19 insertions, 17 deletions
diff --git a/src/mongo/tools/bridge.cpp b/src/mongo/tools/bridge.cpp
index 9f5bff2ae1b..1d061edd382 100644
--- a/src/mongo/tools/bridge.cpp
+++ b/src/mongo/tools/bridge.cpp
@@ -293,12 +293,12 @@ public:
private:
Status runBridgeCommand(StringData cmdName, BSONObj cmdObj) {
- auto status = Command::findCommand(cmdName);
+ auto status = BridgeCommand::findCommand(cmdName);
if (!status.isOK()) {
return status.getStatus();
}
- Command* command = status.getValue();
+ BridgeCommand* command = status.getValue();
return command->run(cmdObj, _settingsMutex, _settings);
}
diff --git a/src/mongo/tools/bridge_commands.cpp b/src/mongo/tools/bridge_commands.cpp
index b6071476933..1cb18e1e603 100644
--- a/src/mongo/tools/bridge_commands.cpp
+++ b/src/mongo/tools/bridge_commands.cpp
@@ -45,7 +45,7 @@ namespace {
const char kHostFieldName[] = "host";
-class CmdDelayMessagesFrom final : public Command {
+class CmdDelayMessagesFrom final : public BridgeCommand {
public:
Status run(const BSONObj& cmdObj, stdx::mutex* settingsMutex, HostSettingsMap* settings) final {
invariant(settingsMutex);
@@ -77,7 +77,7 @@ public:
}
};
-class CmdAcceptConnectionsFrom final : public Command {
+class CmdAcceptConnectionsFrom final : public BridgeCommand {
public:
Status run(const BSONObj& cmdObj, stdx::mutex* settingsMutex, HostSettingsMap* settings) final {
invariant(settingsMutex);
@@ -99,7 +99,7 @@ public:
}
};
-class CmdRejectConnectionsFrom final : public Command {
+class CmdRejectConnectionsFrom final : public BridgeCommand {
public:
Status run(const BSONObj& cmdObj, stdx::mutex* settingsMutex, HostSettingsMap* settings) final {
invariant(settingsMutex);
@@ -121,7 +121,7 @@ public:
}
};
-class CmdDiscardMessagesFrom final : public Command {
+class CmdDiscardMessagesFrom final : public BridgeCommand {
public:
Status run(const BSONObj& cmdObj, stdx::mutex* settingsMutex, HostSettingsMap* settings) final {
invariant(settingsMutex);
@@ -159,25 +159,27 @@ public:
}
};
-StringMap<Command*> commandMap;
+StringMap<BridgeCommand*> bridgeCommandMap;
MONGO_INITIALIZER(RegisterBridgeCommands)(InitializerContext* context) {
- commandMap["delayMessagesFrom"] = new CmdDelayMessagesFrom();
- commandMap["acceptConnectionsFrom"] = new CmdAcceptConnectionsFrom();
- commandMap["rejectConnectionsFrom"] = new CmdRejectConnectionsFrom();
- commandMap["discardMessagesFrom"] = new CmdDiscardMessagesFrom();
+ bridgeCommandMap["delayMessagesFrom"] = new CmdDelayMessagesFrom();
+ bridgeCommandMap["acceptConnectionsFrom"] = new CmdAcceptConnectionsFrom();
+ bridgeCommandMap["rejectConnectionsFrom"] = new CmdRejectConnectionsFrom();
+ bridgeCommandMap["discardMessagesFrom"] = new CmdDiscardMessagesFrom();
return Status::OK();
}
} // namespace
-StatusWith<Command*> Command::findCommand(StringData cmdName) {
- auto it = commandMap.find(cmdName);
- if (it != commandMap.end()) {
+StatusWith<BridgeCommand*> BridgeCommand::findCommand(StringData cmdName) {
+ auto it = bridgeCommandMap.find(cmdName);
+ if (it != bridgeCommandMap.end()) {
invariant(it->second);
return it->second;
}
return {ErrorCodes::CommandNotFound, str::stream() << "Unknown command: " << cmdName};
}
+BridgeCommand::~BridgeCommand() = default;
+
} // namespace mongo
diff --git a/src/mongo/tools/bridge_commands.h b/src/mongo/tools/bridge_commands.h
index f72c2e37b6a..7c825ea09bf 100644
--- a/src/mongo/tools/bridge_commands.h
+++ b/src/mongo/tools/bridge_commands.h
@@ -51,11 +51,11 @@ struct HostSettings {
using HostSettingsMap = stdx::unordered_map<HostAndPort, HostSettings>;
-class Command {
+class BridgeCommand {
public:
- static StatusWith<Command*> findCommand(StringData cmdName);
+ static StatusWith<BridgeCommand*> findCommand(StringData cmdName);
- virtual ~Command() = default;
+ virtual ~BridgeCommand() = 0;
virtual Status run(const BSONObj& cmdObj,
stdx::mutex* settingsMutex,