Skip to content

Commit a9bfeef

Browse files
committed
prevent parallel and multiple engine installation and start
1 parent 1d3fe8b commit a9bfeef

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

ide-common/src/main/kotlin/org/digma/intellij/plugin/docker/DockerService.kt

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class DockerService {
3838

3939
private val engine = Engine()
4040
private val downloader = Downloader()
41-
private var installationInProgress: Boolean = false
4241

4342
companion object {
4443

@@ -76,10 +75,6 @@ class DockerService {
7675
}
7776

7877

79-
fun isInstallationInProgress(): Boolean {
80-
return installationInProgress
81-
}
82-
8378
fun isDockerInstalled(): Boolean {
8479
return isInstalled(DOCKER_COMMAND)
8580
}
@@ -138,12 +133,6 @@ class DockerService {
138133

139134
@Internal
140135
fun installEngine(project: Project, resultTask: Consumer<String>) {
141-
installationInProgress = true
142-
143-
144-
val onCompleted = Consumer { _: String ->
145-
installationInProgress = false
146-
}.andThen(resultTask)
147136

148137
ActivityMonitor.getInstance(project).registerDigmaEngineEventStart("installEngine", mapOf())
149138

@@ -167,23 +156,23 @@ class DockerService {
167156
}
168157
}
169158

170-
notifyResult(exitValue, onCompleted)
159+
notifyResult(exitValue, resultTask)
171160
} else {
172161
ActivityMonitor.getInstance(project).registerDigmaEngineEventError("installEngine", "could not find docker compose command")
173162
Log.log(logger::warn, "could not find docker compose command")
174-
notifyResult(NO_DOCKER_COMPOSE_COMMAND, onCompleted)
163+
notifyResult(NO_DOCKER_COMPOSE_COMMAND, resultTask)
175164
}
176165
} else {
177166
ActivityMonitor.getInstance(project).registerDigmaEngineEventError("installEngine", "Failed to download compose file")
178167
Log.log(logger::warn, "Failed to download compose file")
179-
notifyResult("Failed to download compose file", onCompleted)
168+
notifyResult("Failed to download compose file", resultTask)
180169
}
181170

182171
} catch (e: Throwable) {
183172
ErrorReporter.getInstance().reportError(project, "DockerService.installEngine", e)
184173
ActivityMonitor.getInstance(project).registerDigmaEngineEventError("installEngine", "Failed in installEngine $e")
185174
Log.warnWithException(logger, e, "Failed install docker engine {}", e)
186-
notifyResult("Failed to install docker engine: $e", onCompleted)
175+
notifyResult("Failed to install docker engine: $e", resultTask)
187176
} finally {
188177
ActivityMonitor.getInstance(project).registerDigmaEngineEventEnd("installEngine", mapOf())
189178
}

ide-common/src/main/kotlin/org/digma/intellij/plugin/docker/LocalInstallationFacade.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.digma.intellij.plugin.docker
22

33
import com.intellij.openapi.components.Service
4+
import com.intellij.openapi.components.service
45
import com.intellij.openapi.diagnostic.Logger
56
import com.intellij.openapi.project.Project
67
import org.digma.intellij.plugin.log.Log
@@ -25,6 +26,15 @@ class LocalInstallationFacade {
2526

2627
private val myResultTask = MyResultTask()
2728

29+
30+
companion object {
31+
@JvmStatic
32+
fun getInstance(): LocalInstallationFacade {
33+
return service<LocalInstallationFacade>()
34+
}
35+
}
36+
37+
2838
/*
2939
for any operation that is requested the flow is:
3040
* if nothing is running start the operation and add resultTask as consumer to the result.
@@ -114,6 +124,16 @@ class LocalInstallationFacade {
114124
}
115125

116126

127+
fun isInstallationInProgress(): Boolean {
128+
return operationInProgress.get() == OP.INSTALL
129+
}
130+
131+
132+
133+
134+
135+
136+
117137
private inner class MyResultTask : Consumer<String> {
118138

119139
private val myConsumers = mutableListOf<Consumer<String>>()

src/main/java/org/digma/intellij/plugin/toolwindow/DigmaToolWindowsListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import com.intellij.openapi.wm.*;
66
import com.intellij.openapi.wm.ex.ToolWindowManagerListener;
77
import org.digma.intellij.plugin.PluginId;
8-
import org.digma.intellij.plugin.docker.DockerService;
8+
import org.digma.intellij.plugin.docker.*;
99
import org.digma.intellij.plugin.posthog.ActivityMonitor;
1010
import org.digma.intellij.plugin.ui.notificationcenter.AppNotificationCenter;
1111
import org.jetbrains.annotations.NotNull;
@@ -52,7 +52,7 @@ public void stateChanged(@NotNull ToolWindowManager toolWindowManager, @NotNull
5252
private void onMainToolWindowClose() {
5353
ActivityMonitor.getInstance(project).registerSidePanelClosed();
5454

55-
if (DockerService.getInstance().isInstallationInProgress()) {
55+
if (LocalInstallationFacade.getInstance().isInstallationInProgress()) {
5656
ApplicationManager.getApplication().getService(AppNotificationCenter.class).showInstallationInProgressNotification(project);
5757
}
5858
}

0 commit comments

Comments
 (0)