summaryrefslogtreecommitdiff
path: root/src/mongo/s
diff options
context:
space:
mode:
authorSiyuan Zhou <siyuan.zhou@mongodb.com>2016-11-07 14:57:51 -0500
committerSiyuan Zhou <siyuan.zhou@mongodb.com>2016-11-08 14:41:48 -0500
commit17c37d0e626a61aeae8f4f149da98df2496740fa (patch)
tree9b82e98ffde8067f2314a5fde713c03fc0e7b38a /src/mongo/s
parenta79c8b6455ba50d40f42bead5ce24a6093734dc3 (diff)
downloadmongo-17c37d0e626a61aeae8f4f149da98df2496740fa.tar.gz
SERVER-26202 Relax index constraints in oplog application
This reverts commit d23e79eb9e69bd746416d9f674dfaee59457c887.
Diffstat (limited to 'src/mongo/s')
-rw-r--r--src/mongo/s/catalog/sharding_catalog_config_initialization_test.cpp29
-rw-r--r--src/mongo/s/client/shard_local_test.cpp1
-rw-r--r--src/mongo/s/config_server_test_fixture.cpp4
-rw-r--r--src/mongo/s/sharding_mongod_test_fixture.cpp8
-rw-r--r--src/mongo/s/sharding_mongod_test_fixture.h8
5 files changed, 36 insertions, 14 deletions
diff --git a/src/mongo/s/catalog/sharding_catalog_config_initialization_test.cpp b/src/mongo/s/catalog/sharding_catalog_config_initialization_test.cpp
index 7f4e743b205..99fdcf0ecab 100644
--- a/src/mongo/s/catalog/sharding_catalog_config_initialization_test.cpp
+++ b/src/mongo/s/catalog/sharding_catalog_config_initialization_test.cpp
@@ -32,6 +32,10 @@
#include <vector>
#include "mongo/bson/json.h"
+#include "mongo/db/catalog/collection.h"
+#include "mongo/db/concurrency/write_conflict_exception.h"
+#include "mongo/db/curop.h"
+#include "mongo/db/db_raii.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/repl/replication_coordinator_mock.h"
@@ -216,11 +220,26 @@ TEST_F(ConfigInitializationTest, ReRunsIfDocRolledBackThenReElected) {
});
operationContext()->setReplicatedWrites(false);
replicationCoordinator()->setFollowerMode(repl::MemberState::RS_ROLLBACK);
- ASSERT_OK(
- catalogClient()->removeConfigDocuments(operationContext(),
- VersionType::ConfigNS,
- BSONObj(),
- ShardingCatalogClient::kMajorityWriteConcern));
+ auto txn = operationContext();
+ auto nss = NamespaceString(VersionType::ConfigNS);
+ MONGO_WRITE_CONFLICT_RETRY_LOOP_BEGIN {
+ ScopedTransaction transaction(txn, MODE_IX);
+ AutoGetCollection autoColl(txn, nss, MODE_IX);
+ auto coll = autoColl.getCollection();
+ ASSERT_TRUE(coll);
+ auto cursor = coll->getCursor(txn);
+ std::vector<RecordId> recordIds;
+ while (auto recordId = cursor->next()) {
+ recordIds.push_back(recordId->id);
+ }
+ mongo::WriteUnitOfWork wuow(txn);
+ for (auto recordId : recordIds) {
+ coll->deleteDocument(txn, recordId, nullptr);
+ }
+ wuow.commit();
+ ASSERT_EQUALS(0UL, coll->numRecords(txn));
+ }
+ MONGO_WRITE_CONFLICT_RETRY_LOOP_END(txn, "removeConfigDocuments", nss.ns());
}
// Verify the document was actually removed.
diff --git a/src/mongo/s/client/shard_local_test.cpp b/src/mongo/s/client/shard_local_test.cpp
index 3bd026db9ed..25d4f197a2a 100644
--- a/src/mongo/s/client/shard_local_test.cpp
+++ b/src/mongo/s/client/shard_local_test.cpp
@@ -86,6 +86,7 @@ void ShardLocalTest::setUp() {
_shardLocal = stdx::make_unique<ShardLocal>(ShardId("config"));
const repl::ReplSettings replSettings = {};
repl::setGlobalReplicationCoordinator(new repl::ReplicationCoordinatorMock(replSettings));
+ repl::getGlobalReplicationCoordinator()->setFollowerMode(repl::MemberState::RS_PRIMARY);
}
void ShardLocalTest::tearDown() {
diff --git a/src/mongo/s/config_server_test_fixture.cpp b/src/mongo/s/config_server_test_fixture.cpp
index 4261d037073..95189db6ae5 100644
--- a/src/mongo/s/config_server_test_fixture.cpp
+++ b/src/mongo/s/config_server_test_fixture.cpp
@@ -46,6 +46,7 @@
#include "mongo/db/repl/oplog.h"
#include "mongo/db/repl/read_concern_args.h"
#include "mongo/db/repl/repl_settings.h"
+#include "mongo/db/repl/replication_coordinator_mock.h"
#include "mongo/executor/network_interface_mock.h"
#include "mongo/executor/task_executor_pool.h"
#include "mongo/executor/thread_pool_task_executor_test_fixture.h"
@@ -98,6 +99,9 @@ ConfigServerTestFixture::~ConfigServerTestFixture() = default;
void ConfigServerTestFixture::setUp() {
ShardingMongodTestFixture::setUp();
+ // TODO: SERVER-26919 set the flag on the mock repl coordinator just for the window where it
+ // actually needs to bypass the op observer.
+ replicationCoordinator()->alwaysAllowWrites(true);
// Initialize sharding components as a config server.
serverGlobalParams.clusterRole = ClusterRole::ConfigServer;
diff --git a/src/mongo/s/sharding_mongod_test_fixture.cpp b/src/mongo/s/sharding_mongod_test_fixture.cpp
index ae91dc4ed5e..3e8c9f013d7 100644
--- a/src/mongo/s/sharding_mongod_test_fixture.cpp
+++ b/src/mongo/s/sharding_mongod_test_fixture.cpp
@@ -120,9 +120,7 @@ void ShardingMongodTestFixture::setUp() {
replSetConfig.initialize(BSON("_id" << _setName << "protocolVersion" << 1 << "version" << 3
<< "members"
<< serversBob.arr()));
- auto replCoordMockPtr = dynamic_cast<ReplicationCoordinatorMock*>(replicationCoordinator());
- invariant(replCoordMockPtr);
- replCoordMockPtr->setGetConfigReturnValue(replSetConfig);
+ replCoordPtr->setGetConfigReturnValue(replSetConfig);
repl::ReplicationCoordinator::set(serviceContext, std::move(replCoordPtr));
@@ -131,7 +129,7 @@ void ShardingMongodTestFixture::setUp() {
repl::createOplog(_opCtx.get());
}
-std::unique_ptr<ReplicationCoordinator> ShardingMongodTestFixture::makeReplicationCoordinator(
+std::unique_ptr<ReplicationCoordinatorMock> ShardingMongodTestFixture::makeReplicationCoordinator(
ReplSettings replSettings) {
return stdx::make_unique<repl::ReplicationCoordinatorMock>(replSettings);
}
@@ -372,7 +370,7 @@ executor::TaskExecutor* ShardingMongodTestFixture::executor() const {
return Grid::get(operationContext())->getExecutorPool()->getFixedExecutor();
}
-repl::ReplicationCoordinator* ShardingMongodTestFixture::replicationCoordinator() const {
+repl::ReplicationCoordinatorMock* ShardingMongodTestFixture::replicationCoordinator() const {
invariant(_replCoord);
return _replCoord;
}
diff --git a/src/mongo/s/sharding_mongod_test_fixture.h b/src/mongo/s/sharding_mongod_test_fixture.h
index e3ffa13d582..62435c97e79 100644
--- a/src/mongo/s/sharding_mongod_test_fixture.h
+++ b/src/mongo/s/sharding_mongod_test_fixture.h
@@ -58,7 +58,7 @@ class TaskExecutorPool;
} // namespace executor
namespace repl {
-class ReplicationCoordinator;
+class ReplicationCoordinatorMock;
class ReplSettings;
} // namespace repl
@@ -117,7 +117,7 @@ public:
executor::TaskExecutor* executor() const;
executor::NetworkInterfaceMock* network() const;
- repl::ReplicationCoordinator* replicationCoordinator() const;
+ repl::ReplicationCoordinatorMock* replicationCoordinator() const;
/**
* Returns the stored raw pointer to the DistLockCatalog, if it has been initialized.
@@ -182,7 +182,7 @@ protected:
/**
* Base class returns ReplicationCoordinatorMock.
*/
- virtual std::unique_ptr<repl::ReplicationCoordinator> makeReplicationCoordinator(
+ virtual std::unique_ptr<repl::ReplicationCoordinatorMock> makeReplicationCoordinator(
repl::ReplSettings replSettings);
/**
@@ -264,7 +264,7 @@ private:
// store a raw pointer to it here.
DistLockManager* _distLockManager = nullptr;
- repl::ReplicationCoordinator* _replCoord = nullptr;
+ repl::ReplicationCoordinatorMock* _replCoord = nullptr;
// Allows for processing tasks through the NetworkInterfaceMock/ThreadPoolMock subsystem.
std::unique_ptr<executor::NetworkTestEnv> _networkTestEnv;