void DatabasesCloner::shutdown() { { LockGuard lock(_mutex); switch (_state) { case State::kPreStart: // Transition directly from PreStart to Complete if not started yet. _state = State::kComplete; return; case State::kRunning: _state = State::kShuttingDown; break; case State::kShuttingDown: case State::kComplete: // Nothing to do if we are already in ShuttingDown or Complete state. return; } } if (auto listDatabaseScheduler = _getListDatabasesScheduler()) { listDatabaseScheduler->shutdown(); } auto databaseCloners = _getDatabaseCloners(); for (auto&& cloner : databaseCloners) { cloner->shutdown(); } }
void DatabasesCloner::join() { if (auto listDatabaseScheduler = _getListDatabasesScheduler()) { listDatabaseScheduler->join(); } auto databaseCloners = _getDatabaseCloners(); for (auto&& cloner : databaseCloners) { cloner->join(); } }
void DatabasesCloner::shutdown() { if (auto listDatabaseScheduler = _getListDatabasesScheduler()) { listDatabaseScheduler->shutdown(); } auto databaseCloners = _getDatabaseCloners(); for (auto&& cloner : databaseCloners) { cloner->shutdown(); } LockGuard lk(_mutex); if (!_active) { return; } _active = false; _setStatus_inlock({ErrorCodes::CallbackCanceled, "Initial Sync Cancelled."}); }