You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Andrey Mashenkov (Jira)" <ji...@apache.org> on 2024/04/01 09:28:00 UTC

[jira] [Updated] (IGNITE-21799) A transaction rollback fails with assertion error

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

Andrey Mashenkov updated IGNITE-21799:
--------------------------------------
    Description: 
A transaction rollback fails with 
{noformat}
java.lang.AssertionError: Thread does not have allowed operations
{noformat}

Here is a simple reproducer below.
You can use an`ItCommonsApiTest` to reproduce.
{code:java}
 @Test
    public void rollbackAsync() {
        Ignite node = CLUSTER.aliveNode();

        sql("CREATE TABLE IF NOT EXISTS TEST(ID INT PRIMARY KEY, VAL0 INT)");

        KeyValueView<Tuple, Tuple> view1 = node.tables().table("TEST").keyValueView();

        AtomicReference<CompletableFuture<Void>> rollbackFut = new AtomicReference<>();
        
        Transaction tx = node.transactions().begin();
        view1.getAsync(tx, Tuple.create().set("id", 101))
             .handle((unused, err) -> {
                    rollbackFut.set(tx.rollbackAsync()); // unconditional roll back

                    return null;
            }).join(); 

            rollbackFut.get().join(); // <- FAILS
        }
    }
{code}


  was:
A transaction rollback fails with 
{noformat}
java.lang.AssertionError: Thread does not have allowed operations
{noformat}

Here is a simple reproducer below.
You can use an`ItCommonTest` to reproduce.
{code:java}
 @Test
    public void rollbackAsync() {
        Ignite node = CLUSTER.aliveNode();

        sql("CREATE TABLE IF NOT EXISTS TEST(ID INT PRIMARY KEY, VAL0 INT)");

        KeyValueView<Tuple, Tuple> view1 = node.tables().table("TEST").keyValueView();

        AtomicReference<CompletableFuture<Void>> rollbackFut = new AtomicReference<>();
        
        Transaction tx = node.transactions().begin();
        view1.getAsync(tx, makeKey(101))
             .handle((unused, err) -> {
                    rollbackFut.set(tx.rollbackAsync()); // unconditional roll back

                    return null;
            }).join(); 

            rollbackFut.get().join(); // <- FAILS
        }
    }
{code}



> A transaction rollback fails with assertion error
> -------------------------------------------------
>
>                 Key: IGNITE-21799
>                 URL: https://issues.apache.org/jira/browse/IGNITE-21799
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Andrey Mashenkov
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-beta2
>
>
> A transaction rollback fails with 
> {noformat}
> java.lang.AssertionError: Thread does not have allowed operations
> {noformat}
> Here is a simple reproducer below.
> You can use an`ItCommonsApiTest` to reproduce.
> {code:java}
>  @Test
>     public void rollbackAsync() {
>         Ignite node = CLUSTER.aliveNode();
>         sql("CREATE TABLE IF NOT EXISTS TEST(ID INT PRIMARY KEY, VAL0 INT)");
>         KeyValueView<Tuple, Tuple> view1 = node.tables().table("TEST").keyValueView();
>         AtomicReference<CompletableFuture<Void>> rollbackFut = new AtomicReference<>();
>         
>         Transaction tx = node.transactions().begin();
>         view1.getAsync(tx, Tuple.create().set("id", 101))
>              .handle((unused, err) -> {
>                     rollbackFut.set(tx.rollbackAsync()); // unconditional roll back
>                     return null;
>             }).join(); 
>             rollbackFut.get().join(); // <- FAILS
>         }
>     }
> {code}



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