Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-4187

LRU eviction algorithm does not evict the eldest entry

This issue belongs to an archived project. You can view it, but you can't modify it. Learn more

XMLWordPrintable

      The following test for JDBC cache stores fails:

      @Test
          @WithRunningServer({@RunningServer(name = CONTAINER1, config = CONFIG_FETCH_STATE_1)})
          public void testFetchState() throws Exception {
              try {
                  mc1 = createMemcachedClient(server1);
                  assertCleanCacheAndStore1();
                  mc1.set("k1", "v1");
                  mc1.set("k2", "v2");
                  mc1.set("k3", "v3");
                  assertNotNull(dbServer1.stringTable.getValueByKey("k1"));
                  startContainer(controller, CONTAINER2, CONFIG_FETCH_STATE_2);
                  mc2 = createMemcachedClient(server2);
                  assertTrue(0 < server2.getCacheManager(MANAGER_NAME).getCache(CACHE_NAME).getNumberOfEntries());
                  //the cache store should fetch state from the others
                  //since eviction.max-entries==2, first k2 and k3 is loaded from the other cache, then k1 is loaded
                  //from the other cache's loader and thus k2 is evicted and ends up in a cache loader
                  assertNull(dbServer2.stringTable.getValueByKey("k1"));
                  assertEquals("v1", mc2.get("k1"));
                  assertEquals("v2", mc2.get("k2"));
                  assertNull(dbServer2.stringTable.getValueByKey("k1"));
      //^^^^^fails here, the K1 was evicted even though it was used recently
      //K3 was supposed to be evicted but it did not happen
                  assertNull(dbServer2.stringTable.getValueByKey("k2"));
                  assertCleanCacheAndStore2();
              } finally {
                  controller.stop(CONTAINER2);
              }
          }
      

      This tests works properly if the following commit is reverted, so it was caused by this commit:
      https://github.com/infinispan/infinispan/commit/b190230d84beb41474bae0239c181a5f0e95f30c

      Note that there's another commit with the same name but different commit hash: b71da1c

      The test above can be run from https://github.com/chepa653/infinispan/tree/t_ISPN-3904 by going to server/integration/testsuite and running mvn clean verify -Dtest=StringBasedStoreMultinodeTest#testFetchState -Dlog.level.infinispan=TRACE

        1. server2.log
          1.40 MB
          Martin Gencur

              wburns@redhat.com Will Burns
              mgencur Martin Gencur (Inactive)
              Archiver:
              rhn-support-adongare Amol Dongare

                Created:
                Updated:
                Resolved:
                Archived: