summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands/writeback_compatibility_shim.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/commands/writeback_compatibility_shim.cpp')
-rw-r--r--src/mongo/db/commands/writeback_compatibility_shim.cpp160
1 files changed, 80 insertions, 80 deletions
diff --git a/src/mongo/db/commands/writeback_compatibility_shim.cpp b/src/mongo/db/commands/writeback_compatibility_shim.cpp
index 99feccfad58..b03cf3b21dc 100644
--- a/src/mongo/db/commands/writeback_compatibility_shim.cpp
+++ b/src/mongo/db/commands/writeback_compatibility_shim.cpp
@@ -43,85 +43,85 @@
namespace mongo {
- using std::string;
- using std::stringstream;
-
- using mongoutils::str::stream;
-
- /**
- * This command is required in v3.0 mongod to prevent v2.6 mongos from entering a tight loop and
- * spamming the server with invalid writebacklisten requests. This command reports an error
- * and pauses, which is safe because the original v2.6 WBL command was a long-poll (30s).
- */
- class WriteBackCommand : public Command {
- public:
- WriteBackCommand() : Command("writebacklisten") {}
-
- void help(stringstream& helpOut) const {
- helpOut << "v3.0 disallowed internal command, present for compatibility only";
- }
-
- virtual bool isWriteCommandForConfigServer() const { return false; }
-
- //
- // Same as v2.6 settings
- //
-
- virtual bool adminOnly() const { return true; }
- virtual bool slaveOk() const { return true; }
-
- virtual void addRequiredPrivileges(const std::string& dbname,
- const BSONObj& cmdObj,
- std::vector<Privilege>* out) {
- ActionSet actions;
- actions.addAction(ActionType::internal);
- out->push_back(Privilege(ResourcePattern::forClusterResource(), actions));
- }
-
- virtual bool run(OperationContext* opCtx,
- const string&,
- BSONObj&,
- int,
- string&,
- BSONObjBuilder& result) {
-
- string errMsg = stream()
- << "Writeback functionality is no longer present in v3.0 mongod, "
- << "a v2.6 mongos may be running in the v3.0 cluster at "
- << opCtx->getClient()->clientAddress(false);
-
- error() << errMsg;
-
- // Prevent v2.6 mongos from spamming writebacklisten retries
- const int kSleepSecsBeforeMessage = 5;
- sleepsecs(kSleepSecsBeforeMessage);
-
- return appendCommandStatus(result, Status(ErrorCodes::CommandNotFound, errMsg));
- }
- };
-
- /**
- * The "writeBacksQueued" field is required in ServerStatus output to avoid v2.6 mongos crashing
- * confusingly when upgrading a cluster.
- */
- class WriteBacksQueuedSSM : public ServerStatusMetric {
- public:
- WriteBacksQueuedSSM() : ServerStatusMetric(".writeBacksQueued") {}
-
- virtual void appendAtLeaf(BSONObjBuilder& b) const {
- // always append false, we don't queue writebacks
- b.appendBool(_leafName, false);
- }
- };
-
- namespace {
- MONGO_INITIALIZER(RegisterWriteBackShim)(InitializerContext* context) {
- // Leaked intentionally: a Command registers itself when constructed.
- new WriteBackCommand();
- // Leaked intentionally: a SSM registers itself when constructed.
- new WriteBacksQueuedSSM();
- return Status::OK();
- }
+using std::string;
+using std::stringstream;
+
+using mongoutils::str::stream;
+
+/**
+ * This command is required in v3.0 mongod to prevent v2.6 mongos from entering a tight loop and
+ * spamming the server with invalid writebacklisten requests. This command reports an error
+ * and pauses, which is safe because the original v2.6 WBL command was a long-poll (30s).
+ */
+class WriteBackCommand : public Command {
+public:
+ WriteBackCommand() : Command("writebacklisten") {}
+
+ void help(stringstream& helpOut) const {
+ helpOut << "v3.0 disallowed internal command, present for compatibility only";
+ }
+
+ virtual bool isWriteCommandForConfigServer() const {
+ return false;
+ }
+
+ //
+ // Same as v2.6 settings
+ //
+
+ virtual bool adminOnly() const {
+ return true;
+ }
+ virtual bool slaveOk() const {
+ return true;
}
-} // namespace
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {
+ ActionSet actions;
+ actions.addAction(ActionType::internal);
+ out->push_back(Privilege(ResourcePattern::forClusterResource(), actions));
+ }
+
+ virtual bool run(
+ OperationContext* opCtx, const string&, BSONObj&, int, string&, BSONObjBuilder& result) {
+ string errMsg = stream() << "Writeback functionality is no longer present in v3.0 mongod, "
+ << "a v2.6 mongos may be running in the v3.0 cluster at "
+ << opCtx->getClient()->clientAddress(false);
+
+ error() << errMsg;
+
+ // Prevent v2.6 mongos from spamming writebacklisten retries
+ const int kSleepSecsBeforeMessage = 5;
+ sleepsecs(kSleepSecsBeforeMessage);
+
+ return appendCommandStatus(result, Status(ErrorCodes::CommandNotFound, errMsg));
+ }
+};
+
+/**
+ * The "writeBacksQueued" field is required in ServerStatus output to avoid v2.6 mongos crashing
+ * confusingly when upgrading a cluster.
+ */
+class WriteBacksQueuedSSM : public ServerStatusMetric {
+public:
+ WriteBacksQueuedSSM() : ServerStatusMetric(".writeBacksQueued") {}
+
+ virtual void appendAtLeaf(BSONObjBuilder& b) const {
+ // always append false, we don't queue writebacks
+ b.appendBool(_leafName, false);
+ }
+};
+
+namespace {
+MONGO_INITIALIZER(RegisterWriteBackShim)(InitializerContext* context) {
+ // Leaked intentionally: a Command registers itself when constructed.
+ new WriteBackCommand();
+ // Leaked intentionally: a SSM registers itself when constructed.
+ new WriteBacksQueuedSSM();
+ return Status::OK();
+}
+}
+
+} // namespace