Skip to content

Commit c63685e

Browse files
authored
Added delay for checking whether an IDE Backend is running on small instance sizes (#3465)
* added delay * added changelog
1 parent 0f5d551 commit c63685e

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Fix Small Dev Environment instance sizes not connecting to the thin clients"
4+
}

jetbrains-gateway/src/software/aws/toolkits/jetbrains/gateway/CawsConnectionProvider.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import org.jetbrains.concurrency.AsyncPromise
3737
import org.jetbrains.concurrency.await
3838
import software.amazon.awssdk.services.codecatalyst.CodeCatalystClient
3939
import software.amazon.awssdk.services.codecatalyst.model.DevEnvironmentStatus
40+
import software.amazon.awssdk.services.codecatalyst.model.InstanceType
4041
import software.aws.toolkits.core.utils.AttributeBagKey
4142
import software.aws.toolkits.core.utils.debug
4243
import software.aws.toolkits.core.utils.error
@@ -144,6 +145,12 @@ class CawsConnectionProvider : GatewayConnectionProvider {
144145
isIndeterminate = true,
145146
) {
146147
validateEnvironmentIsRunning(indicator, environmentActions)
148+
val isSmallInstance = cawsClient.getDevEnvironment {
149+
it.id(envId)
150+
it.projectName(projectName)
151+
it.spaceName(spaceName)
152+
}.instanceType().equals(InstanceType.DEV_STANDARD1_SMALL)
153+
147154
lifetime.launchIOBackground {
148155
ApplicationManager.getApplication().messageBus.syncPublisher(WorkspaceNotifications.TOPIC)
149156
.environmentStarted(
@@ -237,7 +244,8 @@ class CawsConnectionProvider : GatewayConnectionProvider {
237244
handle,
238245
envId,
239246
connectionParams.gitSettings,
240-
toolkitInstallSettings
247+
toolkitInstallSettings,
248+
isSmallInstance
241249
).await()
242250
}.invokeOnCompletion { e ->
243251
if (e == null) {
@@ -355,6 +363,7 @@ class CawsConnectionProvider : GatewayConnectionProvider {
355363
envId: String,
356364
gitSettings: GitSettings,
357365
toolkitInstallSettings: ToolkitInstallSettings,
366+
isSmallInstance: Boolean
358367
): AsyncPromise<Unit> {
359368
val remoteScriptPath = "/tmp/${UUID.randomUUID()}"
360369
val remoteProjectName = (gitSettings as? GitSettings.GitRepoSettings)?.repoName
@@ -392,7 +401,7 @@ class CawsConnectionProvider : GatewayConnectionProvider {
392401
if (AwsToolkit.isDeveloperMode()) {
393402
add(PatchBackend(gatewayHandle, executor, lifetime))
394403
}
395-
add(StartBackend(gatewayHandle, remoteScriptPath, remoteProjectName, executor, lifetime, envId))
404+
add(StartBackend(gatewayHandle, remoteScriptPath, remoteProjectName, executor, lifetime, envId, isSmallInstance))
396405
}
397406

398407
val promise = AsyncPromise<Unit>()

jetbrains-gateway/src/software/aws/toolkits/jetbrains/gateway/connection/workflow/StartBackend.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.jetbrains.gateway.thinClientLink.LinkedClientManager
88
import com.jetbrains.rd.util.lifetime.LifetimeDefinition
99
import com.jetbrains.rd.util.lifetime.onTermination
1010
import com.jetbrains.rd.util.reactive.adviseEternal
11+
import kotlinx.coroutines.delay
12+
import kotlinx.coroutines.runBlocking
1113
import software.aws.toolkits.core.utils.getLogger
1214
import software.aws.toolkits.core.utils.info
1315
import software.aws.toolkits.jetbrains.core.credentials.sono.lazilyGetUserId
@@ -32,7 +34,8 @@ class StartBackend(
3234
private val remoteProjectName: String?,
3335
private val executor: CawsCommandExecutor,
3436
private val lifetime: LifetimeDefinition,
35-
private val envId: String
37+
private val envId: String,
38+
private val isSmallInstance: Boolean
3639
) : Step() {
3740
override val stepName: String = message("gateway.connection.workflow.start_ide")
3841

@@ -91,14 +94,27 @@ class StartBackend(
9194
if (initialConnectLink != null) {
9295
stepEmitter.emitMessageLine("Reusing existing backend instance at: $initialConnectLink", isError = false)
9396
}
97+
if (isSmallInstance) {
98+
runBlocking {
99+
delay(5000)
100+
}
101+
}
102+
94103
val remoteLink = initialConnectLink ?: let {
95104
val backend = ideActions.startBackend()
96105
stepEmitter.attachProcess(backend)
97106
lifetime.onTermination {
98107
backend.destroyProcess()
99108
}
100109

110+
if (isSmallInstance) {
111+
runBlocking {
112+
delay(5000)
113+
}
114+
}
115+
101116
val start = System.currentTimeMillis()
117+
102118
val duration = Duration.ofMinutes(3)
103119
return@let try {
104120
spinUntilValue(duration = duration, interval = Duration.ofSeconds(5)) {

0 commit comments

Comments
 (0)