From 635029205968ac8b3ef836f6897978b20225eb0a Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 16 Mar 2011 15:14:41 +0200 Subject: [PATCH] DATAKV-46 + first round of bug fixes for SJC + added integration tests + update OSGi template + update get/set method signatures in the process --- .../DefaultStringRedisConnection.java | 10 ++-- .../redis/connection/RedisStringCommands.java | 2 +- .../connection/StringRedisConnection.java | 4 +- .../connection/jedis/JedisConnection.java | 2 +- .../connection/jredis/JredisConnection.java | 2 +- .../redis/connection/rjc/RjcConnection.java | 10 ++-- .../redis/connection/util/DecodeUtils.java | 6 +-- .../redis/core/BoundValueOperations.java | 8 +-- .../core/DefaultBoundValueOperations.java | 6 +-- .../redis/core/DefaultValueOperations.java | 7 +-- .../keyvalue/redis/core/RedisTemplate.java | 2 +- .../keyvalue/redis/core/ValueOperations.java | 4 +- .../AbstractConnectionIntegrationTests.java | 11 ++-- .../rjc/RjcConnectionIntegrationTests.java | 54 +++++++++++++++++++ spring-data-redis/template.mf | 4 +- 15 files changed, 95 insertions(+), 37 deletions(-) create mode 100644 spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/connection/rjc/RjcConnectionIntegrationTests.java diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultStringRedisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultStringRedisConnection.java index 9db1d2af4..adb2cd1f4 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultStringRedisConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultStringRedisConnection.java @@ -396,8 +396,8 @@ public class DefaultStringRedisConnection implements StringRedisConnection { return delegate.setNX(key, value); } - public void setRange(byte[] key, long start, byte[] value) { - delegate.setRange(key, start, value); + public void setRange(byte[] key, byte[] value, long start) { + delegate.setRange(key, value, start); } public void shutdown() { @@ -683,7 +683,7 @@ public class DefaultStringRedisConnection implements StringRedisConnection { } @Override - public String getRange(String key, int start, int end) { + public String getRange(String key, long start, long end) { return deserialize(delegate.getRange(serialize(key), start, end)); } @@ -919,8 +919,8 @@ public class DefaultStringRedisConnection implements StringRedisConnection { } @Override - public void setRange(String key, int start, int end) { - delegate.setRange(serialize(key), start, end); + public void setRange(String key, long start, String value) { + delegate.setRange(serialize(key), serialize(value), start); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java index d68acd0d6..d763774ae 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java @@ -54,7 +54,7 @@ public interface RedisStringCommands { byte[] getRange(byte[] key, long begin, long end); - void setRange(byte[] key, long offset, byte[] value); + void setRange(byte[] key, byte[] value, long offset); Boolean getBit(byte[] key, long offset); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/StringRedisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/StringRedisConnection.java index 7622c3b56..53517c8ea 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/StringRedisConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/StringRedisConnection.java @@ -95,9 +95,9 @@ public interface StringRedisConnection extends RedisConnection { Long append(String key, String value); - String getRange(String key, int start, int end); + String getRange(String key, long start, long end); - void setRange(String key, int start, int end); + void setRange(String key, long offset, String value); Boolean getBit(String key, long offset); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java index 5fdd3beb2..3cf0a1c08 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java @@ -1033,7 +1033,7 @@ public class JedisConnection implements RedisConnection { } @Override - public void setRange(byte[] key, long start, byte[] value) { + public void setRange(byte[] key, byte[] value, long start) { throw new UnsupportedOperationException(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java index 63072f3ff..4339dcdf5 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java @@ -518,7 +518,7 @@ public class JredisConnection implements RedisConnection { } @Override - public void setRange(byte[] key, long start, byte[] value) { + public void setRange(byte[] key, byte[] value, long start) { throw new UnsupportedOperationException(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/rjc/RjcConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/rjc/RjcConnection.java index 93e452427..78e5a2dff 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/rjc/RjcConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/rjc/RjcConnection.java @@ -56,7 +56,7 @@ public class RjcConnection implements RedisConnection { public RjcConnection(org.idevlab.rjc.ds.RedisConnection connection, int dbIndex) { SingleDataSource connectionDataSource = new SingleDataSource(connection); - session = new SessionFactoryImpl().create(); + session = new SessionFactoryImpl(connectionDataSource).create(); client = new Client(connection); subscriber = new RedisNodeSubscriber(connectionDataSource); @@ -638,7 +638,7 @@ public class RjcConnection implements RedisConnection { @Override public void set(byte[] key, byte[] value) { String stringKey = RjcUtils.decode(key); - String stringValue = RjcUtils.decode(key); + String stringValue = RjcUtils.decode(value); try { if (isPipelined()) { @@ -655,7 +655,7 @@ public class RjcConnection implements RedisConnection { @Override public byte[] getSet(byte[] key, byte[] value) { String stringKey = RjcUtils.decode(key); - String stringValue = RjcUtils.decode(key); + String stringValue = RjcUtils.decode(value); try { if (isPipelined()) { @@ -671,7 +671,7 @@ public class RjcConnection implements RedisConnection { @Override public Long append(byte[] key, byte[] value) { String stringKey = RjcUtils.decode(key); - String stringValue = RjcUtils.decode(key); + String stringValue = RjcUtils.decode(value); try { if (isPipelined()) { @@ -870,7 +870,7 @@ public class RjcConnection implements RedisConnection { } @Override - public void setRange(byte[] key, long offset, byte[] value) { + public void setRange(byte[] key, byte[] value, long offset) { String stringKey = RjcUtils.decode(key); String stringValue = RjcUtils.decode(value); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/util/DecodeUtils.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/util/DecodeUtils.java index d3588856c..b40867607 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/util/DecodeUtils.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/util/DecodeUtils.java @@ -43,7 +43,7 @@ public abstract class DecodeUtils { } public static byte[] encode(String string) { - return Base64.decode(string); + return (string == null ? null : Base64.decode(string)); } public static Map encodeMap(Map map) { @@ -66,7 +66,7 @@ public abstract class DecodeUtils { Set set = new LinkedHashSet(keys.size()); for (String string : keys) { - set.add(Base64.decode(string)); + set.add(encode(string)); } return set; } @@ -75,7 +75,7 @@ public abstract class DecodeUtils { List set = new ArrayList(keys.size()); for (String string : keys) { - set.add(Base64.decode(string)); + set.add(encode(string)); } return set; } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java index 6e0450465..ae6267bf9 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java @@ -28,21 +28,21 @@ public interface BoundValueOperations extends BoundKeyOperations { void set(V value); + void set(V value, long offset); + void set(V value, long timeout, TimeUnit unit); Boolean setIfAbsent(V value); V get(); + String get(long start, long end); + V getAndSet(V value); Long increment(long delta); Integer append(String value); - String get(int start, int end); - - void set(int start, int end); - Long size(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java index c808847d5..b9ec6b168 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java @@ -58,7 +58,7 @@ class DefaultBoundValueOperations extends DefaultBoundKeyOperations imp } @Override - public String get(int start, int end) { + public String get(long start, long end) { return ops.get(getKey(), start, end); } @@ -78,8 +78,8 @@ class DefaultBoundValueOperations extends DefaultBoundKeyOperations imp } @Override - public void set(int start, int end) { - ops.set(getKey(), start, end); + public void set(V value, long offset) { + ops.set(getKey(), value, offset); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultValueOperations.java index 37172140a..bc2c13d0d 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultValueOperations.java @@ -96,7 +96,7 @@ class DefaultValueOperations extends AbstractOperations implements V } @Override - public String get(K key, final int start, final int end) { + public String get(K key, final long start, final long end) { final byte[] rawKey = rawKey(key); byte[] rawReturn = execute(new RedisCallback() { @@ -217,13 +217,14 @@ class DefaultValueOperations extends AbstractOperations implements V @Override - public void set(K key, final int start, final int end) { + public void set(K key, final V value, final long offset) { final byte[] rawKey = rawKey(key); + final byte[] rawValue = rawValue(value); execute(new RedisCallback() { @Override public Object doInRedis(RedisConnection connection) { - connection.setRange(rawKey, start, end); + connection.setRange(rawKey, rawValue, offset); return null; } }, true); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 6358593c5..cf614f956 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -377,7 +377,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation * Sets the string value serializer to be used by this template (when the arguments or return types * are always strings). Defaults to {@link StringRedisSerializer}. * - * @see ValueOperations#get(Object, int, int) + * @see ValueOperations#get(Object, long, long) * @param stringSerializer The stringValueSerializer to set. */ public void setStringSerializer(RedisSerializer stringSerializer) { diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java index 3fd581ad0..133922952 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java @@ -47,9 +47,9 @@ public interface ValueOperations { Integer append(K key, String value); - String get(K key, int start, int end); + String get(K key, long start, long end); - void set(K key, int start, int end); + void set(K key, V value, long offset); Long size(K key); diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/connection/AbstractConnectionIntegrationTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/connection/AbstractConnectionIntegrationTests.java index afe8e7219..d3056e4bc 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/connection/AbstractConnectionIntegrationTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/connection/AbstractConnectionIntegrationTests.java @@ -69,16 +69,19 @@ public abstract class AbstractConnectionIntegrationTests { @Test public void testLPush() throws Exception { - Long index = connection.lPush(listName.getBytes(), "bar".getBytes()); + byte[] val = "bar".getBytes(); + Long index = connection.lPush(listName.getBytes(), val); if (index != null) { - assertEquals((Long) (index + 1), connection.lPush(listName.getBytes(), "bar".getBytes())); + assertEquals((Long) (index + 1), connection.lPush(listName.getBytes(), val)); } } @Test public void testSetAndGet() { - connection.set("foo".getBytes(), "blahblah".getBytes()); - assertEquals("blahblah", new String(connection.get("foo".getBytes()))); + String key = "foo"; + String value = "blabla"; + connection.set(key.getBytes(), value.getBytes()); + assertEquals(value, new String(connection.get(key.getBytes()))); } private boolean isJredis() { diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/connection/rjc/RjcConnectionIntegrationTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/connection/rjc/RjcConnectionIntegrationTests.java new file mode 100644 index 000000000..8bbe97356 --- /dev/null +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/connection/rjc/RjcConnectionIntegrationTests.java @@ -0,0 +1,54 @@ +/* + * Copyright 2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.keyvalue.redis.connection.rjc; + +import org.idevlab.rjc.Session; +import org.junit.Test; +import org.springframework.data.keyvalue.redis.SettingsUtils; +import org.springframework.data.keyvalue.redis.connection.AbstractConnectionIntegrationTests; +import org.springframework.data.keyvalue.redis.connection.RedisConnectionFactory; + +/** + * @author Costin Leau + */ +public class RjcConnectionIntegrationTests extends AbstractConnectionIntegrationTests { + + RjcConnectionFactory factory; + + public RjcConnectionIntegrationTests() { + factory = new RjcConnectionFactory(); + factory.setPort(SettingsUtils.getPort()); + factory.setHostName(SettingsUtils.getHost()); + + factory.setUsePool(true); + factory.afterPropertiesSet(); + } + + @Override + protected RedisConnectionFactory getConnectionFactory() { + return factory; + } + + @Test + public void testRaw() throws Exception { + Session jr = (Session) factory.getConnection().getNativeConnection(); + + System.out.println(jr.dbSize()); + System.out.println(jr.exists("foobar")); + jr.set("foobar", "barfoo"); + System.out.println(jr.get("foobar")); + } +} diff --git a/spring-data-redis/template.mf b/spring-data-redis/template.mf index 6c01d8133..27a5e02c3 100644 --- a/spring-data-redis/template.mf +++ b/spring-data-redis/template.mf @@ -22,7 +22,7 @@ Import-Template: org.jredis.ri.alphazero.*;version="[1.0.0, 2.0.0)", redis.clients.jedis.*;version=${jedis.range}, redis.clients.util.*;version=${jedis.range}, + org.idevlab.rjc.*;version=${rjc.range}, org.apache.commons.pool.impl.*;version="[1.0.0, 3.0.0)", org.codehaus.jackson.*;version=${jackson.range}, - org.apache.commons.beanutils.*;version="[1.8.0, 2.0.0)" - + org.apache.commons.beanutils.*;version=1.8.5 \ No newline at end of file