Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import com.intellij.util.application
import com.jetbrains.rd.platform.codeWithMe.portForwarding.*
import com.jetbrains.rd.util.URI
import com.jetbrains.rd.util.lifetime.Lifetime
import com.jetbrains.rd.util.threading.coroutines.launch
import io.gitpod.supervisor.api.Status
import io.gitpod.supervisor.api.Status.PortsStatus
import io.gitpod.supervisor.api.StatusServiceGrpc
Expand Down Expand Up @@ -77,7 +76,7 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
val portsStatusRequest = Status.PortsStatusRequest.newBuilder().setObserve(true).build()

val portsStatusResponseObserver = object :
ClientResponseObserver<Status.PortsStatusRequest, Status.PortsStatusResponse> {
ClientResponseObserver<Status.PortsStatusRequest, Status.PortsStatusResponse> {
override fun beforeStart(request: ClientCallStreamObserver<Status.PortsStatusRequest>) {
lifetime.onTerminationOrNow { request.cancel("gitpod: Service lifetime terminated.", null) }
}
Expand All @@ -100,7 +99,15 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
return completableFuture
}

private fun isPortExposingDisabled(): Boolean {
return System.getenv("GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_EXPOSE")?.toBoolean() ?: false
}

private fun syncPortsListWithClient(response: Status.PortsStatusResponse) {
if (isPortExposingDisabled()) {
thisLogger().warn("gitpod: Port exposing is disabled.")
return
}
val ignoredPorts = ignoredPortsForNotificationService.getIgnoredPorts()
val portsList = response.portsList.filter { !ignoredPorts.contains(it.localPort) }
val portsNumbersFromPortsList = portsList.map { it.localPort }
Expand All @@ -114,11 +121,11 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(EXPOSED_PORT_LABEL) }
}
val forwardedPortsToStopForwarding = perClientPortForwardingManager.getPorts(FORWARDED_PORT_LABEL)
.map { it.hostPortNumber }
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
.map { it.hostPortNumber }
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
val exposedPortsToStopExposingOnClient = perClientPortForwardingManager.getPorts(EXPOSED_PORT_LABEL)
.map { it.hostPortNumber }
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
.map { it.hostPortNumber }
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }

servedPortsToStartForwarding.forEach { startForwarding(it) }

Expand All @@ -134,9 +141,9 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
private fun startForwarding(portStatus: PortsStatus) {
try {
perClientPortForwardingManager.forwardPort(
portStatus.localPort,
PortType.TCP,
setOf(FORWARDED_PORT_LABEL),
portStatus.localPort,
PortType.TCP,
setOf(FORWARDED_PORT_LABEL),
)
} catch (throwable: Throwable) {
if (throwable !is PortAlreadyForwardedException) {
Expand All @@ -147,22 +154,22 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService

private fun stopForwarding(hostPort: Int) {
perClientPortForwardingManager.getPorts(hostPort)
.filter { it.labels.contains(FORWARDED_PORT_LABEL) }
.forEach { perClientPortForwardingManager.removePort(it) }
.filter { it.labels.contains(FORWARDED_PORT_LABEL) }
.forEach { perClientPortForwardingManager.removePort(it) }
}

private fun startExposingOnClient(portStatus: PortsStatus) {
perClientPortForwardingManager.exposePort(
portStatus.localPort,
portStatus.exposed.url,
setOf(EXPOSED_PORT_LABEL),
portStatus.localPort,
portStatus.exposed.url,
setOf(EXPOSED_PORT_LABEL),
)
}

private fun stopExposingOnClient(hostPort: Int) {
perClientPortForwardingManager.getPorts(hostPort)
.filter { it.labels.contains(EXPOSED_PORT_LABEL) }
.forEach { perClientPortForwardingManager.removePort(it) }
.filter { it.labels.contains(EXPOSED_PORT_LABEL) }
.forEach { perClientPortForwardingManager.removePort(it) }
}

private fun updatePortsPresentation(portStatus: PortsStatus) {
Expand Down
4 changes: 3 additions & 1 deletion components/server/src/workspace/workspace-starter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1552,16 +1552,18 @@ export class WorkspaceStarter {
sysEnvvars.push(orgIdEnv);

const client = getExperimentsClientForBackend();
const [isSetJavaXmx, isSetJavaProcessorCount] = await Promise.all([
const [isSetJavaXmx, isSetJavaProcessorCount, disableJetBrainsPortExpose] = await Promise.all([
client
.getValueAsync("supervisor_set_java_xmx", false, { user })
.then((v) => newEnvVar("GITPOD_IS_SET_JAVA_XMX", String(v))),
client
.getValueAsync("supervisor_set_java_processor_count", false, { user })
.then((v) => newEnvVar("GITPOD_IS_SET_JAVA_PROCESSOR_COUNT", String(v))),
client.getValueAsync("disable_jetbrains_local_port_expose", false, { user }).then((v) => newEnvVar("GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_EXPOSE", String(v)))
]);
sysEnvvars.push(isSetJavaXmx);
sysEnvvars.push(isSetJavaProcessorCount);
sysEnvvars.push(disableJetBrainsPortExpose);
const spec = new StartWorkspaceSpec();
await createGitpodTokenPromise;
spec.setEnvvarsList(envvars);
Expand Down
Loading