You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Aleksey Plekhanov (Jira)" <ji...@apache.org> on 2019/10/15 15:53:00 UTC

[jira] [Updated] (IGNITE-12292) Java thin client: In some cases txId intersection (tx started on different nodes) leads to errors

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

Aleksey Plekhanov updated IGNITE-12292:
---------------------------------------
    Ignite Flags:   (was: Docs Required,Release Notes Required)

> Java thin client: In some cases txId intersection (tx started on different nodes) leads to errors
> -------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-12292
>                 URL: https://issues.apache.org/jira/browse/IGNITE-12292
>             Project: Ignite
>          Issue Type: Bug
>          Components: thin client
>    Affects Versions: 2.8
>            Reporter: Aleksey Plekhanov
>            Assignee: Aleksey Plekhanov
>            Priority: Major
>             Fix For: 2.8
>
>
> Reproducer:
> {code:java}
> public void testTxWithIdIntersection() throws Exception {
>     int CLUSTER_SIZE = 2;
>     try (LocalIgniteCluster cluster = LocalIgniteCluster.start(CLUSTER_SIZE);
>          IgniteClient client = Ignition.startClient(new ClientConfiguration()
>              .setAddresses(cluster.clientAddresses().toArray(new String[CLUSTER_SIZE])))
>     ) {
>         ClientCache<Integer, Integer> cache = client.createCache(new ClientCacheConfiguration().setName("cache")
>             .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL));
>         CyclicBarrier barrier = new CyclicBarrier(2);
>         GridTestUtils.runAsync(() -> {
>             try {
>                 // Another thread starts transaction here.
>                 barrier.await(1, TimeUnit.SECONDS);
>                 for (int i = 0; i < CLUSTER_SIZE; i++)
>                     dropAllThinClientConnections(Ignition.allGrids().get(i));
>                 ClientTransaction tx = client.transactions().txStart();
>                 barrier.await(1, TimeUnit.SECONDS);
>                 // Another thread puts to cache here.
>                 barrier.await(1, TimeUnit.SECONDS);
>                 tx.commit();
>                 barrier.await(1, TimeUnit.SECONDS);
>             }
>             catch (Exception e) {
>                 log.error("Unexpected error", e);
>             }
>         });
>         ClientTransaction tx = client.transactions().txStart();
>         barrier.await(1, TimeUnit.SECONDS);
>         // Another thread drops connections and create new transaction here, which started on another node with the
>         // same transaction id as we started in this thread.
>         barrier.await(1, TimeUnit.SECONDS);
>         try {
>             cache.put(0, 0);
>             fail("Exception expected");
>         }
>         catch (ClientException expected) {
>             // No-op.
>         }
>         tx.close();
>         barrier.await(1, TimeUnit.SECONDS);
>         // Another thread commit transaction here.
>         barrier.await(1, TimeUnit.SECONDS);
>         assertFalse(cache.containsKey(0));
>     }
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)