diff options
author | Andy Schwerin <schwerin@mongodb.com> | 2016-05-09 16:27:06 -0400 |
---|---|---|
committer | Andy Schwerin <schwerin@mongodb.com> | 2016-05-17 11:11:57 -0400 |
commit | 76de5323b88080f852ca4c2f42593502d26c5620 (patch) | |
tree | ed2757f12d12670a25f29529c78b327bb308263d /src/mongo/db/repl | |
parent | 73a042328a539b51b3bf35efc16ec3245381dc40 (diff) | |
download | mongo-76de5323b88080f852ca4c2f42593502d26c5620.tar.gz |
SERVER-24104 Replace stdx::duration with mongo::Duration.
The mongo::Duration type does overflow checking on casts and arithmetic.
This patch also moves DESTRUCTOR_GUARD out of assert_util.h into
destructor_guard.h in order to break an include cycle with duration.h.
Diffstat (limited to 'src/mongo/db/repl')
-rw-r--r-- | src/mongo/db/repl/applier.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/collection_cloner.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/data_replicator.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/database_cloner.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/multiapplier.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/oplog_fetcher.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/repl/oplogreader.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/repl/replication_coordinator_external_state_mock.h | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/replication_coordinator_impl.cpp | 24 | ||||
-rw-r--r-- | src/mongo/db/repl/reporter.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_source_feedback.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_source_resolver.h | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_tail.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/task_runner.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/topology_coordinator_impl.cpp | 12 | ||||
-rw-r--r-- | src/mongo/db/repl/topology_coordinator_impl_test.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp | 1 |
17 files changed, 40 insertions, 21 deletions
diff --git a/src/mongo/db/repl/applier.cpp b/src/mongo/db/repl/applier.cpp index ef7e37debde..4eda40c6ab1 100644 --- a/src/mongo/db/repl/applier.cpp +++ b/src/mongo/db/repl/applier.cpp @@ -35,6 +35,7 @@ #include "mongo/db/operation_context.h" #include "mongo/db/repl/replication_executor.h" #include "mongo/util/assert_util.h" +#include "mongo/util/destructor_guard.h" #include "mongo/util/mongoutils/str.h" namespace mongo { diff --git a/src/mongo/db/repl/collection_cloner.cpp b/src/mongo/db/repl/collection_cloner.cpp index 1f71fe762e7..95c2fd66baf 100644 --- a/src/mongo/db/repl/collection_cloner.cpp +++ b/src/mongo/db/repl/collection_cloner.cpp @@ -33,6 +33,7 @@ #include "mongo/db/repl/collection_cloner.h" #include "mongo/util/assert_util.h" +#include "mongo/util/destructor_guard.h" #include "mongo/util/log.h" #include "mongo/util/mongoutils/str.h" diff --git a/src/mongo/db/repl/data_replicator.cpp b/src/mongo/db/repl/data_replicator.cpp index b8f2d7f3a3a..c72427f3d40 100644 --- a/src/mongo/db/repl/data_replicator.cpp +++ b/src/mongo/db/repl/data_replicator.cpp @@ -52,6 +52,7 @@ #include "mongo/stdx/memory.h" #include "mongo/stdx/thread.h" #include "mongo/util/assert_util.h" +#include "mongo/util/destructor_guard.h" #include "mongo/util/fail_point_service.h" #include "mongo/util/log.h" #include "mongo/util/mongoutils/str.h" diff --git a/src/mongo/db/repl/database_cloner.cpp b/src/mongo/db/repl/database_cloner.cpp index b0c0bddcd01..da4d3c33887 100644 --- a/src/mongo/db/repl/database_cloner.cpp +++ b/src/mongo/db/repl/database_cloner.cpp @@ -39,6 +39,7 @@ #include "mongo/db/catalog/collection_options.h" #include "mongo/stdx/functional.h" #include "mongo/util/assert_util.h" +#include "mongo/util/destructor_guard.h" #include "mongo/util/log.h" #include "mongo/util/mongoutils/str.h" diff --git a/src/mongo/db/repl/multiapplier.cpp b/src/mongo/db/repl/multiapplier.cpp index 8db87b5e1f5..0fe05fa48bb 100644 --- a/src/mongo/db/repl/multiapplier.cpp +++ b/src/mongo/db/repl/multiapplier.cpp @@ -37,6 +37,7 @@ #include "mongo/db/operation_context.h" #include "mongo/db/repl/optime.h" #include "mongo/db/repl/replication_executor.h" +#include "mongo/util/destructor_guard.h" namespace mongo { namespace repl { diff --git a/src/mongo/db/repl/oplog_fetcher.cpp b/src/mongo/db/repl/oplog_fetcher.cpp index fcb41bdca51..1655a717210 100644 --- a/src/mongo/db/repl/oplog_fetcher.cpp +++ b/src/mongo/db/repl/oplog_fetcher.cpp @@ -53,8 +53,10 @@ Milliseconds calculateAwaitDataTimeout(const ReplicaSetConfig& config) { // Under protocol version 1, make the awaitData timeout (maxTimeMS) dependent on the election // timeout. This enables the sync source to communicate liveness of the primary to secondaries. // Under protocol version 0, use a default timeout of 2 seconds for awaitData. - return config.getProtocolVersion() == 1LL ? config.getElectionTimeoutPeriod() / 2 - : OplogFetcher::kDefaultProtocolZeroAwaitDataTimeout; + if (config.getProtocolVersion() == 1LL) { + return config.getElectionTimeoutPeriod() / 2; + } + return OplogFetcher::kDefaultProtocolZeroAwaitDataTimeout; } /** diff --git a/src/mongo/db/repl/oplogreader.cpp b/src/mongo/db/repl/oplogreader.cpp index e1823bad682..e9e7b79c261 100644 --- a/src/mongo/db/repl/oplogreader.cpp +++ b/src/mongo/db/repl/oplogreader.cpp @@ -138,7 +138,8 @@ HostAndPort OplogReader::getHost() const { void OplogReader::connectToSyncSource(OperationContext* txn, const OpTime& lastOpTimeFetched, ReplicationCoordinator* replCoord) { - const Timestamp sentinelTimestamp(duration_cast<Seconds>(Milliseconds(curTimeMillis64())), 0); + const Timestamp sentinelTimestamp(duration_cast<Seconds>(Date_t::now().toDurationSinceEpoch()), + 0); const OpTime sentinel(sentinelTimestamp, std::numeric_limits<long long>::max()); OpTime oldestOpTimeSeen = sentinel; diff --git a/src/mongo/db/repl/replication_coordinator_external_state_mock.h b/src/mongo/db/repl/replication_coordinator_external_state_mock.h index 311de9c5e58..77d883df480 100644 --- a/src/mongo/db/repl/replication_coordinator_external_state_mock.h +++ b/src/mongo/db/repl/replication_coordinator_external_state_mock.h @@ -38,6 +38,7 @@ #include "mongo/db/repl/last_vote.h" #include "mongo/db/repl/replication_coordinator_external_state.h" #include "mongo/stdx/condition_variable.h" +#include "mongo/stdx/mutex.h" #include "mongo/stdx/thread.h" #include "mongo/util/net/hostandport.h" diff --git a/src/mongo/db/repl/replication_coordinator_impl.cpp b/src/mongo/db/repl/replication_coordinator_impl.cpp index 36e0ea67444..f086e293cfa 100644 --- a/src/mongo/db/repl/replication_coordinator_impl.cpp +++ b/src/mongo/db/repl/replication_coordinator_impl.cpp @@ -604,7 +604,7 @@ Status ReplicationCoordinatorImpl::waitForMemberState(MemberState expectedState, stdx::unique_lock<stdx::mutex> lk(_mutex); auto pred = [this, expectedState]() { return _memberState == expectedState; }; - if (!_memberStateChange.wait_for(lk, timeout, pred)) { + if (!_memberStateChange.wait_for(lk, timeout.toSystemDuration(), pred)) { return Status(ErrorCodes::ExceededTimeLimit, str::stream() << "Timed out waiting for state to become " << expectedState.toString() << ". Current state is " @@ -779,7 +779,7 @@ Status ReplicationCoordinatorImpl::waitForDrainFinish(Milliseconds timeout) { stdx::unique_lock<stdx::mutex> lk(_mutex); auto pred = [this]() { return !_isWaitingForDrainToComplete; }; - if (!_drainFinishedCond.wait_for(lk, timeout, pred)) { + if (!_drainFinishedCond.wait_for(lk, timeout.toSystemDuration(), pred)) { return Status(ErrorCodes::ExceededTimeLimit, "Timed out waiting to finish draining applier buffer"); } @@ -1096,13 +1096,13 @@ ReadConcernResponse ReplicationCoordinatorImpl::waitUntilOpTime(OperationContext if (isMajorityReadConcern) { // Wait for a snapshot that meets our needs (< targetOpTime). const auto waitTime = CurOp::get(txn)->isMaxTimeSet() - ? Microseconds(txn->getRemainingMaxTimeMicros()) + ? Microseconds(static_cast<int64_t>(txn->getRemainingMaxTimeMicros())) : Microseconds{0}; const auto waitForever = waitTime == Microseconds{0}; LOG(2) << "waitUntilOpTime: waiting for a new snapshot to occur for micros: " << waitTime; if (!waitForever) { - _currentCommittedSnapshotCond.wait_for(lock, waitTime); + _currentCommittedSnapshotCond.wait_for(lock, waitTime.toSystemDuration()); } else { _currentCommittedSnapshotCond.wait(lock); } @@ -1117,7 +1117,9 @@ ReadConcernResponse ReplicationCoordinatorImpl::waitUntilOpTime(OperationContext LOG(3) << "Waiting for OpTime: " << waitInfo; if (CurOp::get(txn)->isMaxTimeSet()) { - condVar.wait_for(lock, Microseconds(txn->getRemainingMaxTimeMicros())); + condVar.wait_for(lock, + Microseconds(static_cast<int64_t>(txn->getRemainingMaxTimeMicros())) + .toSystemDuration()); } else { condVar.wait(lock); } @@ -1543,7 +1545,8 @@ ReplicationCoordinator::StatusAndDuration ReplicationCoordinatorImpl::_awaitRepl Status(ErrorCodes::ShutdownInProgress, "Replication is being shut down"), elapsed); } - const Microseconds maxTimeMicrosRemaining{txn->getRemainingMaxTimeMicros()}; + const Microseconds maxTimeMicrosRemaining{ + static_cast<int64_t>(txn->getRemainingMaxTimeMicros())}; Microseconds waitTime = Microseconds::max(); if (maxTimeMicrosRemaining != Microseconds::zero()) { waitTime = maxTimeMicrosRemaining; @@ -1557,7 +1560,7 @@ ReplicationCoordinator::StatusAndDuration ReplicationCoordinatorImpl::_awaitRepl if (waitForever) { condVar.wait(*lock); } else { - condVar.wait_for(*lock, waitTime); + condVar.wait_for(*lock, waitTime.toSystemDuration()); } } @@ -2937,7 +2940,8 @@ bool ReplicationCoordinatorImpl::shouldChangeSyncSource(const HostAndPort& curre SyncSourceResolverResponse ReplicationCoordinatorImpl::selectSyncSource( OperationContext* txn, const OpTime& lastOpTimeFetched) { - const Timestamp sentinelTimestamp(duration_cast<Seconds>(Milliseconds(curTimeMillis64())), 0); + const Timestamp sentinelTimestamp(duration_cast<Seconds>(Date_t::now().toDurationSinceEpoch()), + 0); const OpTime sentinel(sentinelTimestamp, std::numeric_limits<long long>::max()); OpTime earliestOpTimeSeen = sentinel; SyncSourceResolverResponse resp; @@ -3336,11 +3340,11 @@ void ReplicationCoordinatorImpl::waitUntilSnapshotCommitted(OperationContext* tx stdx::unique_lock<stdx::mutex> lock(_mutex); while (!_currentCommittedSnapshot || _currentCommittedSnapshot->name < untilSnapshot) { - Microseconds waitTime(txn->getRemainingMaxTimeMicros()); + Microseconds waitTime(static_cast<int64_t>(txn->getRemainingMaxTimeMicros())); if (waitTime == Microseconds(0)) { _currentCommittedSnapshotCond.wait(lock); } else { - _currentCommittedSnapshotCond.wait_for(lock, waitTime); + _currentCommittedSnapshotCond.wait_for(lock, waitTime.toSystemDuration()); } txn->checkForInterrupt(); } diff --git a/src/mongo/db/repl/reporter.cpp b/src/mongo/db/repl/reporter.cpp index b9e9d9cb8e8..f7f0dca3873 100644 --- a/src/mongo/db/repl/reporter.cpp +++ b/src/mongo/db/repl/reporter.cpp @@ -37,6 +37,7 @@ #include "mongo/db/repl/update_position_args.h" #include "mongo/rpc/get_status_from_command_result.h" #include "mongo/util/assert_util.h" +#include "mongo/util/destructor_guard.h" #include "mongo/util/log.h" namespace mongo { diff --git a/src/mongo/db/repl/sync_source_feedback.cpp b/src/mongo/db/repl/sync_source_feedback.cpp index 136978df15b..411b3fb0133 100644 --- a/src/mongo/db/repl/sync_source_feedback.cpp +++ b/src/mongo/db/repl/sync_source_feedback.cpp @@ -191,7 +191,8 @@ void SyncSourceFeedback::run() { // this class. stdx::unique_lock<stdx::mutex> lock(_mtx); while (!_positionChanged && !_shutdownSignaled) { - if (_cond.wait_for(lock, keepAliveInterval) == stdx::cv_status::timeout) { + if (_cond.wait_for(lock, keepAliveInterval.toSystemDuration()) == + stdx::cv_status::timeout) { MemberState state = ReplicationCoordinator::get(txn.get())->getMemberState(); if (!(state.primary() || state.startup())) { break; diff --git a/src/mongo/db/repl/sync_source_resolver.h b/src/mongo/db/repl/sync_source_resolver.h index be46c78c3b1..fd098374882 100644 --- a/src/mongo/db/repl/sync_source_resolver.h +++ b/src/mongo/db/repl/sync_source_resolver.h @@ -30,6 +30,7 @@ #include "mongo/base/status_with.h" #include "mongo/db/repl/optime.h" +#include "mongo/stdx/mutex.h" #include "mongo/util/net/hostandport.h" namespace mongo { diff --git a/src/mongo/db/repl/sync_tail.cpp b/src/mongo/db/repl/sync_tail.cpp index 1341b2c16e3..313da81150c 100644 --- a/src/mongo/db/repl/sync_tail.cpp +++ b/src/mongo/db/repl/sync_tail.cpp @@ -601,7 +601,7 @@ public: if (_ops.empty()) { // We intentionally don't care about whether this returns due to signaling or timeout // since we do the same thing either way: return whatever is in _ops. - (void)_cv.wait_for(lk, maxWaitTime); + (void)_cv.wait_for(lk, maxWaitTime.toSystemDuration()); } OpQueue ops = std::move(_ops); diff --git a/src/mongo/db/repl/task_runner.cpp b/src/mongo/db/repl/task_runner.cpp index 37d05af51a6..1558e88929a 100644 --- a/src/mongo/db/repl/task_runner.cpp +++ b/src/mongo/db/repl/task_runner.cpp @@ -42,6 +42,7 @@ #include "mongo/util/assert_util.h" #include "mongo/util/concurrency/old_thread_pool.h" #include "mongo/util/concurrency/thread_name.h" +#include "mongo/util/destructor_guard.h" #include "mongo/util/mongoutils/str.h" #include "mongo/util/log.h" diff --git a/src/mongo/db/repl/topology_coordinator_impl.cpp b/src/mongo/db/repl/topology_coordinator_impl.cpp index e2cf990a13f..45f8e6280ad 100644 --- a/src/mongo/db/repl/topology_coordinator_impl.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl.cpp @@ -857,9 +857,9 @@ std::pair<ReplSetHeartbeatArgs, Milliseconds> TopologyCoordinatorImpl::prepareHe hbArgs.setConfigVersion(-2); } - const Milliseconds timeoutPeriod(_rsConfig.isInitialized() - ? _rsConfig.getHeartbeatTimeoutPeriodMillis() - : ReplicaSetConfig::kDefaultHeartbeatTimeoutPeriod); + const Milliseconds timeoutPeriod( + _rsConfig.isInitialized() ? _rsConfig.getHeartbeatTimeoutPeriodMillis() + : Milliseconds{ReplicaSetConfig::kDefaultHeartbeatTimeoutPeriod}); const Milliseconds timeout = timeoutPeriod - alreadyElapsed; return std::make_pair(hbArgs, timeout); } @@ -893,9 +893,9 @@ std::pair<ReplSetHeartbeatArgsV1, Milliseconds> TopologyCoordinatorImpl::prepare hbArgs.setTerm(OpTime::kInitialTerm); } - const Milliseconds timeoutPeriod(_rsConfig.isInitialized() - ? _rsConfig.getHeartbeatTimeoutPeriodMillis() - : ReplicaSetConfig::kDefaultHeartbeatTimeoutPeriod); + const Milliseconds timeoutPeriod( + _rsConfig.isInitialized() ? _rsConfig.getHeartbeatTimeoutPeriodMillis() + : Milliseconds{ReplicaSetConfig::kDefaultHeartbeatTimeoutPeriod}); const Milliseconds timeout(timeoutPeriod - alreadyElapsed); return std::make_pair(hbArgs, timeout); } diff --git a/src/mongo/db/repl/topology_coordinator_impl_test.cpp b/src/mongo/db/repl/topology_coordinator_impl_test.cpp index b1ff5db42cf..b0e41018c32 100644 --- a/src/mongo/db/repl/topology_coordinator_impl_test.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl_test.cpp @@ -39,6 +39,7 @@ #include "mongo/db/repl/topology_coordinator.h" #include "mongo/db/repl/topology_coordinator_impl.h" #include "mongo/db/server_options.h" +#include "mongo/logger/logger.h" #include "mongo/s/catalog/catalog_manager.h" #include "mongo/unittest/unittest.h" #include "mongo/util/assert_util.h" diff --git a/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp b/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp index e68d84e9d6d..79d6f7e6727 100644 --- a/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp @@ -40,6 +40,7 @@ #include "mongo/db/repl/topology_coordinator.h" #include "mongo/db/repl/topology_coordinator_impl.h" #include "mongo/db/server_options.h" +#include "mongo/logger/logger.h" #include "mongo/s/catalog/catalog_manager.h" #include "mongo/unittest/unittest.h" #include "mongo/util/assert_util.h" |