You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2024/01/26 08:53:28 UTC

(ignite-3) branch main updated: IGNITE-21360 Fix ClientComputeTest (#3100)

This is an automated email from the ASF dual-hosted git repository.

ptupitsyn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 7a1225662c IGNITE-21360 Fix ClientComputeTest (#3100)
7a1225662c is described below

commit 7a1225662ce4cd780d32f4db6204847d6c0044d1
Author: Vadim Pakhnushev <86...@users.noreply.github.com>
AuthorDate: Fri Jan 26 11:53:22 2024 +0300

    IGNITE-21360 Fix ClientComputeTest (#3100)
    
    `JobStatus` static field in the `FakeCompute` is accessed concurrently from several executions, we need to mimic what the implementation is doing by storing statuses in the map.
---
 .../apache/ignite/client/ClientComputeTest.java    |  1 -
 .../apache/ignite/client/fakes/FakeCompute.java    | 27 +++++++++++-----------
 2 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/modules/client/src/test/java/org/apache/ignite/client/ClientComputeTest.java b/modules/client/src/test/java/org/apache/ignite/client/ClientComputeTest.java
index c9ed725386..d93bf92996 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/ClientComputeTest.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/ClientComputeTest.java
@@ -73,7 +73,6 @@ public class ClientComputeTest extends BaseIgniteAbstractTest {
     void tearDown() throws Exception {
         IgniteUtils.closeAll(server1, server2, server3);
         FakeCompute.future = null;
-        FakeCompute.status = null;
     }
 
     @Test
diff --git a/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeCompute.java b/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeCompute.java
index 3b119ea0aa..c3e69d688c 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeCompute.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeCompute.java
@@ -31,6 +31,7 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletionException;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.stream.Collectors;
 import org.apache.ignite.compute.DeploymentUnit;
@@ -57,7 +58,7 @@ public class FakeCompute implements IgniteComputeInternal {
 
     public static volatile @Nullable RuntimeException err;
 
-    public static volatile @Nullable JobStatus status;
+    private final Map<UUID, JobStatus> statuses = new ConcurrentHashMap<>();
 
     public static volatile CountDownLatch latch = new CountDownLatch(0);
 
@@ -74,8 +75,6 @@ public class FakeCompute implements IgniteComputeInternal {
             String jobClassName,
             JobExecutionOptions options,
             Object... args) {
-        initStatus();
-
         if (Objects.equals(jobClassName, GET_UNITS)) {
             String unitString = units.stream().map(DeploymentUnit::render).collect(Collectors.joining(","));
             return completedExecution((R) unitString);
@@ -119,7 +118,6 @@ public class FakeCompute implements IgniteComputeInternal {
             JobExecutionOptions options,
             Object... args
     ) {
-        initStatus();
         return jobExecution(future != null ? future : completedFuture((R) nodeName));
     }
 
@@ -133,7 +131,6 @@ public class FakeCompute implements IgniteComputeInternal {
             JobExecutionOptions options,
             Object... args
     ) {
-        initStatus();
         return jobExecution(future != null ? future : completedFuture((R) nodeName));
     }
 
@@ -183,23 +180,25 @@ public class FakeCompute implements IgniteComputeInternal {
         return null;
     }
 
-    private static <R> JobExecution<R> completedExecution(R result) {
+    private <R> JobExecution<R> completedExecution(R result) {
         return jobExecution(completedFuture(result));
     }
 
-    private static void initStatus() {
-        status = JobStatus.builder()
-                .id(UUID.randomUUID())
+    private <R> JobExecution<R> jobExecution(CompletableFuture<R> result) {
+        UUID jobId = UUID.randomUUID();
+
+        JobStatus status = JobStatus.builder()
+                .id(jobId)
                 .state(EXECUTING)
                 .createTime(Instant.now())
                 .startTime(Instant.now())
                 .build();
-    }
+        statuses.put(jobId, status);
 
-    private static <R> JobExecution<R> jobExecution(CompletableFuture<R> result) {
         result.whenComplete((r, throwable) -> {
             JobState state = throwable != null ? FAILED : COMPLETED;
-            status = status.toBuilder().state(state).finishTime(Instant.now()).build();
+            JobStatus newStatus = status.toBuilder().state(state).finishTime(Instant.now()).build();
+            statuses.put(jobId, newStatus);
         });
         return new JobExecution<>() {
             @Override
@@ -209,7 +208,7 @@ public class FakeCompute implements IgniteComputeInternal {
 
             @Override
             public CompletableFuture<@Nullable JobStatus> statusAsync() {
-                return completedFuture(status);
+                return completedFuture(statuses.get(jobId));
             }
 
             @Override
@@ -226,7 +225,7 @@ public class FakeCompute implements IgniteComputeInternal {
 
     @Override
     public CompletableFuture<@Nullable JobStatus> statusAsync(UUID jobId) {
-        return completedFuture(status);
+        return completedFuture(statuses.get(jobId));
     }
 
     @Override