You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2022/10/06 03:37:34 UTC
[james-project] 01/01: JAMES-3604 Allow quorum queues only on mail queues
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch quorum-mail-queue
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit a8f278d17e10753d946c631f7065921835398c8e
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Thu Oct 6 10:24:15 2022 +0700
JAMES-3604 Allow quorum queues only on mail queues
Performance tests showed that there was some serious performance issues when having quorum queues for event notifications as well with IMAP.
---
.../src/main/java/org/apache/james/backends/rabbitmq/Constants.java | 1 +
.../org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java | 4 ++--
.../src/main/java/org/apache/james/events/GroupRegistration.java | 3 ++-
.../main/java/org/apache/james/events/GroupRegistrationHandler.java | 3 ++-
.../src/main/java/org/apache/james/events/KeyReconnectionHandler.java | 3 ++-
.../src/main/java/org/apache/james/events/KeyRegistrationHandler.java | 3 ++-
.../org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java | 3 ++-
7 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/Constants.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/Constants.java
index b0651e2901..3cf7049b76 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/Constants.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/Constants.java
@@ -27,6 +27,7 @@ import com.rabbitmq.client.AMQP;
public interface Constants {
boolean DURABLE = true;
boolean AUTO_DELETE = true;
+ boolean ALLOW_QUORUM = true;
boolean EXCLUSIVE = true;
boolean NO_LOCAL = true;
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java
index 45612bcc19..7e08f3d3ab 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java
@@ -762,9 +762,9 @@ public class RabbitMQConfiguration {
return sslConfiguration;
}
- public QueueArguments.Builder workQueueArgumentsBuilder(boolean autoDeleteQueue) {
+ public QueueArguments.Builder workQueueArgumentsBuilder(boolean allowQuorum) {
QueueArguments.Builder builder = QueueArguments.builder();
- if (!autoDeleteQueue && useQuorumQueues) {
+ if (allowQuorum && useQuorumQueues) {
builder.quorumQueue().replicationFactor(quorumQueueReplicationFactor);
}
queueTTL.ifPresent(builder::queueTTL);
diff --git a/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java b/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java
index 0acc7c970f..f440d72745 100644
--- a/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java
+++ b/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java
@@ -19,6 +19,7 @@
package org.apache.james.events;
+import static org.apache.james.backends.rabbitmq.Constants.ALLOW_QUORUM;
import static org.apache.james.backends.rabbitmq.Constants.AUTO_DELETE;
import static org.apache.james.backends.rabbitmq.Constants.DURABLE;
import static org.apache.james.backends.rabbitmq.Constants.EXCLUSIVE;
@@ -132,7 +133,7 @@ class GroupRegistration implements Registration {
.durable(DURABLE)
.exclusive(!EXCLUSIVE)
.autoDelete(!AUTO_DELETE)
- .arguments(configuration.workQueueArgumentsBuilder(!AUTO_DELETE)
+ .arguments(configuration.workQueueArgumentsBuilder(!ALLOW_QUORUM)
.deadLetter(namingStrategy.deadLetterExchange())
.build()));
}
diff --git a/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java b/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java
index 0fa3a6c0cb..98b006dc19 100644
--- a/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java
+++ b/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java
@@ -19,6 +19,7 @@
package org.apache.james.events;
+import static org.apache.james.backends.rabbitmq.Constants.ALLOW_QUORUM;
import static org.apache.james.backends.rabbitmq.Constants.AUTO_DELETE;
import static org.apache.james.backends.rabbitmq.Constants.DURABLE;
import static org.apache.james.backends.rabbitmq.Constants.EMPTY_ROUTING_KEY;
@@ -109,7 +110,7 @@ class GroupRegistrationHandler {
.durable(DURABLE)
.exclusive(!EXCLUSIVE)
.autoDelete(!AUTO_DELETE)
- .arguments(configuration.workQueueArgumentsBuilder(!AUTO_DELETE)
+ .arguments(configuration.workQueueArgumentsBuilder(!ALLOW_QUORUM)
.deadLetter(namingStrategy.deadLetterExchange())
.build()),
BindingSpecification.binding()
diff --git a/event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java b/event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java
index cd8b1f21e2..1c2ba21d4e 100644
--- a/event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java
+++ b/event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java
@@ -19,6 +19,7 @@
package org.apache.james.events;
+import static org.apache.james.backends.rabbitmq.Constants.ALLOW_QUORUM;
import static org.apache.james.backends.rabbitmq.Constants.AUTO_DELETE;
import static org.apache.james.backends.rabbitmq.Constants.DURABLE;
import static org.apache.james.backends.rabbitmq.Constants.EXCLUSIVE;
@@ -55,7 +56,7 @@ public class KeyReconnectionHandler implements SimpleConnectionPool.Reconnection
return Mono.fromRunnable(() -> {
try (Channel channel = connection.createChannel()) {
channel.queueDeclare(namingStrategy.queueName(eventBusId).asString(), DURABLE, !EXCLUSIVE, AUTO_DELETE,
- configuration.workQueueArgumentsBuilder(AUTO_DELETE).build());
+ configuration.workQueueArgumentsBuilder(!ALLOW_QUORUM).build());
} catch (Exception e) {
LOGGER.error("Error recovering connection", e);
}
diff --git a/event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java b/event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java
index 6a2ad61550..5fc2a5ec84 100644
--- a/event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java
+++ b/event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java
@@ -19,6 +19,7 @@
package org.apache.james.events;
+import static org.apache.james.backends.rabbitmq.Constants.ALLOW_QUORUM;
import static org.apache.james.backends.rabbitmq.Constants.AUTO_DELETE;
import static org.apache.james.backends.rabbitmq.Constants.EXCLUSIVE;
import static org.apache.james.events.RabbitMQEventBus.EVENT_BUS_ID;
@@ -126,7 +127,7 @@ class KeyRegistrationHandler {
.durable(configuration.isEventBusNotificationDurabilityEnabled())
.exclusive(!EXCLUSIVE)
.autoDelete(AUTO_DELETE)
- .arguments(configuration.workQueueArgumentsBuilder(AUTO_DELETE).build()))
+ .arguments(configuration.workQueueArgumentsBuilder(!ALLOW_QUORUM).build()))
.timeout(TOPOLOGY_CHANGES_TIMEOUT)
.map(AMQP.Queue.DeclareOk::getQueue)
.retryWhen(Retry.backoff(retryBackoff.getMaxRetries(), retryBackoff.getFirstBackoff()).jitter(retryBackoff.getJitterFactor()))
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
index fe9e41aa72..593912e458 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
@@ -19,6 +19,7 @@
package org.apache.james.queue.rabbitmq;
+import static org.apache.james.backends.rabbitmq.Constants.ALLOW_QUORUM;
import static org.apache.james.backends.rabbitmq.Constants.AUTO_DELETE;
import static org.apache.james.backends.rabbitmq.Constants.DURABLE;
import static org.apache.james.backends.rabbitmq.Constants.EMPTY_ROUTING_KEY;
@@ -167,7 +168,7 @@ public class RabbitMQMailQueueFactory implements MailQueueFactory<RabbitMQMailQu
.durable(DURABLE)
.exclusive(!EXCLUSIVE)
.autoDelete(!AUTO_DELETE)
- .arguments(configuration.workQueueArgumentsBuilder(!AUTO_DELETE)
+ .arguments(configuration.workQueueArgumentsBuilder(ALLOW_QUORUM)
.deadLetter(mailQueueName.toDeadLetterExchangeName())
.build())),
sender.declareQueue(QueueSpecification.queue(mailQueueName.toDeadLetterQueueName())
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org