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