mirror of https://github.com/citusdata/citus.git
Relax assertion on transaction abort on PREPARE step
In case a failure happens when a transaction is failed on PREPARE, we used to hit an assertion for ensuring there is no pending activity on the connection. However, that's not true after the changes in #2031. Thus, we've replaced the assertion with a more generic function call to consume any pending activity, if exists.pull/2376/head
parent
8762af4473
commit
4cae856846
|
@ -528,8 +528,20 @@ FinishRemoteTransactionPrepare(struct MultiConnection *connection)
|
|||
transaction->transactionState = REMOTE_TRANS_PREPARED;
|
||||
}
|
||||
|
||||
result = GetRemoteCommandResult(connection, raiseErrors);
|
||||
Assert(!result);
|
||||
/*
|
||||
* Try to consume results of PREPARE TRANSACTION command. If we don't
|
||||
* succeed, rollback the transaction. Note that we've not committed on
|
||||
* any node yet, and we're not sure about the state of the worker node.
|
||||
* So rollbacking seems to be the safest action if the worker is
|
||||
* in a state where it can actually rollback.
|
||||
*/
|
||||
if (!ClearResults(connection, raiseErrors))
|
||||
{
|
||||
ereport(ERROR, (errmsg("failed to prepare transaction '%s' on host %s:%d",
|
||||
transaction->preparedName, connection->hostname,
|
||||
connection->port),
|
||||
errhint("Try re-running the command.")));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue