DATAREDIS-667 - Introduce LettuceConnectionProvider.

We now create and release Lettuce connections using LettuceConnectionProvider. Connection providers encapsulate the underlying client and expose only creation and release methods. A connection provider can provide connections for Standalone or Cluster connections or wrap a LettucePool.

Previously we used RedisClient and RedisClusterClient directly which required context propagation (pooling/non-pooling) conditional code to obtain the appropriate connection type.

Original Pull Request: #262
This commit is contained in:
Mark Paluch
2017-08-03 13:54:15 +02:00
committed by Christoph Strobl
parent 5c37948219
commit 5ac7f8eb19
11 changed files with 549 additions and 178 deletions

View File

@@ -29,6 +29,7 @@ import org.springframework.data.redis.test.util.LettuceRedisClusterClientProvide
/**
* @author Christoph Strobl
* @author Mark Paluch
*/
public abstract class LettuceReactiveClusterCommandsTestsBase {
@@ -41,7 +42,8 @@ public abstract class LettuceReactiveClusterCommandsTestsBase {
public void before() {
assumeThat(clientProvider.test(), is(true));
nativeCommands = clientProvider.getClient().connect().sync();
connection = new LettuceReactiveRedisClusterConnection(clientProvider.getClient());
connection = new LettuceReactiveRedisClusterConnection(
new ClusterConnectionProvider(clientProvider.getClient(), LettuceReactiveRedisConnection.CODEC));
}
@After
@@ -63,5 +65,4 @@ public abstract class LettuceReactiveClusterCommandsTestsBase {
connection.close();
}
}
}

View File

@@ -39,6 +39,7 @@ import org.springframework.data.redis.test.util.LettuceRedisClusterClientProvide
/**
* @author Christoph Strobl
* @author Mark Paluch
*/
@RunWith(Parameterized.class)
public abstract class LettuceReactiveCommandsTestsBase {
@@ -100,11 +101,13 @@ public abstract class LettuceReactiveCommandsTestsBase {
if (abstractRedisClient instanceof RedisClient) {
nativeCommands = ((RedisClient) abstractRedisClient).connect().sync();
connection = new LettuceReactiveRedisConnection(abstractRedisClient);
connection = new LettuceReactiveRedisConnection(
new StandaloneConnectionProvider(((RedisClient) abstractRedisClient), LettuceReactiveRedisConnection.CODEC));
} else if (abstractRedisClient instanceof RedisClusterClient) {
nativeCommands = ((RedisClusterClient) abstractRedisClient).connect().sync();
connection = new LettuceReactiveRedisClusterConnection((RedisClusterClient) abstractRedisClient);
connection = new LettuceReactiveRedisClusterConnection(new ClusterConnectionProvider(
((RedisClusterClient) abstractRedisClient), LettuceReactiveRedisConnection.CODEC));
}
}