Неожиданное прерывание соединения Postgres в TransactionScope при обработке PostgresException - PullRequest
1 голос
/ 02 мая 2020

У меня есть такой код:

await using var db = new NpgsqlConnection(ConnectionString);
using var tx = new TransactionScope(TransactionScopeOption.Required, options, TransactionScopeAsyncFlowOption.Enabled);

// 1 step: SELECT * FROM table WHERE ID = 1
// 2 step: UPDATE table SET status = "initiated"

if (updatedRows > 0)
{
    tx.Complete();
}

Переменная options содержит IsolationLevel = IsolationLevel.RepeatableRead. Также код, обернутый в Polly WaitAndRetryAsync, который соответственно обернут в FallbackAsync для обработки одновременного обновления статуса в той же строке - просто повторите (SELECT, а затем UPDATE) такие операции, как Postgres Документы говорят на PostgresException с SqlCode = 40001. Все отлично работает, за исключением мелочей: в журнале Postgres я заметил много строк, таких как:

LOG:  unexpected EOF on client connection with an open transaction
LOG:  unexpected EOF on client connection with an open transaction
...

С одной точки зрения, транзакция была сброшена из-за PostgresException, которую я пытался обработать. Но если это так, значит ли это, что TransactionScope с Postgres соединением не имеет какого-либо механизма отката c, который мягко закрывает соединение без неожиданных падений? Или у меня есть какие-либо недопонимания в этой ситуации?

UPD Я думаю, что причиной этой проблемы были некоторые другие соединения, которые я создал для запроса (из других бизнес-уровней), которых у меня нет исправлено (переделано) еще. Поэтому я думаю, что вопрос, вероятно, может быть закрыт, но я все еще собираюсь найти информацию о TransactionScope в отношении Postgres.

...