diff options
author | Andy Schwerin <schwerin@mongodb.com> | 2015-03-26 18:45:22 -0400 |
---|---|---|
committer | Andy Schwerin <schwerin@mongodb.com> | 2015-04-06 10:16:23 -0400 |
commit | 90b7f774b818a1038cc525a9fca14207d8d5ff71 (patch) | |
tree | 604285e3d69ef379626ddd8f0a57068c287ea2ef /src/mongo/db/repl | |
parent | 387e39a07522aec114a64146871eab2e015d7444 (diff) | |
download | mongo-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/SConscript | 3 | ||||
-rw-r--r-- | src/mongo/db/repl/master_slave.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/repl/oplog.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/repl/repl_client_info.cpp | 45 | ||||
-rw-r--r-- | src/mongo/db/repl/repl_client_info.h | 59 | ||||
-rw-r--r-- | src/mongo/db/repl/replication_coordinator_impl.cpp | 7 | ||||
-rw-r--r-- | src/mongo/db/repl/rs_initialsync.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_tail.cpp | 3 |
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); |