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

DomGarguilo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git

commit 060561126b84989a8e3f9e808ccb3a7d918aebcb
Merge: f823f0c17c e63a13ac75
Author: Dom G <[email protected]>
AuthorDate: Thu Oct 8 10:55:36 2026 -0400

    Merge branch '2.1' into main

 .../miniclusterImpl/MiniAccumuloClusterImpl.java   | 43 ++++++++--------------
 1 file changed, 15 insertions(+), 28 deletions(-)

diff --cc 
minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java
index a7d1a4a740,4bce23d5e9..20deaac848
--- 
a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java
+++ 
b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloClusterImpl.java
@@@ -49,7 -49,7 +49,6 @@@ import java.util.UUID
  import java.util.concurrent.CountDownLatch;
  import java.util.concurrent.ExecutionException;
  import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Future;
 -import java.util.concurrent.Executors;
  import java.util.concurrent.FutureTask;
  import java.util.concurrent.TimeUnit;
  import java.util.concurrent.TimeoutException;
@@@ -1148,36 -996,23 +1150,21 @@@ public class MiniAccumuloClusterImpl im
    public void stopProcessesWithTimeout(final ServerType type, final 
List<Process> procs,
        final long timeout, final TimeUnit unit) {
  
-     final List<Future<Integer>> futures = new ArrayList<>();
-     for (Process proc : procs) {
-       futures.add(executor.submit(() -> {
-         proc.destroy();
-         proc.waitFor(timeout, unit);
-         return proc.exitValue();
-       }));
-     }
+     // signal all first so they stop in parallel
+     procs.forEach(Process::destroy);
  
-     while (!futures.isEmpty()) {
-       futures.removeIf(f -> {
-         if (f.isDone()) {
-           try {
-             f.get();
-           } catch (ExecutionException | InterruptedException e) {
-             if (e instanceof InterruptedException) {
-               Thread.currentThread().interrupt();
-             }
-             log.warn("{} did not fully stop after {} seconds", type, 
unit.toSeconds(timeout), e);
-           }
-           return true;
 -    final Timer timer = Timer.startNew();
 -    final long timeoutNanos = unit.toNanos(timeout);
++    final CountDownTimer timer = CountDownTimer.startNew(timeout, unit);
+     try {
+       for (Process proc : procs) {
 -        long remainingNanos = timeoutNanos - 
timer.elapsed(TimeUnit.NANOSECONDS);
 -        boolean stopped = proc.waitFor(remainingNanos, TimeUnit.NANOSECONDS);
++        boolean stopped = proc.waitFor(timer.timeLeft(TimeUnit.NANOSECONDS), 
TimeUnit.NANOSECONDS);
+         if (!stopped) {
+           log.warn("{} (pid {}) did not fully stop after {} seconds", type, 
proc.pid(),
+               unit.toSeconds(timeout));
          }
-         return false;
-       });
-       try {
-         Thread.sleep(250);
-       } catch (InterruptedException e) {
-         log.warn("Interrupted while trying to stop " + type + " processes.");
-         Thread.currentThread().interrupt();
        }
+     } catch (InterruptedException e) {
+       log.warn("Interrupted while trying to stop {} processes.", type);
+       Thread.currentThread().interrupt();
      }
    }
  

Reply via email to