summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpencer T Brody <spencer@mongodb.com>2016-12-06 17:51:31 -0500
committerSpencer T Brody <spencer@mongodb.com>2016-12-07 10:59:41 -0500
commit4182070e85aebf28cba09850e4f7c423485284f8 (patch)
treea187deebd4e40f445bdeb58c2a3b9aec7e0ddc7c
parent66edc250f46519ea7c6b65f628d201ffbfd0dfbf (diff)
downloadmongo-4182070e85aebf28cba09850e4f7c423485284f8.tar.gz
SERVER-26754 Disallow read concern majority reads with protocol version 0.
This reverts commit 3349bcb22aef6036a48d2696c6cb2802395622a7 from SERVER-26754 (cherry picked from commit 15d73829ec0104b573f087443394313c2e81b5b1)
-rw-r--r--buildscripts/resmokeconfig/suites/aggregation_read_concern_majority_passthrough_pv0.yml39
-rw-r--r--buildscripts/resmokeconfig/suites/read_concern_majority_passthrough_pv0.yml93
-rw-r--r--buildscripts/resmokeconfig/suites/replica_sets_legacy.yml3
-rw-r--r--buildscripts/resmokelib/testing/fixtures/replicaset.py3
-rw-r--r--etc/evergreen.yml39
-rw-r--r--src/mongo/db/read_concern.cpp6
6 files changed, 9 insertions, 174 deletions
diff --git a/buildscripts/resmokeconfig/suites/aggregation_read_concern_majority_passthrough_pv0.yml b/buildscripts/resmokeconfig/suites/aggregation_read_concern_majority_passthrough_pv0.yml
deleted file mode 100644
index c2303389783..00000000000
--- a/buildscripts/resmokeconfig/suites/aggregation_read_concern_majority_passthrough_pv0.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-selector:
- js_test:
- roots:
- - jstests/aggregation/*.js
- - jstests/aggregation/bugs/*.js
- - jstests/aggregation/expressions/*.js
- - jstests/aggregation/sources/*/*.js
- exclude_files:
- - jstests/aggregation/bugs/server18198.js # Uses a mocked mongo client to test read preference.
- - jstests/aggregation/mongos_slaveok.js # Majority read on secondary requires afterOpTime.
- - jstests/aggregation/sources/facet/use_cases.js # Cannot specify write concern when
- # secondaryThrottle is not set.
- - jstests/aggregation/testSlave.js # Majority read on secondary requires afterOpTime.
-
-executor:
- js_test:
- config:
- shell_options:
- global_vars:
- TestData:
- enableMajorityReadConcern: ''
- eval: "var testingReplication = true; load('jstests/libs/override_methods/set_majority_read_and_write_concerns.js');"
- readMode: commands
- hooks:
- - class: ValidateCollections
- - class: CheckReplOplogs
- - class: CheckReplDBHash
- fixture:
- class: ReplicaSetFixture
- mongod_options:
- enableMajorityReadConcern: ''
- set_parameters:
- enableTestCommands: 1
- numInitialSyncAttempts: 1
- num_nodes: 2
- replset_config_options:
- protocolVersion: 0
- # Needs to be set for any ephemeral or no-journaling storage engine
- write_concern_majority_journal_default: false
diff --git a/buildscripts/resmokeconfig/suites/read_concern_majority_passthrough_pv0.yml b/buildscripts/resmokeconfig/suites/read_concern_majority_passthrough_pv0.yml
deleted file mode 100644
index 33b578c73fe..00000000000
--- a/buildscripts/resmokeconfig/suites/read_concern_majority_passthrough_pv0.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-selector:
- js_test:
- roots:
- - jstests/core/*.js
- exclude_files:
- # Tests that won't work with an injected 'majority' readConcern
- # and/or an injected 'majority' writeConcern. Where a function is
- # listed the reason is we don't have a reliable solution to override
- # the write concern for that function.
- - jstests/core/batch_write_command*.js # these tests use various write concerns
- - jstests/core/bench_test*.js # benchRun() used for writes
- - jstests/core/capped_update.js # uses godinsert and can't run under replication.
- - jstests/core/crud_api.js # has specific w:0 tests
- - jstests/core/error2.js # db.eval() used
- - jstests/core/eval0.js # db.eval() used
- - jstests/core/eval1.js # db.eval() used
- - jstests/core/eval3.js # db.eval() used
- - jstests/core/eval4.js # db.eval() used
- - jstests/core/eval5.js # db.eval() used
- - jstests/core/eval6.js # db.eval() used
- - jstests/core/eval7.js # db.eval() used
- - jstests/core/eval9.js # db.eval() used
- - jstests/core/evala.js # db.eval() used
- - jstests/core/evalb.js # db.eval() used
- - jstests/core/evalc.js # db.eval() used
- - jstests/core/evald.js # db.eval() used
- - jstests/core/evale.js # db.eval() used
- - jstests/core/evalg.js # db.eval() used
- - jstests/core/eval_mr.js # db.eval() used
- - jstests/core/eval_nolock.js # db.eval() used
- - jstests/core/geo_s2cursorlimitskip.js # drops system.profile collection and counts ops.
- - jstests/core/js3.js # db.dbEval() used
- - jstests/core/js7.js # db.eval() used
- - jstests/core/js9.js # db.eval() used
- - jstests/core/mr_merge.js # mr temp tables aren't replicated
- - jstests/core/mr_merge2.js # mr temp tables aren't replicated
- - jstests/core/mr_outreduce.js # mr temp tables aren't replicated
- - jstests/core/mr_outreduce2.js # mr temp tables aren't replicated
- - jstests/core/opcounters_active.js # off by n problem with opcounters
- - jstests/core/opcounters_write_cmd.js # off by n problem with opcounters
- - jstests/core/profile_agg.js # system.profile not replicated
- - jstests/core/profile_count.js # system.profile not replicated
- - jstests/core/profile_delete.js # system.profile not replicated
- - jstests/core/profile_distinct.js # system.profile not replicated
- - jstests/core/profile_find.js # system.profile not replicated
- - jstests/core/profile_findandmodify.js # system.profile not replicated
- - jstests/core/profile_geonear.js # system.profile not replicated
- - jstests/core/profile_getmore.js # system.profile not replicated
- - jstests/core/profile_group.js # system.profile not replicated
- - jstests/core/profile_insert.js # system.profile not replicated
- - jstests/core/profile_mapreduce.js # system.profile not replicated
- - jstests/core/profile_update.js # system.profile not replicated
- - jstests/core/profile1.js # system.profile not replicated
- - jstests/core/profile2.js # system.profile not replicated
- - jstests/core/profile3.js # system.profile not replicated
- - jstests/core/read_after_optime.js # verifies read after optime fails on standalone
- - jstests/core/remove8.js # db.eval() used
- - jstests/core/rename4.js # db.eval() used
- - jstests/core/shell1.js # tests setSlaveOk() variations on standalone mongod
- - jstests/core/shellkillop.js # db.eval() used
- - jstests/core/shell_writeconcern.js # checks write concern shell helpers
- - jstests/core/storefunc.js # db.eval() used
- - jstests/core/write_result.js # Tests invalid writeConcern, we shouldn't override.
- # Tests that need triaging & remediation | blacklist decision
- # Comments list possible problem point under review.
- - jstests/core/capped6.js # Uses captrunc test command.
- - jstests/core/convert_to_capped_nonexistant.js # Uses convertToCapped and captrunc command.
- - jstests/core/stages_delete.js # Uses stageDebug command for deletes.
-
-executor:
- js_test:
- config:
- shell_options:
- eval: "var testingReplication = true; load('jstests/libs/override_methods/set_majority_read_and_write_concerns.js');"
- readMode: commands
- hooks:
- - class: ValidateCollections
- - class: CheckReplOplogs
- - class: CheckReplDBHash
- - class: CleanEveryN
- n: 20
- fixture:
- class: ReplicaSetFixture
- mongod_options:
- set_parameters:
- enableTestCommands: 1
- numInitialSyncAttempts: 1
- enableMajorityReadConcern: ''
- num_nodes: 2
- # Needs to be set for any ephemeral or no-journaling storage engine
- write_concern_majority_journal_default: false
- replset_config_options:
- protocolVersion: 0
diff --git a/buildscripts/resmokeconfig/suites/replica_sets_legacy.yml b/buildscripts/resmokeconfig/suites/replica_sets_legacy.yml
index 1ba90512c6a..e38954f573b 100644
--- a/buildscripts/resmokeconfig/suites/replica_sets_legacy.yml
+++ b/buildscripts/resmokeconfig/suites/replica_sets_legacy.yml
@@ -7,12 +7,15 @@ selector:
- jstests/replsets/config_server_checks.js
- jstests/replsets/disallow_adding_initialized_node1.js
- jstests/replsets/disallow_adding_initialized_node2.js
+ - jstests/replsets/last_op_visible.js
# Linearizable reads not supported on PV0
- jstests/replsets/linearizable_read_concern.js
- jstests/replsets/oplog_truncated_on_recovery.js
- jstests/replsets/priority_takeover_cascading_priorities.js
- jstests/replsets/priority_takeover_one_node_higher_priority.js
- jstests/replsets/priority_takeover_two_nodes_equal_priority.js
+ - jstests/replsets/read_committed*.js
+ - jstests/replsets/read_majority_two_arbs.js
- jstests/replsets/stepup.js
# The combination of new bridges and PV0 can lead to an improper spanning tree in sync2.js.
- jstests/replsets/sync2.js
diff --git a/buildscripts/resmokelib/testing/fixtures/replicaset.py b/buildscripts/resmokelib/testing/fixtures/replicaset.py
index 53e6d1a7595..69e82c76f4b 100644
--- a/buildscripts/resmokelib/testing/fixtures/replicaset.py
+++ b/buildscripts/resmokelib/testing/fixtures/replicaset.py
@@ -120,9 +120,6 @@ class ReplicaSetFixture(interface.ReplFixture):
if self.replset_config_options.get("configsvr", False):
initiate_cmd_obj["replSetInitiate"]["configsvr"] = True
- if "protocolVersion" in self.replset_config_options:
- protocol_version = self.replset_config_options["protocolVersion"]
- initiate_cmd_obj["replSetInitiate"]["protocolVersion"] = protocol_version
if self.replset_config_options.get("settings"):
replset_settings = self.replset_config_options["settings"]
initiate_cmd_obj["replSetInitiate"]["settings"] = replset_settings
diff --git a/etc/evergreen.yml b/etc/evergreen.yml
index 30a9d155927..5f22d58d835 100644
--- a/etc/evergreen.yml
+++ b/etc/evergreen.yml
@@ -1404,18 +1404,6 @@ tasks:
run_multiple_jobs: true
- <<: *task_template
- name: aggregation_read_concern_majority_passthrough_pv0_WT
- depends_on:
- - name: aggregation_WT
- commands:
- - func: "do setup"
- - func: "run tests"
- vars:
- resmoke_args: --suites=aggregation_read_concern_majority_passthrough_pv0 --storageEngine=wiredTiger
- run_multiple_jobs: true
-
-
-- <<: *task_template
name: aggregation_sharded_collections_passthrough_WT
depends_on:
- name: aggregation_WT
@@ -2255,17 +2243,6 @@ tasks:
run_multiple_jobs: true
- <<: *task_template
- name: read_concern_majority_passthrough_pv0_WT
- depends_on:
- - name: jsCore_WT
- commands:
- - func: "do setup"
- - func: "run tests"
- vars:
- resmoke_args: --suites=read_concern_majority_passthrough_pv0 --storageEngine=wiredTiger
- run_multiple_jobs: true
-
-- <<: *task_template
name: replicasets
commands:
- func: "do setup"
@@ -4649,7 +4626,6 @@ buildvariants:
- name: aggregation_WT
- name: aggregation_facet_unwind_passthrough_WT
- name: aggregation_read_concern_majority_passthrough_WT
- - name: aggregation_read_concern_majority_passthrough_pv0_WT
- name: aggregation_sharded_collections_passthrough_WT
- name: auth
- name: auth_WT
@@ -4729,9 +4705,6 @@ buildvariants:
- name: read_concern_majority_passthrough_WT
distros:
- windows-64-vs2015-large
- - name: read_concern_majority_passthrough_pv0_WT
- distros:
- - windows-64-vs2015-large
- name: read_only
- name: read_only_WT
- name: read_only_sharded
@@ -5130,7 +5103,6 @@ buildvariants:
- name: aggregation
- name: aggregation_WT
- name: aggregation_read_concern_majority_passthrough_WT
- - name: aggregation_read_concern_majority_passthrough_pv0_WT
- name: aggregation_sharded_collections_passthrough_WT
- name: auth
- name: auth_WT
@@ -5191,7 +5163,6 @@ buildvariants:
- name: concurrency_simultaneous
- name: concurrency_simultaneous_WT
- name: read_concern_majority_passthrough_WT
- - name: read_concern_majority_passthrough_pv0_WT
- name: replicasets
- name: replicasets_WT
- name: replication
@@ -5349,7 +5320,6 @@ buildvariants:
- name: aggregation_auth
- name: aggregation_facet_unwind_passthrough_WT
- name: aggregation_read_concern_majority_passthrough_WT
- - name: aggregation_read_concern_majority_passthrough_pv0_WT
- name: aggregation_sharded_collections_passthrough_WT
- name: audit
- name: audit_WT
@@ -5443,9 +5413,6 @@ buildvariants:
- name: read_concern_majority_passthrough_WT
distros:
- rhel62-large
- - name: read_concern_majority_passthrough_pv0_WT
- distros:
- - rhel62-large
- name: read_only
- name: read_only_WT
- name: read_only_sharded
@@ -7525,7 +7492,6 @@ buildvariants:
- name: aggregation_WT
- name: aggregation_auth
- name: aggregation_read_concern_majority_passthrough_WT
- - name: aggregation_read_concern_majority_passthrough_pv0_WT
- name: aggregation_sharded_collections_passthrough_WT
- name: audit
- name: auth
@@ -7565,7 +7531,6 @@ buildvariants:
- name: parallel
- name: parallel_compatibility
- name: read_concern_majority_passthrough_WT
- - name: read_concern_majority_passthrough_pv0_WT
- name: replicasets_WT
- name: replicasets_auth
- name: replicasets_legacy
@@ -7934,7 +7899,6 @@ buildvariants:
- name: aggregation_auth
- name: aggregation_facet_unwind_passthrough_WT
- name: aggregation_read_concern_majority_passthrough_WT
- - name: aggregation_read_concern_majority_passthrough_pv0_WT
- name: aggregation_sharded_collections_passthrough_WT
- name: audit
- name: audit_WT
@@ -8006,7 +7970,6 @@ buildvariants:
- name: parallel_compatibility
- name: parallel_compatibility_WT
- name: read_concern_majority_passthrough_WT
- - name: read_concern_majority_passthrough_pv0_WT
- name: read_only
- name: read_only_WT
- name: read_only_sharded
@@ -8109,7 +8072,6 @@ buildvariants:
- name: aggregation_auth
- name: aggregation_facet_unwind_passthrough_WT
- name: aggregation_read_concern_majority_passthrough_WT
- - name: aggregation_read_concern_majority_passthrough_pv0_WT
- name: aggregation_sharded_collections_passthrough_WT
- name: audit
- name: audit_WT
@@ -8181,7 +8143,6 @@ buildvariants:
- name: parallel_compatibility
- name: parallel_compatibility_WT
- name: read_concern_majority_passthrough_WT
- - name: read_concern_majority_passthrough_pv0_WT
- name: read_only
- name: read_only_WT
- name: read_only_sharded
diff --git a/src/mongo/db/read_concern.cpp b/src/mongo/db/read_concern.cpp
index 4b36f37528a..cc404cdbf82 100644
--- a/src/mongo/db/read_concern.cpp
+++ b/src/mongo/db/read_concern.cpp
@@ -117,6 +117,12 @@ Status waitForReadConcern(OperationContext* txn, const repl::ReadConcernArgs& re
if ((replCoord->getReplicationMode() == repl::ReplicationCoordinator::Mode::modeReplSet ||
testingSnapshotBehaviorInIsolation) &&
readConcernArgs.getLevel() == repl::ReadConcernLevel::kMajorityReadConcern) {
+ // ReadConcern Majority is not supported in ProtocolVersion 0.
+ if (!testingSnapshotBehaviorInIsolation && !replCoord->isV1ElectionProtocol()) {
+ return {ErrorCodes::ReadConcernMajorityNotEnabled,
+ str::stream() << "Replica sets running protocol version 0 do not support "
+ "readConcern: majority"};
+ }
const int debugLevel = serverGlobalParams.clusterRole == ClusterRole::ConfigServer ? 1 : 2;