From af2265c813f59d5459e2eeef0e49b4e122360e14 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Thu, 14 Apr 2011 15:49:46 +0300 Subject: [PATCH] + fix problem causing atomic counters to reinitialize Redis values (even if no value was given) --- .../keyvalue/redis/support/atomic/RedisAtomicInteger.java | 6 ++++-- .../keyvalue/redis/support/atomic/RedisAtomicLong.java | 6 ++++-- .../keyvalue/redis/support/atomic/RedisAtomicTests.java | 7 +++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java index bb4b19ba4..79e5b523e 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java @@ -77,8 +77,10 @@ public class RedisAtomicInteger extends Number implements Serializable, BoundKey this.generalOps = redisTemplate; this.operations = generalOps.opsForValue(); - if (initialValue == null || this.operations.get(redisCounter) == null) { - set(0); + if (initialValue == null) { + if (this.operations.get(redisCounter) == null) { + set(0); + } } else { set(initialValue); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java index 5550b382d..9da634b3e 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java @@ -77,8 +77,10 @@ public class RedisAtomicLong extends Number implements Serializable, BoundKeyOpe this.generalOps = redisTemplate; this.operations = generalOps.opsForValue(); - if (initialValue == null || this.operations.get(redisCounter) == null) { - set(0); + if (initialValue == null) { + if (this.operations.get(redisCounter) == null) { + set(0); + } } else { set(initialValue); diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicTests.java index 25c0a93dc..d69d19add 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicTests.java @@ -105,4 +105,11 @@ public class RedisAtomicTests { int delta = 5; assertEquals(delta, intCounter.addAndGet(delta)); } + + @Test + public void testReadExistingValue() throws Exception { + longCounter.set(5); + RedisAtomicLong keyCopy = new RedisAtomicLong(longCounter.getKey(), factory); + assertEquals(longCounter.get(), keyCopy.get()); + } } \ No newline at end of file