summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@mongodb.com>2015-03-26 18:45:22 -0400
committerAndy Schwerin <schwerin@mongodb.com>2015-04-06 10:16:23 -0400
commit90b7f774b818a1038cc525a9fca14207d8d5ff71 (patch)
tree604285e3d69ef379626ddd8f0a57068c287ea2ef /src/mongo/db/repl
parent387e39a07522aec114a64146871eab2e015d7444 (diff)
downloadmongo-90b7f774b818a1038cc525a9fca14207d8d5ff71.tar.gz
SERVER-17817 Move replication-specific data from Client into ReplClientInfo decoration.
Diffstat (limited to 'src/mongo/db/repl')
-rw-r--r--src/mongo/db/repl/SConscript3
-rw-r--r--src/mongo/db/repl/master_slave.cpp3
-rw-r--r--src/mongo/db/repl/oplog.cpp6
-rw-r--r--src/mongo/db/repl/repl_client_info.cpp45
-rw-r--r--src/mongo/db/repl/repl_client_info.h59
-rw-r--r--src/mongo/db/repl/replication_coordinator_impl.cpp7
-rw-r--r--src/mongo/db/repl/rs_initialsync.cpp3
-rw-r--r--src/mongo/db/repl/sync_tail.cpp3
8 files changed, 121 insertions, 8 deletions
diff --git a/src/mongo/db/repl/SConscript b/src/mongo/db/repl/SConscript
index 14afac08cdf..f6fa162790b 100644
--- a/src/mongo/db/repl/SConscript
+++ b/src/mongo/db/repl/SConscript
@@ -80,10 +80,11 @@ env.Library('repl_coordinator_impl',
'check_quorum_for_config_change.cpp',
'elect_cmd_runner.cpp',
'freshness_checker.cpp',
+ 'repl_client_info.cpp',
+ 'replica_set_config_checks.cpp',
'replication_coordinator_impl.cpp',
'replication_coordinator_impl_elect.cpp',
'replication_coordinator_impl_heartbeat.cpp',
- 'replica_set_config_checks.cpp',
],
LIBDEPS=[
'$BUILD_DIR/mongo/db/common',
diff --git a/src/mongo/db/repl/master_slave.cpp b/src/mongo/db/repl/master_slave.cpp
index 3c7c14d0ee8..b0ab3cb5037 100644
--- a/src/mongo/db/repl/master_slave.cpp
+++ b/src/mongo/db/repl/master_slave.cpp
@@ -61,6 +61,7 @@
#include "mongo/db/operation_context_impl.h"
#include "mongo/db/ops/update.h"
#include "mongo/db/query/internal_plans.h"
+#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/repl/handshake_args.h"
#include "mongo/db/repl/oplog.h"
#include "mongo/db/repl/replication_coordinator_global.h"
@@ -381,7 +382,7 @@ namespace repl {
return appendCommandStatus(result, status);
}
- txn->getClient()->setRemoteID(handshake.getRid());
+ ReplClientInfo::forClient(txn->getClient()).setRemoteID(handshake.getRid());
status = getGlobalReplicationCoordinator()->processHandshake(txn, handshake);
return appendCommandStatus(result, status);
diff --git a/src/mongo/db/repl/oplog.cpp b/src/mongo/db/repl/oplog.cpp
index 8f3bbe52de5..ae387139c9a 100644
--- a/src/mongo/db/repl/oplog.cpp
+++ b/src/mongo/db/repl/oplog.cpp
@@ -61,6 +61,7 @@
#include "mongo/db/ops/update.h"
#include "mongo/db/ops/update_lifecycle_impl.h"
#include "mongo/db/repl/bgsync.h"
+#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/repl/replication_coordinator_global.h"
#include "mongo/db/stats/counters.h"
#include "mongo/db/storage/storage_engine.h"
@@ -292,11 +293,10 @@ namespace {
OplogDocWriter writer( partial, obj );
checkOplogInsert( _localOplogCollection->insertDocument( txn, &writer, false ) );
- txn->getClient()->setLastOp( slot.first );
+ ReplClientInfo::forClient(txn->getClient()).setLastOp( slot.first );
}
- OpTime writeOpsToOplog(OperationContext* txn,
- const std::deque<BSONObj>& ops) {
+ OpTime writeOpsToOplog(OperationContext* txn, const std::deque<BSONObj>& ops) {
ReplicationCoordinator* replCoord = getGlobalReplicationCoordinator();
OpTime lastOptime = replCoord->getMyLastOptime();
invariant(!ops.empty());
diff --git a/src/mongo/db/repl/repl_client_info.cpp b/src/mongo/db/repl/repl_client_info.cpp
new file mode 100644
index 00000000000..2f8a1e72470
--- /dev/null
+++ b/src/mongo/db/repl/repl_client_info.cpp
@@ -0,0 +1,45 @@
+/**
+ * Copyright (C) 2015 MongoDB Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the GNU Affero General Public License in all respects for
+ * all of the code used other than as permitted herein. If you modify file(s)
+ * with this exception, you may extend this exception to your version of the
+ * file(s), but you are not obligated to do so. If you do not wish to do so,
+ * delete this exception statement from your version. If you delete this
+ * exception statement from all source files in the program, then also delete
+ * it in the license file.
+ */
+
+#include "mongo/platform/basic.h"
+
+#include "mongo/db/repl/repl_client_info.h"
+
+#include "mongo/base/init.h"
+#include "mongo/db/client.h"
+#include "mongo/db/jsobj.h"
+#include "mongo/util/decorable.h"
+
+namespace mongo {
+namespace repl {
+
+ const Client::Decoration<ReplClientInfo> ReplClientInfo::forClient =
+ Client::declareDecoration<ReplClientInfo>();
+
+} // namespace repl
+} // namespace mongo
diff --git a/src/mongo/db/repl/repl_client_info.h b/src/mongo/db/repl/repl_client_info.h
new file mode 100644
index 00000000000..3aa0c73b66f
--- /dev/null
+++ b/src/mongo/db/repl/repl_client_info.h
@@ -0,0 +1,59 @@
+/**
+ * Copyright (C) 2015 MongoDB Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the GNU Affero General Public License in all respects for
+ * all of the code used other than as permitted herein. If you modify file(s)
+ * with this exception, you may extend this exception to your version of the
+ * file(s), but you are not obligated to do so. If you do not wish to do so,
+ * delete this exception statement from your version. If you delete this
+ * exception statement from all source files in the program, then also delete
+ * it in the license file.
+ */
+
+#pragma once
+
+#include "mongo/bson/oid.h"
+#include "mongo/bson/optime.h"
+#include "mongo/db/client.h"
+
+namespace mongo {
+
+ class BSONObjBuilder;
+ class Client;
+
+namespace repl {
+
+ class ReplClientInfo {
+ public:
+ static const Client::Decoration<ReplClientInfo> forClient;
+
+ void setLastOp(OpTime op) { _lastOp = op; }
+ OpTime getLastOp() const { return _lastOp; }
+
+ // Only used for master/slave
+ void setRemoteID(OID rid) { _remoteId = rid; }
+ OID getRemoteID() const { return _remoteId; }
+
+ private:
+ OpTime _lastOp = OpTime();
+ OID _remoteId = OID();
+ };
+
+} // namespace repl
+} // namespace mongo
diff --git a/src/mongo/db/repl/replication_coordinator_impl.cpp b/src/mongo/db/repl/replication_coordinator_impl.cpp
index b5862803088..3ee5b1227ea 100644
--- a/src/mongo/db/repl/replication_coordinator_impl.cpp
+++ b/src/mongo/db/repl/replication_coordinator_impl.cpp
@@ -45,6 +45,7 @@
#include "mongo/db/repl/freshness_checker.h"
#include "mongo/db/repl/handshake_args.h"
#include "mongo/db/repl/is_master_response.h"
+#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/repl/repl_set_heartbeat_args.h"
#include "mongo/db/repl/repl_set_heartbeat_response.h"
#include "mongo/db/repl/repl_settings.h"
@@ -912,7 +913,11 @@ namespace {
Timer timer;
boost::unique_lock<boost::mutex> lock(_mutex);
return _awaitReplication_inlock(
- &timer, &lock, txn, txn->getClient()->getLastOp(), writeConcern);
+ &timer,
+ &lock,
+ txn,
+ ReplClientInfo::forClient(txn->getClient()).getLastOp(),
+ writeConcern);
}
ReplicationCoordinator::StatusAndDuration ReplicationCoordinatorImpl::_awaitReplication_inlock(
diff --git a/src/mongo/db/repl/rs_initialsync.cpp b/src/mongo/db/repl/rs_initialsync.cpp
index be6525bd850..6fdf3e72190 100644
--- a/src/mongo/db/repl/rs_initialsync.cpp
+++ b/src/mongo/db/repl/rs_initialsync.cpp
@@ -50,6 +50,7 @@
#include "mongo/db/repl/minvalid.h"
#include "mongo/db/repl/oplog.h"
#include "mongo/db/repl/oplogreader.h"
+#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/repl/replication_coordinator_global.h"
#include "mongo/util/exit.h"
#include "mongo/util/log.h"
@@ -391,7 +392,7 @@ namespace {
ops.push_back(lastOp);
OpTime lastOptime = writeOpsToOplog(&txn, ops);
- txn.getClient()->setLastOp(lastOptime);
+ ReplClientInfo::forClient(txn.getClient()).setLastOp(lastOptime);
replCoord->setMyLastOptime(lastOptime);
setNewOptime(lastOptime);
diff --git a/src/mongo/db/repl/sync_tail.cpp b/src/mongo/db/repl/sync_tail.cpp
index 2a3e299a62c..7b6349a1738 100644
--- a/src/mongo/db/repl/sync_tail.cpp
+++ b/src/mongo/db/repl/sync_tail.cpp
@@ -52,6 +52,7 @@
#include "mongo/db/repl/bgsync.h"
#include "mongo/db/repl/minvalid.h"
#include "mongo/db/repl/oplog.h"
+#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/repl/replication_coordinator_global.h"
#include "mongo/db/stats/timer_stats.h"
#include "mongo/util/exit.h"
@@ -307,7 +308,7 @@ namespace repl {
if (mustAwaitCommit) {
txn->recoveryUnit()->awaitCommit();
}
- txn->getClient()->setLastOp(lastOpTime);
+ ReplClientInfo::forClient(txn->getClient()).setLastOp(lastOpTime);
replCoord->setMyLastOptime(lastOpTime);
setNewOptime(lastOpTime);