[infinispan-issues] [JBoss JIRA] (ISPN-10073) Nested async operations with HotRod client hang

William Burns (Jira) issues at jboss.org
Fri Mar 22 09:41:00 EDT 2019


    [ https://issues.jboss.org/browse/ISPN-10073?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13712174#comment-13712174 ] 

William Burns commented on ISPN-10073:
--------------------------------------

I added 
{code}
   public void testNestedPutIfAbsentCalls() throws ExecutionException, InterruptedException {
      CompletableFuture<Object> future = cache.putIfAbsentAsync("A", "A").thenCompose(resultA ->
         cache.putIfAbsentAsync("B", "B"));

      future.get();
   }

   public void testNestedPutIfAbsentCalls2() throws ExecutionException, InterruptedException {
      final CompletableFuture put = new CompletableFuture();

      cache.putIfAbsentAsync("A", "A").thenAccept(resultA -> {
         final CompletableFuture nested = new CompletableFuture();

         cache.putIfAbsentAsync("B", "B").thenAccept(resultB -> {
            nested.complete("B");
         });

         try {
            nested.get();
         } catch (Exception e) {
            e.printStackTrace();
         }

         put.complete("B");
      });

      put.get();
   }
{code}
to the RemoteAsyncAPITest class and I am unable to reproduce the issue. I also tried with and without force return value and it both still passed.

Is it possible the putIfAbsent call was being blocked in the server? Maybe another operation was holding the lock?

> Nested async operations with HotRod client hang
> -----------------------------------------------
>
>                 Key: ISPN-10073
>                 URL: https://issues.jboss.org/browse/ISPN-10073
>             Project: Infinispan
>          Issue Type: Bug
>          Components: Hot Rod
>    Affects Versions: 9.4.10.Final
>            Reporter: Dejan Bosanac
>            Assignee: William Burns
>            Priority: Major
>
> We noticed some issued with the HotRod client, when trying to use nested async calls. Originally, this was discovered in the context of Vert.x tests, but below you can find the smallest reproducer code that I could create (without any Vert.x dependencies).
> {code:java}
> //DefaultCacheManager cm = new DefaultCacheManager();
>         //Cache<String, String> cache =  cm.createCache("default",  new ConfigurationBuilder().build());
>         RemoteCacheManager cm = new RemoteCacheManager();
>         RemoteCache<String, String> cache = cm.getCache("default");
>         final CompletableFuture put = new CompletableFuture();
>         cache.putIfAbsentAsync("A", "A").thenAccept(resultA -> {
>             final CompletableFuture nested = new CompletableFuture();
>             cache.putIfAbsentAsync("B", "B").thenAccept(resultB -> {
>                 nested.complete("B");
>             });
>             try {
>                 nested.get();
>             } catch (Exception e) {
>                 e.printStackTrace();
>             }
>             put.complete("B");
>         });
>         put.get();
> {code}
> This would basically hang and the nested operation would never receive response. What I noticed in the original test is that response would become available after the framework timeout the test.
> Everything works as expected with embedded cache.



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the infinispan-issues mailing list