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 ro...@apache.org on 2019/11/26 15:31:42 UTC
[james-project] 07/07: JAMES-2813 add test to demonstrate
resilience with single active consumer
This is an automated email from the ASF dual-hosted git repository.
rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 1e5a8dd1db3db79e04080ee9d0db3f39a99a5c16
Author: RĂ©mi KOWALSKI <rk...@linagora.com>
AuthorDate: Mon Oct 21 15:44:41 2019 +0200
JAMES-2813 add test to demonstrate resilience with single active consumer
---
.../distributed/DistributedTaskManagerTest.java | 39 ++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java
index 02c6024..1b5a5de 100644
--- a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java
+++ b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java
@@ -73,6 +73,8 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
+import com.google.common.collect.ImmutableBiMap;
+
class DistributedTaskManagerTest implements TaskManagerContract {
static class TrackedRabbitMQWorkQueueSupplier implements WorkQueueSupplier {
@@ -305,4 +307,41 @@ class DistributedTaskManagerTest implements TaskManagerContract {
});
}
}
+
+ @Test
+ void givenTwoTaskManagerIfTheFirstOneIsDownTheSecondOneShouldBeAbleToRunTheRemainingTasks(CountDownLatch countDownLatch) throws Exception {
+ try (EventSourcingTaskManager taskManager1 = taskManager();
+ EventSourcingTaskManager taskManager2 = taskManager(HOSTNAME_2)) {
+ ImmutableBiMap<EventSourcingTaskManager, Hostname> hostNameByTaskManager = ImmutableBiMap.of(taskManager1, HOSTNAME, taskManager2, HOSTNAME_2);
+ TaskId firstTask = taskManager1.submit(new MemoryReferenceTask(() -> {
+ countDownLatch.await();
+ return Task.Result.COMPLETED;
+ }));
+
+ awaitUntilTaskHasStatus(firstTask, TaskManager.Status.IN_PROGRESS, taskManager1);
+
+ Hostname nodeRunningFirstTask = taskManager1.getExecutionDetails(firstTask).getRanNode().get();
+ Hostname otherNode = getOtherNode(hostNameByTaskManager, nodeRunningFirstTask);
+ EventSourcingTaskManager taskManagerRunningFirstTask = hostNameByTaskManager.inverse().get(nodeRunningFirstTask);
+ EventSourcingTaskManager otherTaskManager = hostNameByTaskManager.inverse().get(otherNode);
+
+ TaskId taskToExecuteAfterFirstNodeIsDown = taskManagerRunningFirstTask.submit(new CompletedTask());
+ taskManagerRunningFirstTask.close();
+
+ awaitAtMostFiveSeconds.untilAsserted(() ->
+ assertThat(otherTaskManager.getExecutionDetails(taskToExecuteAfterFirstNodeIsDown).getStatus())
+ .isEqualTo(TaskManager.Status.COMPLETED));
+ TaskExecutionDetails detailsSecondTask = otherTaskManager.getExecutionDetails(taskToExecuteAfterFirstNodeIsDown);
+ assertThat(detailsSecondTask.getRanNode()).contains(otherNode);
+ }
+ }
+
+ private Hostname getOtherNode(ImmutableBiMap<EventSourcingTaskManager, Hostname> hostNameByTaskManager, Hostname node) {
+ return hostNameByTaskManager
+ .values()
+ .stream()
+ .filter(hostname -> !hostname.equals(node))
+ .findFirst()
+ .get();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org