This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 12a5987235f60cbbe24c42a1e1411f12105ed441 Author: Matthieu Baechler <matth...@apache.org> AuthorDate: Thu Apr 23 12:13:12 2020 +0200 JAMES-3065 remove remaining usages of Reactor types in public api --- .../cassandra/utils/CassandraHealthCheckTest.java | 8 +++--- .../es/ElasticSearchHealthCheckConnectionTest.java | 4 +-- .../backends/rabbitmq/RabbitMQHealthCheckTest.java | 28 ++++++++++---------- core/pom.xml | 4 +++ .../apache/james/core/healthcheck/HealthCheck.java | 10 +------- mailbox/api/pom.xml | 4 +++ .../EventDeadLettersHealthCheckContract.java | 30 +++++++++++----------- metrics/metrics-tests/pom.xml | 4 +++ .../apache/james/PeriodicalHealthChecksTest.java | 2 +- server/data/data-jmap/pom.xml | 4 +++ .../MessageFastViewProjectionHealthCheck.java | 20 +++++++++------ .../MessageFastViewProjectionHealthCheckTest.java | 26 +++++++++---------- .../james/jpa/healthcheck/JPAHealthCheck.java | 24 +++++++++-------- .../james/jpa/healthcheck/JPAHealthCheckTest.java | 4 +-- .../james/webadmin/routes/HealthCheckRoutes.java | 17 ++++++------ .../webadmin/routes/HealthCheckRoutesTest.java | 6 +++-- 16 files changed, 107 insertions(+), 88 deletions(-) diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java index c37f641..1796033 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java @@ -49,7 +49,7 @@ class CassandraHealthCheckTest { @Test void checkShouldReturnHealthyWhenCassandraIsRunning() { - Result check = healthCheck.check(); + Result check = healthCheck.checkReactive().block(); assertThat(check.isHealthy()).isTrue(); } @@ -58,7 +58,7 @@ class CassandraHealthCheckTest { void checkShouldReturnUnhealthyWhenCassandraIsNotRunning(DockerCassandraExtension.DockerCassandra cassandraServer) { try { cassandraServer.getContainer().pause(); - Result check = healthCheck.check(); + Result check = healthCheck.checkReactive().block(); assertThat(check.isUnHealthy()).isTrue(); } finally { @@ -72,12 +72,12 @@ class CassandraHealthCheckTest { try { cassandraServer.getContainer().pause(); - healthCheck.check(); + healthCheck.checkReactive().block(); } finally { cassandraServer.getContainer().unpause(); } - Result check = healthCheck.check(); + Result check = healthCheck.checkReactive().block(); assertThat(check.isHealthy()).isTrue(); } diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchHealthCheckConnectionTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchHealthCheckConnectionTest.java index 0f5ddd6..0dc6530 100644 --- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchHealthCheckConnectionTest.java +++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchHealthCheckConnectionTest.java @@ -44,7 +44,7 @@ class ElasticSearchHealthCheckConnectionTest { @Test void checkShouldSucceedWhenElasticSearchIsRunning() { - assertThat(elasticSearchHealthCheck.check().isHealthy()).isTrue(); + assertThat(elasticSearchHealthCheck.checkReactive().block().isHealthy()).isTrue(); } @Test @@ -53,7 +53,7 @@ class ElasticSearchHealthCheckConnectionTest { elasticSearch.getDockerElasticSearch().pause(); try { - assertThat(elasticSearchHealthCheck.check().isUnHealthy()).isTrue(); + assertThat(elasticSearchHealthCheck.checkReactive().block().isUnHealthy()).isTrue(); } finally { elasticSearch.getDockerElasticSearch().unpause(); } diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java index 769741a..f205bc7 100644 --- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java +++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java @@ -46,21 +46,21 @@ class RabbitMQHealthCheckTest { @Test void checkShouldReturnHealthyWhenRabbitMQIsRunning() { - Result check = healthCheck.check(); + Result check = healthCheck.checkReactive().block(); assertThat(check.isHealthy()).isTrue(); } @Test void checkShouldReturnHealthyWhenCalledSeveralTime() { - healthCheck.check(); - healthCheck.check(); - healthCheck.check(); - healthCheck.check(); - healthCheck.check(); - healthCheck.check(); - healthCheck.check(); - Result check = healthCheck.check(); + healthCheck.checkReactive().block(); + healthCheck.checkReactive().block(); + healthCheck.checkReactive().block(); + healthCheck.checkReactive().block(); + healthCheck.checkReactive().block(); + healthCheck.checkReactive().block(); + healthCheck.checkReactive().block(); + Result check = healthCheck.checkReactive().block(); assertThat(check.isHealthy()).isTrue(); } @@ -69,7 +69,7 @@ class RabbitMQHealthCheckTest { void checkShouldReturnUnhealthyWhenRabbitMQIsNotRunning(DockerRabbitMQ rabbitMQ) throws Exception { rabbitMQ.stopApp(); - Result check = healthCheck.check(); + Result check = healthCheck.checkReactive().block(); assertThat(check.isHealthy()).isFalse(); } @@ -77,21 +77,21 @@ class RabbitMQHealthCheckTest { @Test void checkShouldDetectWhenRabbitMQRecovered(DockerRabbitMQ rabbitMQ) throws Exception { rabbitMQ.stopApp(); - healthCheck.check(); + healthCheck.checkReactive().block(); rabbitMQ.startApp(); - Result check = healthCheck.check(); + Result check = healthCheck.checkReactive().block(); assertThat(check.isHealthy()).isTrue(); } @Test void checkShouldDetectWhenRabbitMQFail(DockerRabbitMQ rabbitMQ) throws Exception { - healthCheck.check(); + healthCheck.checkReactive().block(); rabbitMQ.stopApp(); - Result check = healthCheck.check(); + Result check = healthCheck.checkReactive().block(); assertThat(check.isHealthy()).isFalse(); } } \ No newline at end of file diff --git a/core/pom.xml b/core/pom.xml index 0127fea..48f4e33 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -66,6 +66,10 @@ <artifactId>commons-io</artifactId> </dependency> <dependency> + <groupId>org.reactivestreams</groupId> + <artifactId>reactive-streams</artifactId> + </dependency> + <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> diff --git a/core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java b/core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java index effd3c6..4f0bd4b 100644 --- a/core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java +++ b/core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java @@ -20,16 +20,8 @@ package org.apache.james.core.healthcheck; import org.reactivestreams.Publisher; -import reactor.core.publisher.Mono; - public interface HealthCheck { ComponentName componentName(); - default Result check() { - return Mono.from(checkReactive()).block(); - } - - default Publisher<Result> checkReactive() { - return Mono.fromCallable(this::check); - } + Publisher<Result> checkReactive(); } diff --git a/mailbox/api/pom.xml b/mailbox/api/pom.xml index 7ce79e2..dc16b36 100644 --- a/mailbox/api/pom.xml +++ b/mailbox/api/pom.xml @@ -84,6 +84,10 @@ <artifactId>commons-io</artifactId> </dependency> <dependency> + <groupId>io.projectreactor</groupId> + <artifactId>reactor-core</artifactId> + </dependency> + <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> </dependency> diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersHealthCheckContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersHealthCheckContract.java index 6d1c49c..73d4f39 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersHealthCheckContract.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersHealthCheckContract.java @@ -57,8 +57,8 @@ interface EventDeadLettersHealthCheckContract { @Test default void checkShouldReturnHealthyWhenEventDeadLetterEmpty() { - assertThat(testee().check().isHealthy()).isTrue(); - assertThat(testee().check()) + assertThat(testee().checkReactive().block().isHealthy()).isTrue(); + assertThat(testee().checkReactive().block()) .isEqualTo(Result.healthy(COMPONENT_NAME)); } @@ -66,8 +66,8 @@ interface EventDeadLettersHealthCheckContract { default void checkShouldReturnDegradedWhenEventDeadLetterContainEvent() { eventDeadLetters().store(GROUP_A, EVENT_1).block(); - assertThat(testee().check().isDegraded()).isTrue(); - assertThat(testee().check()) + assertThat(testee().checkReactive().block().isDegraded()).isTrue(); + assertThat(testee().checkReactive().block()) .isEqualTo(Result.degraded(COMPONENT_NAME, EXPECTED_DEGRADED_MESSAGE)); } @@ -76,8 +76,8 @@ interface EventDeadLettersHealthCheckContract { eventDeadLetters().store(GROUP_A, EVENT_1).block(); eventDeadLetters().store(GROUP_B, EVENT_2).block(); - assertThat(testee().check().isDegraded()).isTrue(); - assertThat(testee().check()) + assertThat(testee().checkReactive().block().isDegraded()).isTrue(); + assertThat(testee().checkReactive().block()) .isEqualTo(Result.degraded(COMPONENT_NAME, EXPECTED_DEGRADED_MESSAGE)); } @@ -86,15 +86,15 @@ interface EventDeadLettersHealthCheckContract { EventDeadLetters.InsertionId insertionId1 = eventDeadLetters().store(GROUP_A, EVENT_1).block(); EventDeadLetters.InsertionId insertionId2 = eventDeadLetters().store(GROUP_B, EVENT_2).block(); - assertThat(testee().check().isDegraded()).isTrue(); - assertThat(testee().check()) + assertThat(testee().checkReactive().block().isDegraded()).isTrue(); + assertThat(testee().checkReactive().block()) .isEqualTo(Result.degraded(COMPONENT_NAME, EXPECTED_DEGRADED_MESSAGE)); eventDeadLetters().remove(GROUP_A, insertionId1).block(); eventDeadLetters().remove(GROUP_B, insertionId2).block(); - assertThat(testee().check().isHealthy()).isTrue(); - assertThat(testee().check()) + assertThat(testee().checkReactive().block().isHealthy()).isTrue(); + assertThat(testee().checkReactive().block()) .isEqualTo(Result.healthy(COMPONENT_NAME)); } @@ -103,14 +103,14 @@ interface EventDeadLettersHealthCheckContract { EventDeadLetters.InsertionId insertionId1 = eventDeadLetters().store(GROUP_A, EVENT_1).block(); eventDeadLetters().store(GROUP_B, EVENT_2).block(); - assertThat(testee().check().isDegraded()).isTrue(); - assertThat(testee().check()) + assertThat(testee().checkReactive().block().isDegraded()).isTrue(); + assertThat(testee().checkReactive().block()) .isEqualTo(Result.degraded(COMPONENT_NAME, EXPECTED_DEGRADED_MESSAGE)); eventDeadLetters().remove(GROUP_A, insertionId1).block(); - assertThat(testee().check().isDegraded()).isTrue(); - assertThat(testee().check()) + assertThat(testee().checkReactive().block().isDegraded()).isTrue(); + assertThat(testee().checkReactive().block()) .isEqualTo(Result.degraded(COMPONENT_NAME, EXPECTED_DEGRADED_MESSAGE)); } @@ -119,7 +119,7 @@ interface EventDeadLettersHealthCheckContract { Result actualResult; try { createErrorWhenDoingHealthCheck(); - actualResult = testee().check(); + actualResult = testee().checkReactive().block(); } finally { resolveErrorWhenDoingHealthCheck(); } diff --git a/metrics/metrics-tests/pom.xml b/metrics/metrics-tests/pom.xml index 69f0432..c8971d6 100644 --- a/metrics/metrics-tests/pom.xml +++ b/metrics/metrics-tests/pom.xml @@ -58,5 +58,9 @@ <groupId>com.github.steveash.guavate</groupId> <artifactId>guavate</artifactId> </dependency> + <dependency> + <groupId>io.projectreactor</groupId> + <artifactId>reactor-core</artifactId> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java index 6819ebe..8627197 100644 --- a/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java +++ b/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java @@ -95,7 +95,7 @@ public class PeriodicalHealthChecksTest { @Test void startShouldCallRemainingHealthChecksWhenAHealthCheckThrows() { - when(mockHealthCheck1.check()).thenThrow(new RuntimeException()); + when(mockHealthCheck1.checkReactive()).thenReturn(Mono.error(RuntimeException::new)); testee.start(); diff --git a/server/data/data-jmap/pom.xml b/server/data/data-jmap/pom.xml index 2811569..e913193 100644 --- a/server/data/data-jmap/pom.xml +++ b/server/data/data-jmap/pom.xml @@ -85,6 +85,10 @@ <artifactId>guava</artifactId> </dependency> <dependency> + <groupId>io.projectreactor</groupId> + <artifactId>reactor-core</artifactId> + </dependency> + <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> </dependency> diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java index de18851..61c5f79 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java @@ -30,6 +30,8 @@ import org.apache.james.core.healthcheck.Result; import org.apache.james.metrics.api.Metric; import org.apache.james.metrics.api.MetricFactory; +import reactor.core.publisher.Mono; + public class MessageFastViewProjectionHealthCheck implements HealthCheck { private static final ComponentName COMPONENT_NAME = new ComponentName("MessageFastViewProjection"); @@ -50,14 +52,16 @@ public class MessageFastViewProjectionHealthCheck implements HealthCheck { } @Override - public Result check() { - long hitCount = retrieveHitCountMetric.getCount(); - long missCount = retrieveMissCountMetric.getCount(); - - if (missCount == 0) { - return Result.healthy(COMPONENT_NAME); - } - return check(hitCount, missCount); + public Mono<Result> checkReactive() { + return Mono.fromCallable(() -> retrieveMissCountMetric.getCount()) + .flatMap(missCount -> { + if (missCount == 0) { + return Mono.just(Result.healthy(COMPONENT_NAME)); + } else { + return Mono.fromCallable(() -> retrieveHitCountMetric.getCount()) + .map(hitCount -> check(hitCount, missCount)); + } + }); } private Result check(long hitCount, long missCount) { diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java index b9888e7..f7ac3fa 100644 --- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java +++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java @@ -62,7 +62,7 @@ class MessageFastViewProjectionHealthCheckTest { @Test void checkShouldReturnHealthyWhenNoRetrieveCalled() { - assertThat(testee.check()) + assertThat(testee.checkReactive().block()) .isEqualTo(Result.healthy(COMPONENT_NAME)); } @@ -71,7 +71,7 @@ class MessageFastViewProjectionHealthCheckTest { missMetric.increment(); missMetric.increment(); - assertThat(testee.check()) + assertThat(testee.checkReactive().block()) .isEqualTo(Result.degraded(COMPONENT_NAME, "retrieveMissCount percentage 100.0% (2/2) is higher than the threshold 10.0%")); } @@ -80,7 +80,7 @@ class MessageFastViewProjectionHealthCheckTest { missMetric.increment(); hitMetric.add(43); - assertThat(testee.check()) + assertThat(testee.checkReactive().block()) .isEqualTo(Result.healthy(COMPONENT_NAME)); } @@ -89,7 +89,7 @@ class MessageFastViewProjectionHealthCheckTest { missMetric.increment(); hitMetric.add(9); - assertThat(testee.check()) + assertThat(testee.checkReactive().block()) .isEqualTo(Result.healthy(COMPONENT_NAME)); } @@ -98,7 +98,7 @@ class MessageFastViewProjectionHealthCheckTest { missMetric.increment(); hitMetric.add(3); - assertThat(testee.check()) + assertThat(testee.checkReactive().block()) .isEqualTo(Result.degraded(COMPONENT_NAME, "retrieveMissCount percentage 25.0% (1/4) is higher than the threshold 10.0%")); } @@ -107,11 +107,11 @@ class MessageFastViewProjectionHealthCheckTest { void checkShouldReturnHealthyAfterMoreHits() { missMetric.increment(); hitMetric.increment(); - Result resultWithLessHit = testee.check(); + Result resultWithLessHit = testee.checkReactive().block(); // more hits hitMetric.add(10); - Result resultWithMoreHit = testee.check(); + Result resultWithMoreHit = testee.checkReactive().block(); SoftAssertions.assertSoftly(softly -> { softly.assertThat(resultWithLessHit) @@ -126,11 +126,11 @@ class MessageFastViewProjectionHealthCheckTest { void checkShouldKeepBeingDegradedAfterNotEnoughOfHits() { missMetric.increment(); hitMetric.increment(); - Result resultWithLessHit = testee.check(); + Result resultWithLessHit = testee.checkReactive().block(); // more hits, but not enough hitMetric.add(3); - Result resultWithMoreHit = testee.check(); + Result resultWithMoreHit = testee.checkReactive().block(); SoftAssertions.assertSoftly(softly -> { softly.assertThat(resultWithLessHit) @@ -148,11 +148,11 @@ class MessageFastViewProjectionHealthCheckTest { // enough of hits hitMetric.add(10); - Result resultWithEnoughOfHits = testee.check(); + Result resultWithEnoughOfHits = testee.checkReactive().block(); // more miss missMetric.increment(); - Result resultWithMoreMiss = testee.check(); + Result resultWithMoreMiss = testee.checkReactive().block(); SoftAssertions.assertSoftly(softly -> { softly.assertThat(resultWithEnoughOfHits) @@ -168,12 +168,12 @@ class MessageFastViewProjectionHealthCheckTest { missMetric.increment(); // enough of hits hitMetric.add(10000); - Result resultWithEnoughOfHits = testee.check(); + Result resultWithEnoughOfHits = testee.checkReactive().block(); // more miss, but not enough IntStream.rangeClosed(1, 3) .forEach(counter -> missMetric.increment()); - Result resultWithMoreMiss = testee.check(); + Result resultWithMoreMiss = testee.checkReactive().block(); SoftAssertions.assertSoftly(softly -> { softly.assertThat(resultWithEnoughOfHits) diff --git a/server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java b/server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java index 8cd1706..281626c 100644 --- a/server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java +++ b/server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java @@ -28,6 +28,8 @@ import org.apache.james.core.healthcheck.ComponentName; import org.apache.james.core.healthcheck.HealthCheck; import org.apache.james.core.healthcheck.Result; +import reactor.core.publisher.Mono; + public class JPAHealthCheck implements HealthCheck { private final EntityManagerFactory entityManagerFactory; @@ -43,15 +45,17 @@ public class JPAHealthCheck implements HealthCheck { } @Override - public Result check() { - try { - if (entityManagerFactory.createEntityManager().isOpen()) { - return healthy(componentName()); - } - } catch (IllegalStateException stateException) { - return unhealthy(componentName(), "EntityManagerFactory or EntityManager thrown an IllegalStateException, the connection is unhealthy", stateException); - } - - return unhealthy(componentName(), "entityManager is not open"); + public Mono<Result> checkReactive() { + return Mono.fromCallable(entityManagerFactory::createEntityManager) + .map(entityManager -> entityManager.isOpen()) + .map(open -> { + if (open) { + return healthy(componentName()); + } else { + return unhealthy(componentName(), "entityManager is not open"); + } + }) + .onErrorResume(IllegalStateException.class, + e -> Mono.just(unhealthy(componentName(), "EntityManagerFactory or EntityManager thrown an IllegalStateException, the connection is unhealthy", e))); } } diff --git a/server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java b/server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java index b749d96..a365abe 100644 --- a/server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java +++ b/server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java @@ -46,7 +46,7 @@ class JPAHealthCheckTest { @Test void testWhenActive() { - Result result = jpaHealthCheck.check(); + Result result = jpaHealthCheck.checkReactive().block(); ResultStatus healthy = ResultStatus.HEALTHY; assertThat(result.getStatus()).as("Result %s status should be %s", result.getStatus(), healthy) .isEqualTo(healthy); @@ -57,7 +57,7 @@ class JPAHealthCheckTest { jpaTestCluster.getEntityManagerFactory().close(); Result result = Result.healthy(jpaHealthCheck.componentName()); try { - result = jpaHealthCheck.check(); + result = jpaHealthCheck.checkReactive().block(); } catch (IllegalStateException e) { fail("The exception of the EMF was not handled property.ยช"); } diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java index 12051af..ce75afa 100644 --- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java +++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java @@ -49,6 +49,8 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; import spark.HaltException; import spark.Request; import spark.Response; @@ -94,7 +96,7 @@ public class HealthCheckRoutes implements PublicRoutes { message = "Internal server error - When one check has failed.") }) public Object validateHealthChecks(Request request, Response response) { - ImmutableList<Result> results = executeHealthChecks(); + List<Result> results = executeHealthChecks().collectList().block(); ResultStatus status = retrieveAggregationStatus(results); response.status(getCorrespondingStatusCode(status)); return new HeathCheckAggregationExecutionResultDto(status, mapResultToDto(results)); @@ -119,8 +121,8 @@ public class HealthCheckRoutes implements PublicRoutes { .filter(c -> c.componentName().getName().equals(componentName)) .findFirst() .orElseThrow(() -> throw404(componentName)); - - Result result = healthCheck.check(); + + Result result = Mono.from(healthCheck.checkReactive()).block(); logFailedCheck(result); response.status(getCorrespondingStatusCode(result.getStatus())); return new HealthCheckExecutionResultDto(result); @@ -175,11 +177,10 @@ public class HealthCheckRoutes implements PublicRoutes { } } - private ImmutableList<Result> executeHealthChecks() { - return healthChecks.stream() - .map(HealthCheck::check) - .peek(this::logFailedCheck) - .collect(ImmutableList.toImmutableList()); + private Flux<Result> executeHealthChecks() { + return Flux.fromIterable(healthChecks) + .flatMap(HealthCheck::checkReactive) + .doOnNext(this::logFailedCheck); } private ResultStatus retrieveAggregationStatus(List<Result> results) { diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java index 359724d..a394531 100644 --- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java +++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java @@ -41,9 +41,11 @@ import org.eclipse.jetty.http.HttpStatus; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.reactivestreams.Publisher; import io.restassured.RestAssured; import net.javacrumbs.jsonunit.core.Option; +import reactor.core.publisher.Mono; public class HealthCheckRoutesTest { @@ -65,8 +67,8 @@ public class HealthCheckRoutesTest { } @Override - public Result check() { - return result; + public Publisher<Result> checkReactive() { + return Mono.just(result); } }; } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org