diff options
author | ADAM David Alan Martin <adam.martin@10gen.com> | 2016-12-12 18:33:41 -0500 |
---|---|---|
committer | ADAM David Alan Martin <adam.martin@10gen.com> | 2016-12-12 18:33:41 -0500 |
commit | d961eb8cade2b41b2a241d95d4c1d19418a5a033 (patch) | |
tree | a06f80fb466366efce3b76c85bc3d162b3e72dc0 | |
parent | 6dc9fc6ba93b62830dd905f6fac39e0802566a9a (diff) | |
download | mongo-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.cpp | 4 | ||||
-rw-r--r-- | src/mongo/tools/bridge_commands.cpp | 26 | ||||
-rw-r--r-- | src/mongo/tools/bridge_commands.h | 6 |
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, |