Skip to content

Commit 4933c74

Browse files
committed
Revert "Auto-forward Task Terminals Ports on JetBrains IDEs"
This reverts commit 95f02d8.
1 parent d7bac05 commit 4933c74

File tree

1 file changed

+46
-63
lines changed

1 file changed

+46
-63
lines changed

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/latest/GitpodTerminalService.kt

Lines changed: 46 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44

55
package io.gitpod.jetbrains.remote.latest
66

7+
import com.intellij.openapi.Disposable
78
import com.intellij.openapi.client.ClientProjectSession
89
import com.intellij.openapi.diagnostic.thisLogger
9-
import com.intellij.openapi.rd.createLifetime
1010
import com.intellij.remoteDev.util.onTerminationOrNow
1111
import com.intellij.util.application
12-
import com.jetbrains.rdserver.portForwarding.PortForwardingDiscovery
13-
import com.jetbrains.rdserver.portForwarding.PortForwardingManager
14-
import com.jetbrains.rdserver.portForwarding.remoteDev.PortEventsProcessor
12+
import com.jetbrains.rd.util.lifetime.Lifetime
1513
import com.jetbrains.rdserver.terminal.BackendTerminalManager
1614
import io.gitpod.jetbrains.remote.GitpodManager
1715
import io.gitpod.supervisor.api.Status
@@ -27,33 +25,43 @@ import java.util.concurrent.CompletableFuture
2725
import java.util.concurrent.TimeUnit
2826

