From 67646d050490174f1c80d1c4f3f1644f54ffafd0 Mon Sep 17 00:00:00 2001 From: ayudovin Date: Wed, 8 May 2019 20:47:26 +0300 Subject: [PATCH 1/3] replacing close() to closeLater() --- .../boot/actuate/redis/RedisReactiveHealthIndicator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java index 7bbf580d41df..ef1aae169346 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java @@ -47,7 +47,7 @@ protected Mono doHealthCheck(Health.Builder builder) { ReactiveRedisConnection connection = this.connectionFactory .getReactiveConnection(); return connection.serverCommands().info().map((info) -> up(builder, info)) - .doFinally((signal) -> connection.close()); + .doFinally((signal) -> connection.closeLater()); } private Health up(Health.Builder builder, Properties info) { From 5b8d89f55a14fad00951200415ef7e34537407cb Mon Sep 17 00:00:00 2001 From: ayudovin Date: Thu, 9 May 2019 13:43:38 +0300 Subject: [PATCH 2/3] adding parallel --- .../redis/RedisReactiveHealthIndicator.java | 14 ++++++++++---- .../redis/RedisReactiveHealthIndicatorTests.java | 5 +++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java index ef1aae169346..32ff15e09017 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java @@ -19,6 +19,7 @@ import java.util.Properties; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import org.springframework.boot.actuate.health.AbstractReactiveHealthIndicator; import org.springframework.boot.actuate.health.Health; @@ -31,6 +32,7 @@ * * @author Stephane Nicoll * @author Mark Paluch + * @author Artsiom Yudovin * @since 2.0.0 */ public class RedisReactiveHealthIndicator extends AbstractReactiveHealthIndicator { @@ -44,10 +46,14 @@ public RedisReactiveHealthIndicator( @Override protected Mono doHealthCheck(Health.Builder builder) { - ReactiveRedisConnection connection = this.connectionFactory - .getReactiveConnection(); - return connection.serverCommands().info().map((info) -> up(builder, info)) - .doFinally((signal) -> connection.closeLater()); + Mono connection = Mono + .fromSupplier(this.connectionFactory::getReactiveConnection) + .subscribeOn(Schedulers.parallel()); + + return connection + .flatMap((c) -> c.serverCommands().info().map((info) -> up(builder, info)) + .onErrorResume((e) -> Mono.just(builder.down(e).build())) + .doFinally((signal) -> c.closeLater())); } private Health up(Health.Builder builder, Properties info) { diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java index fae2e0746e96..3c8dc70d072f 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java @@ -41,6 +41,7 @@ * @author Stephane Nicoll * @author Mark Paluch * @author Nikolay Rybak + * @author Artsiom Yudovin */ public class RedisReactiveHealthIndicatorTests { @@ -59,7 +60,7 @@ public void redisIsUp() { assertThat(h.getDetails()).containsOnlyKeys("version"); assertThat(h.getDetails().get("version")).isEqualTo("2.8.9"); }).verifyComplete(); - verify(redisConnection).close(); + verify(redisConnection).closeLater(); } @Test @@ -74,7 +75,7 @@ public void redisCommandIsDown() { StepVerifier.create(health) .consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN)) .verifyComplete(); - verify(redisConnection).close(); + verify(redisConnection).closeLater(); } @Test From c1cf45892feaf57ba1f371b1eb6a04e28c17061e Mon Sep 17 00:00:00 2001 From: ayudovin Date: Thu, 9 May 2019 15:05:57 +0300 Subject: [PATCH 3/3] removing lazy evaluation of closeLater() --- .../boot/actuate/redis/RedisReactiveHealthIndicator.java | 2 +- .../boot/actuate/redis/RedisReactiveHealthIndicatorTests.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java index 32ff15e09017..757bdb153ffd 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java @@ -53,7 +53,7 @@ protected Mono doHealthCheck(Health.Builder builder) { return connection .flatMap((c) -> c.serverCommands().info().map((info) -> up(builder, info)) .onErrorResume((e) -> Mono.just(builder.down(e).build())) - .doFinally((signal) -> c.closeLater())); + .flatMap((signal) -> c.closeLater().thenReturn(signal))); } private Health up(Health.Builder builder, Properties info) { diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java index 3c8dc70d072f..cb88aa549821 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java @@ -50,6 +50,7 @@ public void redisIsUp() { Properties info = new Properties(); info.put("redis_version", "2.8.9"); ReactiveRedisConnection redisConnection = mock(ReactiveRedisConnection.class); + given(redisConnection.closeLater()).willReturn(Mono.empty()); ReactiveServerCommands commands = mock(ReactiveServerCommands.class); given(commands.info()).willReturn(Mono.just(info)); RedisReactiveHealthIndicator healthIndicator = createHealthIndicator( @@ -69,6 +70,7 @@ public void redisCommandIsDown() { given(commands.info()).willReturn( Mono.error(new RedisConnectionFailureException("Connection failed"))); ReactiveRedisConnection redisConnection = mock(ReactiveRedisConnection.class); + given(redisConnection.closeLater()).willReturn(Mono.empty()); RedisReactiveHealthIndicator healthIndicator = createHealthIndicator( redisConnection, commands); Mono health = healthIndicator.health();