From 7073502e423e7efde9d9e14e50e2b641bacb4898 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 23 Jul 2015 15:11:16 +0200 Subject: [PATCH] =?UTF-8?q?DATAREDIS-416=20-=20RedisCache.putIfAbsent(?= =?UTF-8?q?=E2=80=A6)=20now=20returns=20null=20for=20first=20addition.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now return null for RedisCache.putIfAbesent(…) when value is set to meet the contract defined by org.springframework.cache.Cache.putIfAbsent(…). Original pull request: #150. --- .../springframework/data/redis/cache/RedisCache.java | 2 +- .../data/redis/cache/RedisCacheTest.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/cache/RedisCache.java b/src/main/java/org/springframework/data/redis/cache/RedisCache.java index 4a34ba4d6..adcc88e65 100644 --- a/src/main/java/org/springframework/data/redis/cache/RedisCache.java +++ b/src/main/java/org/springframework/data/redis/cache/RedisCache.java @@ -614,7 +614,7 @@ public class RedisCache implements Cache { boolean valueWasSet = connection.setNX(element.getKeyBytes(), valueAccessor.convertToBytesIfNecessary(element.get())); - return valueWasSet ? element.get() : valueAccessor.deserializeIfNecessary(connection.get(element.getKeyBytes())); + return valueWasSet ? null : valueAccessor.deserializeIfNecessary(connection.get(element.getKeyBytes())); } } diff --git a/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java b/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java index 7d8999471..4612df976 100644 --- a/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java +++ b/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java @@ -250,6 +250,7 @@ public class RedisCacheTest extends AbstractNativeCacheTest { /** * @see DATAREDIS-344 + * @see DATAREDIS-416 */ @Test public void putIfAbsentShouldSetValueOnlyIfNotPresent() { @@ -262,16 +263,15 @@ public class RedisCacheTest extends AbstractNativeCacheTest { template.delete(key); Object value = getValue(); + + assertThat(redisCache.putIfAbsent(key, value), nullValue()); + ValueWrapper wrapper = redisCache.putIfAbsent(key, value); - assertThat(wrapper.get(), sameInstance(value)); - - ValueWrapper wrapper2 = redisCache.putIfAbsent(key, value); - if (!(value instanceof Number)) { - assertThat(wrapper2.get(), not(sameInstance(value))); + assertThat(wrapper.get(), not(sameInstance(value))); } - assertThat(wrapper2.get(), equalTo(value)); + assertThat(wrapper.get(), equalTo(value)); } }