You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/04 11:23:39 UTC
[james-project] 03/30: JAMES-2937 RabbitMQHealthCheck is testing a
non used channel pool
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 3e6ea8bd7f4021755cb2dea98a317499be028b37
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Oct 31 13:43:23 2019 +0700
JAMES-2937 RabbitMQHealthCheck is testing a non used channel pool
Our production code no longer uses SimpleChannelPool but Reactor channel pool
---
.../james/backends/rabbitmq/RabbitMQHealthCheck.java | 8 +++++---
.../backends/rabbitmq/ReactorRabbitMQChannelPool.java | 10 ++++++++++
.../james/backends/rabbitmq/RabbitMQExtension.java | 16 ++++++++--------
.../james/backends/rabbitmq/RabbitMQHealthCheckTest.java | 4 ++--
.../rabbitmq/ReactorRabbitMQChannelPoolTest.java | 2 +-
5 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheck.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheck.java
index d766a5f..7946173 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheck.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheck.java
@@ -31,10 +31,12 @@ public class RabbitMQHealthCheck implements HealthCheck {
private static final Logger LOGGER = LoggerFactory.getLogger(RabbitMQHealthCheck.class);
private static final ComponentName COMPONENT_NAME = new ComponentName("RabbitMQ backend");
- private final RabbitMQChannelPool rabbitChannelPoolImpl;
+ private final SimpleConnectionPool connectionPool;
+ private final ReactorRabbitMQChannelPool rabbitChannelPoolImpl;
@Inject
- public RabbitMQHealthCheck(RabbitMQChannelPool rabbitChannelPoolImpl) {
+ public RabbitMQHealthCheck(SimpleConnectionPool connectionPool, ReactorRabbitMQChannelPool rabbitChannelPoolImpl) {
+ this.connectionPool = connectionPool;
this.rabbitChannelPoolImpl = rabbitChannelPoolImpl;
}
@@ -46,7 +48,7 @@ public class RabbitMQHealthCheck implements HealthCheck {
@Override
public Result check() {
try {
- if (rabbitChannelPoolImpl.tryConnection()) {
+ if (connectionPool.tryConnection() && rabbitChannelPoolImpl.tryChannel()) {
return Result.healthy(COMPONENT_NAME);
} else {
String message = "The created connection was not opened";
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
index e240b93..645a68a 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
@@ -37,6 +37,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.fge.lambdas.Throwing;
+import com.google.common.base.Preconditions;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
@@ -138,6 +139,7 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
public Mono<? extends Channel> getChannelMono() {
return Mono.fromCallable(() -> {
Channel channel = pool.borrowObject(MAXIMUM_BORROW_TIMEOUT_IN_MS);
+ Preconditions.checkArgument(channel.isOpen());
borrowedChannels.add(channel);
return channel;
});
@@ -182,4 +184,12 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
borrowedChannels.clear();
pool.close();
}
+
+ public boolean tryChannel() {
+ try {
+ return getChannelMono().block().isOpen();
+ } catch (Throwable t) {
+ return false;
+ }
+ }
}
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java
index 668b808..a909bb0 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java
@@ -93,8 +93,7 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
private final DockerRabbitMQ rabbitMQ;
private final DockerRestartPolicy dockerRestartPolicy;
- private SimpleChannelPool simpleChannelPool;
- private RabbitMQConnectionFactory connectionFactory;
+ private ReactorRabbitMQChannelPool channelPool;
private SimpleConnectionPool connectionPool;
public RabbitMQExtension(DockerRabbitMQ rabbitMQ,
@@ -112,14 +111,15 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
public void beforeEach(ExtensionContext extensionContext) throws Exception {
dockerRestartPolicy.beforeEach(rabbitMQ);
- connectionFactory = createRabbitConnectionFactory();
+ RabbitMQConnectionFactory connectionFactory = createRabbitConnectionFactory();
connectionPool = new SimpleConnectionPool(connectionFactory);
- this.simpleChannelPool = new SimpleChannelPool(connectionPool);
+ channelPool = new ReactorRabbitMQChannelPool(connectionPool);
+ channelPool.start();
}
@Override
public void afterEach(ExtensionContext context) throws Exception {
- simpleChannelPool.close();
+ channelPool.close();
connectionPool.close();
rabbitMQ.reset();
dockerRestartPolicy.afterEach(rabbitMQ);
@@ -140,11 +140,11 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
return rabbitMQ;
}
- public RabbitMQChannelPool getRabbitChannelPool() {
- return simpleChannelPool;
+ public ReactorRabbitMQChannelPool getRabbitChannelPool() {
+ return channelPool;
}
- public SimpleConnectionPool getRabbitConnectionPool() {
+ public SimpleConnectionPool getConnectionPool() {
return connectionPool;
}
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 15c22c3..9f1d9f8 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
@@ -35,8 +35,8 @@ class RabbitMQHealthCheckTest {
private RabbitMQHealthCheck healthCheck;
@BeforeEach
- void setUp() throws Exception {
- healthCheck = new RabbitMQHealthCheck(rabbitMQExtension.getRabbitChannelPool());
+ void setUp() {
+ healthCheck = new RabbitMQHealthCheck(rabbitMQExtension.getConnectionPool(), rabbitMQExtension.getRabbitChannelPool());
}
@AfterEach
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java
index 21be0bd..9eaf53f 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java
@@ -67,7 +67,7 @@ class ReactorRabbitMQChannelPoolTest implements ChannelPoolContract {
private ReactorRabbitMQChannelPool generateChannelPool(int poolSize) {
ReactorRabbitMQChannelPool reactorRabbitMQChannelPool = new ReactorRabbitMQChannelPool(
- rabbitMQExtension.getRabbitConnectionPool().getResilientConnection(),
+ rabbitMQExtension.getConnectionPool().getResilientConnection(),
poolSize);
reactorRabbitMQChannelPool.start();
return reactorRabbitMQChannelPool;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org