Skip to content

Commit 3b1b0c4

Browse files
committed
Use FF and env to control port exposing
1 parent ed0a8d8 commit 3b1b0c4

File tree

2 files changed

+50
-40
lines changed

2 files changed

+50
-40
lines changed

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

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
7676
val portsStatusRequest = Status.PortsStatusRequest.newBuilder().setObserve(true).build()
7777

7878
val portsStatusResponseObserver = object :
79-
ClientResponseObserver<Status.PortsStatusRequest, Status.PortsStatusResponse> {
79+
ClientResponseObserver<Status.PortsStatusRequest, Status.PortsStatusResponse> {
8080
override fun beforeStart(request: ClientCallStreamObserver<Status.PortsStatusRequest>) {
8181
lifetime.onTerminationOrNow { request.cancel("gitpod: Service lifetime terminated.", null) }
8282
}
@@ -99,43 +99,51 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
9999
return completableFuture
100100
}
101101

102+
private fun isPortExposingDisabled(): Boolean {
103+
return System.getenv("GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_EXPOSE")?.toBoolean() ?: false
104+
}
105+
102106
private fun syncPortsListWithClient(response: Status.PortsStatusResponse) {
103-
// val ignoredPorts = ignoredPortsForNotificationService.getIgnoredPorts()
104-
// val portsList = response.portsList.filter { !ignoredPorts.contains(it.localPort) }
105-
// val portsNumbersFromPortsList = portsList.map { it.localPort }
106-
// val servedPorts = portsList.filter { it.served }
107-
// val exposedPorts = servedPorts.filter { it.exposed?.url?.isNotBlank() ?: false }
108-
// val portsNumbersFromNonServedPorts = portsList.filter { !it.served }.map { it.localPort }
109-
// val servedPortsToStartForwarding = servedPorts.filter {
110-
// perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(FORWARDED_PORT_LABEL) }
111-
// }
112-
// val exposedPortsToStartExposingOnClient = exposedPorts.filter {
113-
// perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(EXPOSED_PORT_LABEL) }
114-
// }
115-
// val forwardedPortsToStopForwarding = perClientPortForwardingManager.getPorts(FORWARDED_PORT_LABEL)
116-
// .map { it.hostPortNumber }
117-
// .filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
118-
// val exposedPortsToStopExposingOnClient = perClientPortForwardingManager.getPorts(EXPOSED_PORT_LABEL)
119-
// .map { it.hostPortNumber }
120-
// .filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
121-
//
122-
// servedPortsToStartForwarding.forEach { startForwarding(it) }
123-
//
124-
// exposedPortsToStartExposingOnClient.forEach { startExposingOnClient(it) }
125-
//
126-
// forwardedPortsToStopForwarding.forEach { stopForwarding(it) }
127-
//
128-
// exposedPortsToStopExposingOnClient.forEach { stopExposingOnClient(it) }
129-
//
130-
// portsList.forEach { updatePortsPresentation(it) }
107+
if (isPortExposingDisabled()) {
108+
thisLogger().warn("gitpod: Port exposing is disabled.")
109+
return
110+
}
111+
val ignoredPorts = ignoredPortsForNotificationService.getIgnoredPorts()
112+
val portsList = response.portsList.filter { !ignoredPorts.contains(it.localPort) }
113+
val portsNumbersFromPortsList = portsList.map { it.localPort }
114+
val servedPorts = portsList.filter { it.served }
115+
val exposedPorts = servedPorts.filter { it.exposed?.url?.isNotBlank() ?: false }
116+
val portsNumbersFromNonServedPorts = portsList.filter { !it.served }.map { it.localPort }
117+
val servedPortsToStartForwarding = servedPorts.filter {
118+
perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(FORWARDED_PORT_LABEL) }
119+
}
120+
val exposedPortsToStartExposingOnClient = exposedPorts.filter {
121+
perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(EXPOSED_PORT_LABEL) }
122+
}
123+
val forwardedPortsToStopForwarding = perClientPortForwardingManager.getPorts(FORWARDED_PORT_LABEL)
124+
.map { it.hostPortNumber }
125+
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
126+
val exposedPortsToStopExposingOnClient = perClientPortForwardingManager.getPorts(EXPOSED_PORT_LABEL)
127+
.map { it.hostPortNumber }
128+
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
129+
130+
servedPortsToStartForwarding.forEach { startForwarding(it) }
131+
132+
exposedPortsToStartExposingOnClient.forEach { startExposingOnClient(it) }
133+
134+
forwardedPortsToStopForwarding.forEach { stopForwarding(it) }
135+
136+
exposedPortsToStopExposingOnClient.forEach { stopExposingOnClient(it) }
137+
138+
portsList.forEach { updatePortsPresentation(it) }
131139
}
132140

