Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-8092

Put operation may hang if cache was destroyed asynchronously.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 2.4
    • None
    • cache
    • None

    Description

      If there is more than one cache in the cache group then put operation on cache may hang if it was destroyed asynchronously.
      For now this applies to all cache modes (PARTITIONED/REPLICATED/LOCAL) and to all atomicity modes (ATOMIC/TRANSACTIONAL).

      This problem can not be reproduced if there is only one cache in the cache group.

      Reproducer:

      public class DestroyCacheTest extends GridCommonAbstractTest {
      
          private CacheConfiguration<Integer, Boolean> ccfg(String name, String grp) {
              return new CacheConfiguration<Integer, Boolean>(name).setCacheMode(CacheMode.PARTITIONED)
                  .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
                  .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC)
                  .setGroupName(grp);
          }
      
          public void testDestroyAsync() throws Exception {
              String grpName = "testGroup";
      
              try (IgniteEx node = startGrid(0)) {
                  node.createCache(ccfg("cache2", grpName));
      
                  for (int n = 0; n < 100; n++) {
                      IgniteCache<Integer, Boolean> cache1 = node.createCache(ccfg("cache1", grpName));
      
                      AtomicInteger cntr = new AtomicInteger();
      
                      GridTestUtils.runMultiThreadedAsync(() -> {
                          try {
                              int key;
      
                              while ((key = cntr.getAndIncrement()) < 10_000) {
                                  if (key == 1000)
                                      cache1.destroy();
      
                                  cache1.putIfAbsent(key, true);
                              }
                          }
                          catch (Exception ignore) {
                              log.warning(ignore.getMessage());
                          }
      
                          return null;
                      }, 6, "put-thread").get();
                  }
              }
          }
      }
      

      p.s. for ATOMIC cache additional cache status check in GridCacheGateway#onStopped busy wait resolve this problem.

      Attachments

        Activity

          People

            xtern Pavel Pereslegin
            xtern Pavel Pereslegin
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: