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

Merge implementation is not correct on SimpleCache

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 9.0.0.Final
    • None
    • Core
    • None
    • Hide
      SimpleCacheTest.java
       public void testMerge() throws Exception {
      
            cache.put("existing", "foo");
            Object mergeResult = cache.merge("existing", "bar", (oldValue, newValue) -> "" + oldValue + newValue);
            assertEquals("foobar", mergeResult);
            assertEquals("foobar", cache.get("existing"));
      
            mergeResult = cache.merge("existing", "bar", (oldValue, newValue) -> null);
            assertNull(mergeResult);
            assertNull(cache.get("existing"));
      
            mergeResult = cache.merge("notExisting", "foo", (oldValue, newValue) -> "" + oldValue + newValue);
            assertEquals("foo", mergeResult);
            assertEquals("foo", cache.get("notExisting"));
      
         }
      
      Show
      SimpleCacheTest.java public void testMerge() throws Exception { cache.put( "existing" , "foo" ); Object mergeResult = cache.merge( "existing" , "bar" , (oldValue, newValue) -> "" + oldValue + newValue); assertEquals( "foobar" , mergeResult); assertEquals( "foobar" , cache.get( "existing" )); mergeResult = cache.merge( "existing" , "bar" , (oldValue, newValue) -> null ); assertNull(mergeResult); assertNull(cache.get( "existing" )); mergeResult = cache.merge( "notExisting" , "foo" , (oldValue, newValue) -> "" + oldValue + newValue); assertEquals( "foo" , mergeResult); assertEquals( "foo" , cache.get( "notExisting" )); }
    • Low

    Description

      Merge method is not correctly implemented in SimpleCache.
      Merge should work this way :

      • if the key is not present, add the value
      • If the key is present, apply the function between the existing key's value and the given value and replace the key with the merged result
      • If the merge function returns null, remove the key

      The case that should work as "putIfAbsent" does't work. Merge function is applied to null and the given value.

      Attachments

        Issue Links

          Activity

            People

              rvansa1@redhat.com Radim Vansa (Inactive)
              karestig@redhat.com Katia Aresti
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: