void syncDoInitialSync(ReplicationCoordinatorExternalState* replicationCoordinatorExternalState) { stdx::unique_lock<stdx::mutex> lk(_initialSyncMutex, stdx::defer_lock); if (!lk.try_lock()) { uasserted(34474, "Initial Sync Already Active."); } std::unique_ptr<BackgroundSync> bgsync; { log() << "Starting replication fetcher thread for initial sync"; auto txn = cc().makeOperationContext(); bgsync = stdx::make_unique<BackgroundSync>( replicationCoordinatorExternalState, replicationCoordinatorExternalState->makeInitialSyncOplogBuffer(txn.get())); bgsync->startup(txn.get()); createOplog(txn.get()); } ON_BLOCK_EXIT([&bgsync]() { log() << "Stopping replication fetcher thread for initial sync"; auto txn = cc().makeOperationContext(); bgsync->shutdown(txn.get()); bgsync->join(txn.get()); }); int failedAttempts = 0; while (failedAttempts < kMaxFailedAttempts) { try { // leave loop when successful Status status = _initialSync(bgsync.get()); if (status.isOK()) { break; } else { error() << status; } } catch (const DBException& e) { error() << e; // Return if in shutdown if (inShutdown()) { return; } } if (inShutdown()) { return; } error() << "initial sync attempt failed, " << (kMaxFailedAttempts - ++failedAttempts) << " attempts remaining"; sleepmillis(durationCount<Milliseconds>(kInitialSyncRetrySleepDuration)); } // No need to print a stack if (failedAttempts >= kMaxFailedAttempts) { severe() << "The maximum number of retries have been exhausted for initial sync."; fassertFailedNoTrace(16233); } }
void syncDoInitialSync(BackgroundSync* bgsync) { stdx::unique_lock<stdx::mutex> lk(_initialSyncMutex, stdx::defer_lock); if (!lk.try_lock()) { uasserted(34474, "Initial Sync Already Active."); } { const ServiceContext::UniqueOperationContext txnPtr = cc().makeOperationContext(); OperationContext& txn = *txnPtr; createOplog(&txn); } int failedAttempts = 0; while (failedAttempts < kMaxFailedAttempts) { try { // leave loop when successful Status status = _initialSync(bgsync); if (status.isOK()) { break; } else { error() << status; } } catch (const DBException& e) { error() << e; // Return if in shutdown if (inShutdown()) { return; } } if (inShutdown()) { return; } error() << "initial sync attempt failed, " << (kMaxFailedAttempts - ++failedAttempts) << " attempts remaining"; sleepmillis(durationCount<Milliseconds>(kInitialSyncRetrySleepDuration)); } // No need to print a stack if (failedAttempts >= kMaxFailedAttempts) { severe() << "The maximum number of retries have been exhausted for initial sync."; fassertFailedNoTrace(16233); } }
void syncDoInitialSync() { static const int maxFailedAttempts = 10; { OperationContextImpl txn; createOplog(&txn); } int failedAttempts = 0; while ( failedAttempts < maxFailedAttempts ) { try { // leave loop when successful Status status = _initialSync(); if (status.isOK()) { break; } if (status == ErrorCodes::InitialSyncOplogSourceMissing) { sleepsecs(1); return; } } catch(const DBException& e) { error() << e ; // Return if in shutdown if (inShutdown()) { return; } } if (inShutdown()) { return; } error() << "initial sync attempt failed, " << (maxFailedAttempts - ++failedAttempts) << " attempts remaining"; sleepsecs(5); } // No need to print a stack if (failedAttempts >= maxFailedAttempts) { severe() << "The maximum number of retries have been exhausted for initial sync."; fassertFailedNoTrace(16233); } }
void syncDoInitialSync() { static const int maxFailedAttempts = 10; OperationContextImpl txn; createOplog(&txn); int failedAttempts = 0; while ( failedAttempts < maxFailedAttempts ) { try { _initialSync(); break; } catch(DBException& e) { failedAttempts++; mongoutils::str::stream msg; error() << "initial sync exception: " << e.toString() << " " << (maxFailedAttempts - failedAttempts) << " attempts remaining"; sleepsecs(5); } } fassert( 16233, failedAttempts < maxFailedAttempts); }