static void recover2PCForDatabase(database_info *db_info) { PGconn *coord_conn; txn_info *cur_txn; if (verbose_opt) fprintf(outf, "%s: recovering 2PC for database \"%s\"\n", progname, db_info->database_name); coord_conn = loginDatabase(coordinator_host, coordinator_port, username, password, db_info->database_name, progname, "auto", password_prompt); if (coord_conn == NULL) { fprintf(errf, "Could not connect to the database %s.\n", db_info->database_name); return; } if (!setMaintenanceMode(coord_conn)) { /* Cannot recover */ fprintf(errf, "Skipping database %s.\n", db_info->database_name); PQfinish(coord_conn); return; } if (verbose_opt) fprintf(outf, "%s: connected to the database \"%s\"\n", progname, db_info->database_name); for(cur_txn = db_info->head_txn_info; cur_txn; cur_txn = cur_txn->next) { recover2PC(coord_conn, cur_txn); } PQfinish(coord_conn); }
Status LegacyReplicationCoordinator::processReplSetMaintenance(OperationContext* txn, bool activate, BSONObjBuilder* resultObj) { if (!setMaintenanceMode(txn, activate)) { if (theReplSet->isPrimary()) { return Status(ErrorCodes::NotSecondary, "primaries can't modify maintenance mode"); } else { return Status(ErrorCodes::OperationFailed, "already out of maintenance mode"); } } return Status::OK(); }
Status LegacyReplicationCoordinator::processReplSetMaintenance(bool activate, BSONObjBuilder* resultObj) { Status status = _checkReplEnabledForCommand(resultObj); if (!status.isOK()) { return status; } if (!setMaintenanceMode(activate)) { if (theReplSet->isPrimary()) { return Status(ErrorCodes::NotSecondary, "primaries can't modify maintenance mode"); } else { return Status(ErrorCodes::OperationFailed, "already out of maintenance mode"); } } return Status::OK(); }