Merge pull request #2031 from citusdata/fix_immediate_shut_down_issue

Improve error handling on failures
pull/2038/head
Önder Kalacı 2018-03-02 10:04:12 +03:00 committed by GitHub
commit e7b28dd469
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 20 deletions

View File

@ -65,24 +65,7 @@ IsResponseOK(PGresult *result)
void
ForgetResults(MultiConnection *connection)
{
while (true)
{
PGresult *result = NULL;
const bool dontRaiseErrors = false;
result = GetRemoteCommandResult(connection, dontRaiseErrors);
if (result == NULL)
{
break;
}
if (PQresultStatus(result) == PGRES_COPY_IN)
{
PQputCopyEnd(connection->pgConn, NULL);
/* TODO: mark transaction as failed, once we can. */
}
PQclear(result);
}
ClearResults(connection, false);
}
@ -123,6 +106,14 @@ ClearResults(MultiConnection *connection, bool raiseErrors)
MarkRemoteTransactionFailed(connection, raiseErrors);
success = false;
/* an error happened, there is nothing we can do more */
if (PQresultStatus(result) == PGRES_FATAL_ERROR)
{
PQclear(result);
break;
}
}
PQclear(result);
@ -550,6 +541,12 @@ GetRemoteCommandResult(MultiConnection *connection, bool raiseInterrupts)
if (!FinishConnectionIO(connection, raiseInterrupts))
{
/* some error(s) happened while doing the I/O, signal the callers */
if (PQstatus(pgConn) == CONNECTION_BAD)
{
return PQmakeEmptyPGresult(pgConn, PGRES_FATAL_ERROR);
}
return NULL;
}

View File

@ -1446,6 +1446,12 @@ StoreQueryResult(CitusScanState *scanState, MultiConnection *connection,
commandFailed = true;
/* an error happened, there is nothing we can do more */
if (resultStatus == PGRES_FATAL_ERROR)
{
break;
}
/* continue, there could be other lingering results due to row mode */
continue;
}
@ -1565,6 +1571,12 @@ ConsumeQueryResult(MultiConnection *connection, bool failOnError, int64 *rows)
commandFailed = true;
/* an error happened, there is nothing we can do more */
if (status == PGRES_FATAL_ERROR)
{
break;
}
/* continue, there could be other lingering results due to row mode */
continue;
}

View File

@ -369,8 +369,8 @@ SELECT create_distributed_table('t1', 'a');
WARNING: function assign_distributed_transaction_id(integer, integer, unknown) does not exist
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
CONTEXT: while executing command on localhost:57637
ERROR: current transaction is aborted, commands ignored until end of transaction block
CONTEXT: while executing command on localhost:57637
ERROR: connection error: localhost:57637
DETAIL: another command is already in progress
\c regression
\c - - - :worker_1_port
DROP DATABASE another;