diff options
author | Vesselina Ratcheva <vesselina.ratcheva@10gen.com> | 2020-02-14 16:17:33 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-02-18 18:27:39 +0000 |
commit | 34dc015fcb40b8e4c2c99aadf1a78d7b64de6146 (patch) | |
tree | 62716f0181b9f755cce63ee6ad55ad1d0f42a636 /src | |
parent | c18271eaf8bf8a85549ffec363748b40e57b9392 (diff) | |
download | mongo-34dc015fcb40b8e4c2c99aadf1a78d7b64de6146.tar.gz |
SERVER-45610 Reject commands that read data when node is in RECOVERING state
This reverts commit 542de84ec1e17520bd0d99d54a024ff0e0bc3de2.
create mode 100644 jstests/libs/all_commands_test.js
create mode 100644 jstests/replsets/db_reads_while_recovering_all_commands.js
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/commands/dbcheck.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/commands/dbcommands.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/commands/distinct.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/commands/list_collections.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/commands/list_databases.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/commands/list_indexes.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/commands/pipeline_command.cpp | 4 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_coll_stats_cmd.cpp | 4 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_db_stats_cmd.cpp | 4 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_distinct_cmd.cpp | 4 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_list_databases_cmd.cpp | 4 | ||||
-rw-r--r-- | src/mongo/s/commands/commands_public.cpp | 8 | ||||
-rw-r--r-- | src/mongo/shell/replsettest.js | 20 |
13 files changed, 66 insertions, 5 deletions
diff --git a/src/mongo/db/commands/dbcheck.cpp b/src/mongo/db/commands/dbcheck.cpp index 42cfdf10cd6..a446095f91b 100644 --- a/src/mongo/db/commands/dbcheck.cpp +++ b/src/mongo/db/commands/dbcheck.cpp @@ -492,6 +492,10 @@ public: return AllowedOnSecondary::kNever; } + bool maintenanceOk() const override { + return false; + } + virtual bool adminOnly() const { return false; } diff --git a/src/mongo/db/commands/dbcommands.cpp b/src/mongo/db/commands/dbcommands.cpp index e21d689045a..a7015ebf7ec 100644 --- a/src/mongo/db/commands/dbcommands.cpp +++ b/src/mongo/db/commands/dbcommands.cpp @@ -562,6 +562,9 @@ public: AllowedOnSecondary secondaryAllowed(ServiceContext*) const override { return AllowedOnSecondary::kAlways; } + bool maintenanceOk() const override { + return false; + } virtual bool supportsWriteConcern(const BSONObj& cmd) const override { return false; } @@ -644,6 +647,9 @@ public: AllowedOnSecondary secondaryAllowed(ServiceContext*) const override { return AllowedOnSecondary::kAlways; } + bool maintenanceOk() const override { + return false; + } virtual bool supportsWriteConcern(const BSONObj& cmd) const override { return false; } diff --git a/src/mongo/db/commands/distinct.cpp b/src/mongo/db/commands/distinct.cpp index b4e16653a51..d04cb68ebbc 100644 --- a/src/mongo/db/commands/distinct.cpp +++ b/src/mongo/db/commands/distinct.cpp @@ -76,6 +76,10 @@ public: return AllowedOnSecondary::kOptIn; } + bool maintenanceOk() const override { + return false; + } + bool supportsWriteConcern(const BSONObj& cmd) const override { return false; } diff --git a/src/mongo/db/commands/list_collections.cpp b/src/mongo/db/commands/list_collections.cpp index d3841cbaed8..7ef36d2e1cf 100644 --- a/src/mongo/db/commands/list_collections.cpp +++ b/src/mongo/db/commands/list_collections.cpp @@ -214,6 +214,9 @@ public: AllowedOnSecondary secondaryAllowed(ServiceContext*) const final { return AllowedOnSecondary::kOptIn; } + bool maintenanceOk() const override { + return false; + } bool adminOnly() const final { return false; } diff --git a/src/mongo/db/commands/list_databases.cpp b/src/mongo/db/commands/list_databases.cpp index 19ebc60b933..9a383f85522 100644 --- a/src/mongo/db/commands/list_databases.cpp +++ b/src/mongo/db/commands/list_databases.cpp @@ -68,6 +68,9 @@ public: bool adminOnly() const final { return true; } + bool maintenanceOk() const final { + return false; + } bool supportsWriteConcern(const BSONObj& cmd) const final { return false; } diff --git a/src/mongo/db/commands/list_indexes.cpp b/src/mongo/db/commands/list_indexes.cpp index dafefa6f1ee..02dc4b7ead2 100644 --- a/src/mongo/db/commands/list_indexes.cpp +++ b/src/mongo/db/commands/list_indexes.cpp @@ -96,6 +96,9 @@ public: return AllowedOnSecondary::kOptIn; } + bool maintenanceOk() const override { + return false; + } virtual bool adminOnly() const { return false; } diff --git a/src/mongo/db/commands/pipeline_command.cpp b/src/mongo/db/commands/pipeline_command.cpp index a70ae8a51d3..d068dc2812a 100644 --- a/src/mongo/db/commands/pipeline_command.cpp +++ b/src/mongo/db/commands/pipeline_command.cpp @@ -168,7 +168,9 @@ public: AllowedOnSecondary secondaryAllowed(ServiceContext*) const override { return AllowedOnSecondary::kOptIn; } - + bool maintenanceOk() const override { + return false; + } ReadWriteType getReadWriteType() const { return ReadWriteType::kRead; } diff --git a/src/mongo/s/commands/cluster_coll_stats_cmd.cpp b/src/mongo/s/commands/cluster_coll_stats_cmd.cpp index c1c9a24d5f8..b6b78d452df 100644 --- a/src/mongo/s/commands/cluster_coll_stats_cmd.cpp +++ b/src/mongo/s/commands/cluster_coll_stats_cmd.cpp @@ -53,6 +53,10 @@ public: return false; } + bool maintenanceOk() const override { + return false; + } + std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { return CommandHelpers::parseNsCollectionRequired(dbname, cmdObj).ns(); } diff --git a/src/mongo/s/commands/cluster_db_stats_cmd.cpp b/src/mongo/s/commands/cluster_db_stats_cmd.cpp index 3408419de95..b8b9e2f90f9 100644 --- a/src/mongo/s/commands/cluster_db_stats_cmd.cpp +++ b/src/mongo/s/commands/cluster_db_stats_cmd.cpp @@ -88,6 +88,10 @@ public: return AllowedOnSecondary::kAlways; } + bool maintenanceOk() const override { + return false; + } + bool adminOnly() const override { return false; } diff --git a/src/mongo/s/commands/cluster_distinct_cmd.cpp b/src/mongo/s/commands/cluster_distinct_cmd.cpp index bba351c4f58..1b19ddaad90 100644 --- a/src/mongo/s/commands/cluster_distinct_cmd.cpp +++ b/src/mongo/s/commands/cluster_distinct_cmd.cpp @@ -64,6 +64,10 @@ public: return AllowedOnSecondary::kAlways; } + bool maintenanceOk() const override { + return false; + } + bool adminOnly() const override { return false; } diff --git a/src/mongo/s/commands/cluster_list_databases_cmd.cpp b/src/mongo/s/commands/cluster_list_databases_cmd.cpp index fb5e9ab261a..4222656f498 100644 --- a/src/mongo/s/commands/cluster_list_databases_cmd.cpp +++ b/src/mongo/s/commands/cluster_list_databases_cmd.cpp @@ -55,6 +55,10 @@ public: return AllowedOnSecondary::kAlways; } + bool maintenanceOk() const override { + return false; + } + bool adminOnly() const override { return true; } diff --git a/src/mongo/s/commands/commands_public.cpp b/src/mongo/s/commands/commands_public.cpp index bcdeaeb3b02..16f56cd9d24 100644 --- a/src/mongo/s/commands/commands_public.cpp +++ b/src/mongo/s/commands/commands_public.cpp @@ -365,6 +365,10 @@ public: return AllowedOnSecondary::kAlways; } + bool maintenanceOk() const override { + return false; + } + bool adminOnly() const override { return false; } @@ -517,6 +521,10 @@ public: return AllowedOnSecondary::kAlways; } + bool maintenanceOk() const override { + return false; + } + bool adminOnly() const override { return false; } diff --git a/src/mongo/shell/replsettest.js b/src/mongo/shell/replsettest.js index 1160d4b454c..c83a4788989 100644 --- a/src/mongo/shell/replsettest.js +++ b/src/mongo/shell/replsettest.js @@ -2193,10 +2193,15 @@ var ReplSetTest = function(opts) { print("checkDBHashesForReplSet checking data hashes against primary: " + primary.host); - slaves.forEach(secondary => { + slaves.forEach(node => { + // Arbiters have no replicated data. + if (isNodeArbiter(node)) { + print("checkDBHashesForReplSet skipping data of arbiter: " + node.host); + return; + } print("checkDBHashesForReplSet going to check data hashes on secondary: " + - secondary.host); - secondary.getDBNames().forEach(dbName => combinedDBs.add(dbName)); + node.host); + node.getDBNames().forEach(dbName => combinedDBs.add(dbName)); }); for (var dbName of combinedDBs) { @@ -2621,7 +2626,14 @@ var ReplSetTest = function(opts) { } function checkCollectionCountsForReplSet(rst) { - rst.nodes.forEach(node => checkCollectionCountsForNode(node)); + rst.nodes.forEach(node => { + // Arbiters have no replicated collections. + if (isNodeArbiter(node)) { + print("checkCollectionCounts skipping counts for arbiter: " + node.host); + return; + } + checkCollectionCountsForNode(node); + }); assert(success, `Collection counts did not match. search for '${errPrefix}' in logs.`); } |