From e54805915c7688ad35c61cd49e7ed568c2029266 Mon Sep 17 00:00:00 2001 From: thirstycrow <5451vs5451@gmail.com> Date: Sun, 25 Nov 2018 18:41:09 +0800 Subject: [PATCH] Update sentinel ready pattern for redis 3.2 and add an overloaded start method accepting custom ready pattern --- .../java/redis/embedded/AbstractRedisInstance.java | 13 +++++++++---- src/main/java/redis/embedded/Redis.java | 2 ++ src/main/java/redis/embedded/RedisCluster.java | 10 ++++++++++ src/main/java/redis/embedded/RedisSentinel.java | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/redis/embedded/AbstractRedisInstance.java b/src/main/java/redis/embedded/AbstractRedisInstance.java index abeae789..75415235 100644 --- a/src/main/java/redis/embedded/AbstractRedisInstance.java +++ b/src/main/java/redis/embedded/AbstractRedisInstance.java @@ -28,15 +28,20 @@ public boolean isActive() { return active; } - @Override + @Override public synchronized void start() throws EmbeddedRedisException { + start(redisReadyPattern()); + } + + @Override + public synchronized void start(String redisReadyPattern) throws EmbeddedRedisException { if (active) { throw new EmbeddedRedisException("This redis server instance is already running..."); } try { redisProcess = createRedisProcessBuilder().start(); logErrors(); - awaitRedisServerReady(); + awaitRedisServerReady(redisReadyPattern); active = true; } catch (IOException e) { throw new EmbeddedRedisException("Failed to start Redis instance", e); @@ -51,7 +56,7 @@ private void logErrors() { executor.submit(printReaderTask); } - private void awaitRedisServerReady() throws IOException { + private void awaitRedisServerReady(String redisReadyPattern) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(redisProcess.getInputStream())); try { String outputLine; @@ -61,7 +66,7 @@ private void awaitRedisServerReady() throws IOException { //Something goes wrong. Stream is ended before server was activated. throw new RuntimeException("Can't start redis server. Check logs for details."); } - } while (!outputLine.matches(redisReadyPattern())); + } while (!outputLine.matches(redisReadyPattern)); } finally { IOUtils.closeQuietly(reader); } diff --git a/src/main/java/redis/embedded/Redis.java b/src/main/java/redis/embedded/Redis.java index 8c7de95f..aff5a2b4 100644 --- a/src/main/java/redis/embedded/Redis.java +++ b/src/main/java/redis/embedded/Redis.java @@ -9,6 +9,8 @@ public interface Redis { void start() throws EmbeddedRedisException; + void start(String redisReadyPattern) throws EmbeddedRedisException; + void stop() throws EmbeddedRedisException; List ports(); diff --git a/src/main/java/redis/embedded/RedisCluster.java b/src/main/java/redis/embedded/RedisCluster.java index 1f18bf73..6f1ff8ba 100644 --- a/src/main/java/redis/embedded/RedisCluster.java +++ b/src/main/java/redis/embedded/RedisCluster.java @@ -41,6 +41,16 @@ public void start() throws EmbeddedRedisException { } } + @Override + public void start(String redisReadyPattern) throws EmbeddedRedisException { + for(Redis redis : sentinels) { + redis.start(redisReadyPattern); + } + for(Redis redis : servers) { + redis.start(redisReadyPattern); + } + } + @Override public void stop() throws EmbeddedRedisException { for(Redis redis : sentinels) { diff --git a/src/main/java/redis/embedded/RedisSentinel.java b/src/main/java/redis/embedded/RedisSentinel.java index 6b8c6234..5afae5b5 100644 --- a/src/main/java/redis/embedded/RedisSentinel.java +++ b/src/main/java/redis/embedded/RedisSentinel.java @@ -4,7 +4,7 @@ import java.util.List; public class RedisSentinel extends AbstractRedisInstance { - private static final String REDIS_READY_PATTERN = ".*Sentinel runid is.*"; + private static final String REDIS_READY_PATTERN = ".*Sentinel (runid|ID) is.*"; public RedisSentinel(List args, int port) { super(port);