Make witness server node update an atomic operation

If the connection to the primary is lost, roll back to the previously
known state.

TRUNCATE is of course not MVCC-friendly, but that shouldn't matter here
as only one process should ever be looking at this table.
This commit is contained in:
Ian Barwick
2016-04-01 11:07:17 +09:00
parent 4b5c84921c
commit de5908c122

View File

@@ -1125,6 +1125,8 @@ copy_configuration(PGconn *masterconn, PGconn *witnessconn, char *cluster_name)
PGresult *res;
int i;
begin_transaction(witnessconn);
sqlquery_snprintf(sqlquery, "TRUNCATE TABLE %s.repl_nodes", get_repmgr_schema_quoted(witnessconn));
log_verbose(LOG_DEBUG, "copy_configuration():\n%s\n", sqlquery);
@@ -1149,6 +1151,8 @@ copy_configuration(PGconn *masterconn, PGconn *witnessconn, char *cluster_name)
log_err("Unable to retrieve node records from master:\n%s\n",
PQerrorMessage(masterconn));
PQclear(res);
rollback_transaction(witnessconn);
return false;
}
@@ -1186,11 +1190,15 @@ copy_configuration(PGconn *masterconn, PGconn *witnessconn, char *cluster_name)
log_err("Unable to copy node record to witness database\n%s\n",
PQerrorMessage(witnessconn));
rollback_transaction(witnessconn);
return false;
}
}
PQclear(res);
commit_transaction(witnessconn);
return true;
}