[ 
https://issues.apache.org/jira/browse/IGNITE-28106?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Tupitsyn updated IGNITE-28106:
------------------------------------
    Description: 
Currently, if the client is closed (for example, if cluster node was restarted, 
or if the connection was lost), the transaction rollback fails with an error.
In fact, the server rolls back all transactions when a client disconnects, so 
we should not throw an exception.

Reproducer:
{code}
        [Test]
        public async Task TestRollBackOnClosedConnectionDoesNotThrow()
        {
            using var client = await IgniteClient.StartAsync(GetConfig());
            await using var tx = await client.Transactions.BeginAsync();
            await TestUtils.ForceLazyTxStart(tx, client);

            // ReSharper disable once DisposeOnUsingVariable
            client.Dispose();

            Assert.DoesNotThrowAsync(() => tx.RollbackAsync());
        }
{code}

  was:
Currently, if the channel is closed (for example, if cluster node was 
restarted), the transaction rollback fails with the error "Channel is closed".
It seems like an exception shouldn't be thrown in this case. For example, this 
wouldn't be expected by a user which uses a finally block to rollback a 
transaction.

Reproducer (for RetryPolicyTest)
{code:java}
@Test
public void testTransactionRollbackOnClosedChannel() {
    initServer(reqId -> reqId % 4 == 0);
    var plc = new TestRetryPolicy();

    try (var client = getClient(plc)) {
        RecordView<Tuple> recView = client.tables().table("t").recordView();
        Transaction tx = client.transactions().begin();

        try {
            ClientLazyTransaction.ensureStarted(tx, ((TcpIgniteClient) 
client).channel()).get1().join();
            assertThrows(IgniteException.class, () -> recView.get(tx, 
Tuple.create().set("id", 1)));
        } finally {
            tx.rollback(); // fails with "Channel is closed"
        }
    }
}
{code}


> .NET: Rollback of client transaction on a closed channel should not throw 
> exceptions
> ------------------------------------------------------------------------------------
>
>                 Key: IGNITE-28106
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28106
>             Project: Ignite
>          Issue Type: Improvement
>          Components: thin clients ai3
>    Affects Versions: 3.1
>            Reporter: Pavel Pereslegin
>            Assignee: Pavel Tupitsyn
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.2
>
>
> Currently, if the client is closed (for example, if cluster node was 
> restarted, or if the connection was lost), the transaction rollback fails 
> with an error.
> In fact, the server rolls back all transactions when a client disconnects, so 
> we should not throw an exception.
> Reproducer:
> {code}
>         [Test]
>         public async Task TestRollBackOnClosedConnectionDoesNotThrow()
>         {
>             using var client = await IgniteClient.StartAsync(GetConfig());
>             await using var tx = await client.Transactions.BeginAsync();
>             await TestUtils.ForceLazyTxStart(tx, client);
>             // ReSharper disable once DisposeOnUsingVariable
>             client.Dispose();
>             Assert.DoesNotThrowAsync(() => tx.RollbackAsync());
>         }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to