Skip to content

Commit 8c0f8b4

Browse files
committed
fix: avoid bind exception when reconnecting after failure
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 98be0a6 commit 8c0f8b4

File tree

3 files changed

+10
-9
lines changed

3 files changed

+10
-9
lines changed

src/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnection.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,22 @@ class DevSpacesConnection(private val devSpacesContext: DevSpacesContext) {
6363
false
6464
)
6565

66-
val forwarder = Pods(devSpacesContext.client).forward(remoteIdeServer.pod, 5990, 5990)
66+
val forwarder = Pods(devSpacesContext.client)
67+
.forward(remoteIdeServer.pod, 5990, 5990)
6768

6869
client.run {
69-
lifetime.onTermination { forwarder.close() }
7070
lifetime.onTermination {
71+
forwarder.close()
7172
if (remoteIdeServer.waitServerTerminated())
7273
DevWorkspaces(devSpacesContext.client)
7374
.stop(
7475
devSpacesContext.devWorkspace.metadata.namespace,
7576
devSpacesContext.devWorkspace.metadata.name
7677
)
7778
.also { onDevWorkspaceStopped() }
79+
devSpacesContext.isConnected = false
80+
onDisconnected.invoke()
7881
}
79-
lifetime.onTermination { devSpacesContext.isConnected = false }
80-
lifetime.onTermination(onDisconnected)
8182
}
8283

8384
return client

src/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnectionProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ class DevSpacesConnectionProvider : GatewayConnectionProvider {
164164
parameters: Map<String, String>,
165165
requestor: ConnectionRequestor,
166166
indicator: ProgressIndicator? = null
167-
): GatewayConnectionHandle? {
167+
): GatewayConnectionHandle {
168168
thisLogger().debug("Launched Dev Spaces connection provider", parameters)
169169

170170
indicator?.text2 = "Preparing connection environment…"

src/main/kotlin/com/redhat/devtools/gateway/openshift/Pods.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import java.io.IOException
3838
import java.io.InputStream
3939
import java.io.OutputStream
4040
import java.net.InetAddress
41+
import java.net.InetSocketAddress
4142
import java.net.ServerSocket
4243
import java.net.Socket
4344
import java.util.concurrent.TimeUnit
@@ -99,16 +100,15 @@ class Pods(private val client: ApiClient) {
99100
// https://github.com/kubernetes-client/java/blob/master/examples/examples-release-latest/src/main/java/io/kubernetes/client/examples/PortForwardExample.java
100101
@Throws(IOException::class)
101102
fun forward(pod: V1Pod, localPort: Int, remotePort: Int): Closeable {
102-
val serverSocket = ServerSocket(localPort, 50, InetAddress.getLoopbackAddress())
103-
103+
val serverSocket = ServerSocket()
104+
serverSocket.bind(InetSocketAddress(InetAddress.getLoopbackAddress(), localPort))
104105
val scope = CoroutineScope(Dispatchers.IO)
105106
scope.launch {
106107
supervisorScope {
107108
launch {
108109
val clientSocket = serverSocket.accept()
109-
val forwardResult = PortForward(client).forward(pod, listOf(remotePort))
110-
111110
try {
111+
val forwardResult = PortForward(client).forward(pod, listOf(remotePort))
112112
copyStreams(clientSocket, forwardResult, remotePort)
113113
} catch (e: IOException) {
114114
if (coroutineContext.isActive) throw e

0 commit comments

Comments
 (0)