133141
private fun startForwarding(portStatus: PortsStatus) {
134142
try {
135143
perClientPortForwardingManager.forwardPort(
136-
portStatus.localPort,
137-
PortType.TCP,
138-
setOf(FORWARDED_PORT_LABEL),
144+
portStatus.localPort,
145+
PortType.TCP,
146+
setOf(FORWARDED_PORT_LABEL),
139147
)
140148
} catch (throwable: Throwable) {
141149
if (throwable !is PortAlreadyForwardedException) {
@@ -146,22 +154,22 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
146154

147155
private fun stopForwarding(hostPort: Int) {
148156
perClientPortForwardingManager.getPorts(hostPort)
149-
.filter { it.labels.contains(FORWARDED_PORT_LABEL) }
150-
.forEach { perClientPortForwardingManager.removePort(it) }
157+
.filter { it.labels.contains(FORWARDED_PORT_LABEL) }
158+
.forEach { perClientPortForwardingManager.removePort(it) }
151159
}
152160

153161
private fun startExposingOnClient(portStatus: PortsStatus) {
154162
perClientPortForwardingManager.exposePort(
155-
portStatus.localPort,
156-
portStatus.exposed.url,
157-
setOf(EXPOSED_PORT_LABEL),
163+
portStatus.localPort,
164+
portStatus.exposed.url,
165+
setOf(EXPOSED_PORT_LABEL),
158166
)
159167
}
160168

161169
private fun stopExposingOnClient(hostPort: Int) {
162170
perClientPortForwardingManager.getPorts(hostPort)
163-
.filter { it.labels.contains(EXPOSED_PORT_LABEL) }
164-
.forEach { perClientPortForwardingManager.removePort(it) }
171+
.filter { it.labels.contains(EXPOSED_PORT_LABEL) }
172+
.forEach { perClientPortForwardingManager.removePort(it) }
165173
}
166174

167175
private fun updatePortsPresentation(portStatus: PortsStatus) {

components/server/src/workspace/workspace-starter.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1552,16 +1552,18 @@ export class WorkspaceStarter {
15521552
sysEnvvars.push(orgIdEnv);
15531553

15541554
const client = getExperimentsClientForBackend();
1555-
const [isSetJavaXmx, isSetJavaProcessorCount] = await Promise.all([
1555+
const [isSetJavaXmx, isSetJavaProcessorCount, disableJetBrainsPortExpose] = await Promise.all([
15561556
client
15571557
.getValueAsync("supervisor_set_java_xmx", false, { user })
15581558
.then((v) => newEnvVar("GITPOD_IS_SET_JAVA_XMX", String(v))),
15591559
client
15601560
.getValueAsync("supervisor_set_java_processor_count", false, { user })
15611561
.then((v) => newEnvVar("GITPOD_IS_SET_JAVA_PROCESSOR_COUNT", String(v))),
1562+
client.getValueAsync("disable_jetbrains_local_port_expose", false, { user }).then((v) => newEnvVar("GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_EXPOSE", String(v)))
15621563
]);
15631564
sysEnvvars.push(isSetJavaXmx);
15641565
sysEnvvars.push(isSetJavaProcessorCount);
1566+
sysEnvvars.push(disableJetBrainsPortExpose);
15651567
const spec = new StartWorkspaceSpec();
15661568
await createGitpodTokenPromise;
15671569
spec.setEnvvarsList(envvars);

0 commit comments

Comments
 (0)