From 048413d5087eb15a5cd271c686e5a08adfc782cb Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Thu, 13 May 2021 16:40:10 -0400 Subject: [PATCH] Parallel restart of apps in Boot Dash --- .../boot/dash/views/BootDashActions.java | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/views/BootDashActions.java b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/views/BootDashActions.java index d9694d326..05f06a036 100644 --- a/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/views/BootDashActions.java +++ b/eclipse-extensions/org.springframework.ide.eclipse.boot.dash/src/org/springframework/ide/eclipse/boot/dash/views/BootDashActions.java @@ -374,15 +374,31 @@ public class BootDashActions { public IStatus run(IProgressMonitor monitor) { monitor.beginTask("Restart Boot Dash Elements", selecteds.size()); try { + + List> futures = new ArrayList<>(selecteds.size()); for (BootDashElement el : selecteds) { - monitor.subTask("Restarting: " + el.getName()); - try { - el.restart(goalState, ui()); - } catch (Exception e) { - return BootActivator.createErrorStatus(e); - } - monitor.worked(1); + futures.add(CompletableFuture.runAsync(() -> { + monitor.subTask("Restarting: " + el.getName()); + try { + el.restart(goalState, ui()); + monitor.worked(1); + } catch (Exception e) { + monitor.worked(1); + throw new CompletionException(e); + } + })); } + + try { + CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).get(60, TimeUnit.SECONDS); + } catch (InterruptedException e) { + return BootActivator.createErrorStatus(e); + } catch (ExecutionException e) { + return BootActivator.createErrorStatus(e); + } catch (TimeoutException e) { + return BootActivator.createErrorStatus(e); + } + return Status.OK_STATUS; } finally { monitor.done();