Skip to content

Commit 71f09d8

Browse files
author
David Hasani
committed
use waitUntil
1 parent 5182c60 commit 71f09d8

File tree

1 file changed

+25
-20
lines changed
  • plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer

1 file changed

+25
-20
lines changed

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerSession.kt

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import com.intellij.openapi.Disposable
77
import com.intellij.openapi.application.runInEdt
88
import com.intellij.serviceContainer.AlreadyDisposedException
99
import com.intellij.util.io.HttpRequests
10+
import kotlinx.coroutines.Dispatchers
1011
import kotlinx.coroutines.delay
12+
import kotlinx.coroutines.withContext
1113
import org.apache.commons.codec.digest.DigestUtils
1214
import software.amazon.awssdk.core.exception.SdkClientException
1315
import software.amazon.awssdk.services.codewhispererruntime.model.ResumeTransformationResponse
@@ -20,6 +22,7 @@ import software.amazon.awssdk.services.codewhispererruntime.model.Transformation
2022
import software.amazon.awssdk.services.codewhispererruntime.model.TransformationUserActionStatus
2123
import software.amazon.awssdk.services.codewhispererstreaming.model.TransformationDownloadArtifactType
2224
import software.amazon.awssdk.services.ssooidc.model.SsoOidcException
25+
import software.aws.toolkits.core.utils.Waiters.waitUntil
2326
import software.aws.toolkits.core.utils.error
2427
import software.aws.toolkits.core.utils.exists
2528
import software.aws.toolkits.core.utils.getLogger
@@ -55,13 +58,14 @@ import java.io.File
5558
import java.io.FileInputStream
5659
import java.io.IOException
5760
import java.net.ConnectException
61+
import java.net.SocketTimeoutException
62+
import java.net.UnknownHostException
5863
import java.nio.file.Path
5964
import java.time.Instant
6065
import java.util.Base64
6166
import java.util.concurrent.CancellationException
6267
import java.util.concurrent.atomic.AtomicBoolean
6368
import javax.net.ssl.SSLHandshakeException
64-
import kotlin.math.pow
6569

6670
const val MAX_ZIP_SIZE = 2000000000 // 2GB
6771
const val EXPLAINABILITY_V1 = "EXPLAINABILITY_V1"
@@ -143,7 +147,7 @@ class CodeModernizerSession(
143147
*
144148
* Based on [CodeWhispererCodeScanSession]
145149
*/
146-
fun createModernizationJob(copyResult: MavenCopyCommandsResult?): CodeModernizerStartJobResult {
150+
suspend fun createModernizationJob(copyResult: MavenCopyCommandsResult?): CodeModernizerStartJobResult {
147151
LOG.info { "Compressing local project" }
148152
val payload: File?
149153
var payloadSize = 0
@@ -378,8 +382,10 @@ class CodeModernizerSession(
378382
/**
379383
* Adapted from [CodeWhispererCodeScanSession]
380384
*/
381-
fun uploadPayload(payload: File): String {
382-
val sha256checksum: String = Base64.getEncoder().encodeToString(DigestUtils.sha256(FileInputStream(payload)))
385+
suspend fun uploadPayload(payload: File): String {
386+
val sha256checksum: String = Base64.getEncoder().encodeToString(withContext(Dispatchers.IO) {
387+
DigestUtils.sha256(FileInputStream(payload))
388+
})
383389
if (isDisposed.get()) {
384390
throw AlreadyDisposedException("Disposed when about to create upload URL")
385391
}
@@ -395,22 +401,21 @@ class CodeModernizerSession(
395401
throw AlreadyDisposedException("Disposed when about to upload project artifact to s3")
396402
}
397403
val uploadStartTime = Instant.now()
398-
for (i in 0..2) {
399-
try {
400-
clientAdaptor.uploadArtifactToS3(
401-
createUploadUrlResponse.uploadUrl(),
402-
payload,
403-
sha256checksum,
404-
createUploadUrlResponse.kmsKeyArn().orEmpty(),
405-
) { shouldStop.get() }
406-
break
407-
} catch (e: Exception) {
408-
LOG.error { "Unexpected error when uploading project artifact to S3 on attempt ${i + 1}/3: ${e.localizedMessage}" }
409-
if (i == 2) {
410-
throw e
411-
}
412-
Thread.sleep((1000 * 2.0.pow(i)).toLong())
413-
}
404+
waitUntil (
405+
exceptionsToIgnore = setOf(
406+
UnknownHostException::class,
407+
SocketTimeoutException::class,
408+
HttpRequests.HttpStatusException::class,
409+
ConnectException::class
410+
)
411+
)
412+
{
413+
clientAdaptor.uploadArtifactToS3(
414+
createUploadUrlResponse.uploadUrl(),
415+
payload,
416+
sha256checksum,
417+
createUploadUrlResponse.kmsKeyArn().orEmpty(),
418+
) { shouldStop.get() }
414419
}
415420
LOG.info { "Upload to S3 succeeded" }
416421
if (!shouldStop.get()) {

0 commit comments

Comments
 (0)