2927
@Suppress("UnstableApiUsage")
30-
class GitpodTerminalService(private val session: ClientProjectSession) {
28+
class GitpodTerminalService(session: ClientProjectSession) : Disposable {
3129
private companion object {
32-
var hasStarted = false
33-
val forwardedPortsList: MutableSet<Int> = mutableSetOf()
30+
/** Indicates if this service is already running, because we shouldn't run it more than once. */
31+
var isRunning = false
3432
}
3533

34+
private val lifetime = Lifetime.Eternal.createNested()
3635
private val terminalView = TerminalView.getInstance(session.project)
3736
private val backendTerminalManager = BackendTerminalManager.getInstance(session.project)
38-
private val portForwardingManager = PortForwardingManager.getInstance(session.project)
3937
private val terminalServiceFutureStub = TerminalServiceGrpc.newFutureStub(GitpodManager.supervisorChannel)
4038
private val statusServiceStub = StatusServiceGrpc.newStub(GitpodManager.supervisorChannel)
4139

42-
init { start() }
40+
override fun dispose() {
41+
lifetime.terminate()
42+
}
43+
44+
init {
45+
run()
46+
}
4347

44-
private fun start() {
45-
if (application.isHeadlessEnvironment || hasStarted) return
48+
private fun run() {
49+
if (application.isHeadlessEnvironment || isRunning) return
4650

47-
hasStarted = true
51+
isRunning = true
4852

49-
application.executeOnPooledThread {
53+
val task = application.executeOnPooledThread {
5054
val terminals = getSupervisorTerminalsList()
5155
val tasks = getSupervisorTasksList()
5256

5357
application.invokeLater {
5458
createTerminalsAttachedToTasks(terminals, tasks)
5559
}
5660
}
61+
62+
lifetime.onTerminationOrNow {
63+
task.cancel(true)
64+
}
5765
}
5866

5967
private fun createSharedTerminalAndExecuteCommand(title: String, command: String) {
@@ -62,11 +70,12 @@ class GitpodTerminalService(private val session: ClientProjectSession) {
6270
backendTerminalManager.createNewSharedTerminal(UUID.randomUUID().toString(), title)
6371

6472
for (widget in terminalView.widgets) {
65-
if (registeredTerminals.contains(widget)) continue
66-
67-
widget.terminalTitle.change { applicationTitle = title }
68-
69-
(widget as ShellTerminalWidget).executeCommand(command)
73+
if (!registeredTerminals.contains(widget)) {
74+
widget.terminalTitle.change {
75+
applicationTitle = title
76+
}
77+
(widget as ShellTerminalWidget).executeCommand(command)
78+
}
7079
}
7180
}
7281

@@ -85,10 +94,11 @@ class GitpodTerminalService(private val session: ClientProjectSession) {
8594

8695
for (task in tasks) {
8796
val terminalAlias = task.terminal
88-
val terminal = aliasToTerminalMap[terminalAlias] ?: continue
97+
val terminal = aliasToTerminalMap[terminalAlias]
8998

90-
createAttachedSharedTerminal(terminal)
91-
autoForwardAllPortsFromTerminal(terminal)
99+
if (terminal != null) {
100+
createAttachedSharedTerminal(terminal)
101+
}
92102
}
93103
}
94104

@@ -102,17 +112,22 @@ class GitpodTerminalService(private val session: ClientProjectSession) {
102112

103113
val taskStatusResponseObserver = object :
104114
ClientResponseObserver<Status.TasksStatusRequest, Status.TasksStatusResponse> {
105-
override fun beforeStart(request: ClientCallStreamObserver<Status.TasksStatusRequest>) = Unit
115+
override fun beforeStart(request: ClientCallStreamObserver<Status.TasksStatusRequest>) {
116+
lifetime.onTerminationOrNow {
117+
request.cancel(null, null)
118+
}
119+
}
106120

107121
override fun onNext(response: Status.TasksStatusResponse) {
108122
for (task in response.tasksList) {
109-
if (task.state === Status.TaskState.opening) return
123+
if (task.state === Status.TaskState.opening) {
124+
return
125+
}
110126
}
111-
112127
completableFuture.complete(response.tasksList)
113128
}
114129

115-
override fun onCompleted() = Unit
130+
override fun onCompleted() {}
116131

117132
override fun onError(throwable: Throwable) {
118133
completableFuture.completeExceptionally(throwable)
@@ -128,7 +143,7 @@ class GitpodTerminalService(private val session: ClientProjectSession) {
128143
}
129144

130145
thisLogger().error(
131-
"gitpod: Got an error while trying to get tasks list from Supervisor. Trying again in on second.",
146+
"Got an error while trying to get tasks list from Supervisor. Trying again in on second.",
132147
throwable
133148
)
134149
}
@@ -149,6 +164,10 @@ class GitpodTerminalService(private val session: ClientProjectSession) {
149164

150165
val listTerminalsResponseFuture = terminalServiceFutureStub.list(listTerminalsRequest)
151166

167+
lifetime.onTerminationOrNow {
168+
listTerminalsResponseFuture.cancel(true)
169+
}
170+
152171
val listTerminalsResponse = listTerminalsResponseFuture.get()
153172

154173
terminalsList = listTerminalsResponse.terminalsList
@@ -158,7 +177,7 @@ class GitpodTerminalService(private val session: ClientProjectSession) {
158177
}
159178

160179
thisLogger().error(
161-
"gitpod: Got an error while trying to get terminals list from Supervisor. Trying again in on second.",
180+
"Got an error while trying to get terminals list from Supervisor. Trying again in on second.",
162181
throwable
163182
)
164183
}
@@ -177,40 +196,4 @@ class GitpodTerminalService(private val session: ClientProjectSession) {
177196
"gp tasks attach ${supervisorTerminal.alias}"
178197
)
179198
}
180-
181-
private fun autoForwardAllPortsFromTerminal(supervisorTerminal: TerminalOuterClass.Terminal) {
182-
val projectLifetime = session.project.createLifetime()
183-
184-
val discoveryCallback = object : PortForwardingDiscovery {
185-
/**
186-
* @return Whether port should be forwarded or not.
187-
* We shouldn't try to forward ports that are already forwarded.
188-
*/
189-
override fun onPortDiscovered(hostPort: Int): Boolean = !forwardedPortsList.contains(hostPort)
190-
191-
override fun getEventsProcessor(hostPort: Int) = object : PortEventsProcessor {
192-
override fun onPortForwarded(hostPort: Int, clientPort: Int) {
193-
forwardedPortsList.add(hostPort)
194-
thisLogger().info("gitpod: Forwarded port $hostPort from Supervisor's Terminal " +
195-
"${supervisorTerminal.pid} to client's port $clientPort.")
196-
197-
projectLifetime.onTerminationOrNow {
198-
if (forwardedPortsList.contains(hostPort)) {
199-
forwardedPortsList.remove(hostPort)
200-
portForwardingManager.removePort(hostPort)
201-
thisLogger().info("gitpod: Removing forwarded port $hostPort from Supervisor's Terminal " +
202-
"${supervisorTerminal.pid}")
203-
}
204-
}
205-
}
206-
207-
override fun onPortForwardingFailed(hostPort: Int, reason: String) {
208-
thisLogger().error("gitpod: Failed to forward port $hostPort from Supervisor's Terminal " +
209-
"${supervisorTerminal.pid}: $reason")
210-
}
211-
}
212-
}
213-
214-
portForwardingManager.forwardPortsOfPid(projectLifetime, supervisorTerminal.pid, discoveryCallback, true)
215-
}
216199
}

0 commit comments

Comments
 (0)