[ 
https://issues.apache.org/jira/browse/IGNITE-22088?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17841967#comment-17841967
 ] 

Igor Sapego commented on IGNITE-22088:
--------------------------------------

[~lunigorn] Originally, the client-side Retry Policy was implemented to retry 
operations on network failures, not on transaction lock. Retry Policy for 
transactions should be probably implemented on the server side and have 
different name and implementation.

> retryPolicy of IgniteClient doesn't work on transaction fail
> ------------------------------------------------------------
>
>                 Key: IGNITE-22088
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22088
>             Project: Ignite
>          Issue Type: Bug
>          Components: clients, thin client
>    Affects Versions: 3.0.0-beta1
>            Reporter: Igor
>            Priority: Major
>              Labels: ignite-3
>
> *Details:*
> IgniteClient do not run retry with set retryPolicy on transaction lock. The 
> default retry policy also doesn't work. The debugging also shows that no any 
> code inside `RetryReadPolicy` is not used during transaction lock exception.
> *Steps to reproduce:*
> Run the next code:
> {code:java}
> AtomicInteger retriesCount = new AtomicInteger(0);
> RetryReadPolicy retry = new RetryReadPolicy() {
>     @Override
>     public boolean shouldRetry(RetryPolicyContext context) {
>         System.out.println("CHECK IF RETRY SHOULD HAPPEN");
>         retriesCount.addAndGet(1);
>         return super.shouldRetry(context);
>     }
> };
> try (IgniteClient igniteClient1 = 
> IgniteClient.builder().retryPolicy(retry).addresses("localhost:10800").build();
>         IgniteClient igniteClient2 = 
> IgniteClient.builder().retryPolicy(retry).addresses("localhost:10800").build())
>  {
>     igniteClient1.sql().execute(null, "CREATE TABLE teachers(id INTEGER 
> PRIMARY KEY, name VARCHAR(200))");
>     Transaction tr1 = igniteClient1.transactions().begin();
>     Transaction tr2 = igniteClient2.transactions().begin();
>     igniteClient1.sql().execute(tr1, "INSERT INTO TEACHERS (id, name) VALUES 
> (" + 3 + ", '" + "Pavel" + "')");
>     SqlException exception = assertThrows(SqlException.class, () -> 
> igniteClient2.sql().execute(tr2, "SELECT * FROM teachers"));
>     assertTrue(exception.getMessage().contains("Failed to acquire a lock due 
> to a possible deadlock "));
> }
> assertEquals(16, retriesCount.get()); {code}
> *Expected:*
> Executed without errors.
> *Actual:*
> Fails on the last step expected 16 retries, actual 0.



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

Reply via email to