Skip to content

Commit bc6c215

Browse files
authored
refactor(amazonq): clean up polling functions (#4266)
* Clean up polling functions. * Linter errors.
1 parent abecb1d commit bc6c215

File tree

3 files changed

+41
-101
lines changed

3 files changed

+41
-101
lines changed

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

Lines changed: 41 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import software.aws.toolkits.core.utils.info
1919
import software.aws.toolkits.core.utils.warn
2020
import software.aws.toolkits.jetbrains.core.explorer.refreshCwQTree
2121
import software.aws.toolkits.jetbrains.services.codemodernizer.client.GumbyClient
22-
import software.aws.toolkits.jetbrains.services.codemodernizer.model.AwaitModernizationPlanResult
2322
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerException
2423
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerJobCompletedResult
2524
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerSessionContext
@@ -31,8 +30,6 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.plan.CodeModerniz
3130
import software.aws.toolkits.jetbrains.services.codemodernizer.state.CodeModernizerSessionState
3231
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_AFTER_INITIAL_BUILD
3332
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_AFTER_STARTED
34-
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_WHERE_JOB_STOPPED_PRE_PLAN_READY
35-
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_WHERE_PLAN_EXIST
3633
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.getModuleOrProjectNameForFile
3734
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.pollTransformationStatusAndPlan
3835
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.toTransformationLanguage
@@ -169,51 +166,6 @@ class CodeModernizerSession(
169166
}
170167
}
171168

172-
private suspend fun awaitModernizationPlan(
173-
jobId: JobId,
174-
jobTransitionHandler: (currentStatus: TransformationStatus, migrationPlan: TransformationPlan?) -> Unit,
175-
): AwaitModernizationPlanResult {
176-
var passedBuild = false
177-
var passedStart = false
178-
val result = jobId.pollTransformationStatusAndPlan(
179-
succeedOn = STATES_WHERE_PLAN_EXIST,
180-
failOn = STATES_WHERE_JOB_STOPPED_PRE_PLAN_READY,
181-
clientAdaptor,
182-
initialPollingSleepDurationMillis,
183-
totalPollingSleepDurationMillis,
184-
isDisposed,
185-
sessionContext.project,
186-
) { old, new, plan ->
187-
LOG.info { "Waiting for Transformation Plan for Modernization Job [$jobId]. State changed: $old -> $new" }
188-
state.currentJobStatus = new
189-
sessionContext.project.refreshCwQTree()
190-
val instant = Instant.now()
191-
state.updateJobHistory(sessionContext, new, instant)
192-
setCurrentJobStopTime(new, instant)
193-
setCurrentJobSummary(new)
194-
jobTransitionHandler(new, plan)
195-
if (!passedStart && new in STATES_AFTER_STARTED) {
196-
passedStart = true
197-
}
198-
if (!passedBuild && new in STATES_AFTER_INITIAL_BUILD) {
199-
passedBuild = true
200-
}
201-
}
202-
return when {
203-
result.succeeded && result.transformationPlan != null -> AwaitModernizationPlanResult.Success(result.transformationPlan)
204-
result.state == TransformationStatus.UNKNOWN_TO_SDK_VERSION -> AwaitModernizationPlanResult.UnknownStatusWhenPolling
205-
!passedStart && result.state == TransformationStatus.FAILED -> AwaitModernizationPlanResult.Failure(
206-
result.jobDetails?.reason() ?: message("codemodernizer.notification.warn.unknown_start_failure")
207-
)
208-
209-
!passedBuild && result.state == TransformationStatus.FAILED -> AwaitModernizationPlanResult.BuildFailed(
210-
result.jobDetails?.reason() ?: message("codemodernizer.notification.warn.unknown_build_failure")
211-
)
212-
result.state == TransformationStatus.STOPPED -> AwaitModernizationPlanResult.Stopped
213-
else -> AwaitModernizationPlanResult.Failure(message("codemodernizer.notification.warn.unknown_status_response"))
214-
}
215-
}
216-
217169
private fun startJob(uploadId: String): StartTransformationResponse {
218170
val sourceLanguage = sessionContext.sourceJavaVersion.name.toTransformationLanguage()
219171
val targetLanguage = sessionContext.targetJavaVersion.name.toTransformationLanguage()
@@ -300,31 +252,14 @@ class CodeModernizerSession(
300252

301253
// add delay to avoid the throttling error
302254
delay(1000)
303-
val modernizationResult = clientAdaptor.getCodeModernizationJob(jobId.id)
304-
state.currentJobCreationTime = modernizationResult.transformationJob().creationTime()
305-
306-
val modernizationPlan = when (val result = awaitModernizationPlan(jobId, jobTransitionHandler)) {
307-
is AwaitModernizationPlanResult.Success -> result.plan
308-
is AwaitModernizationPlanResult.BuildFailed -> return CodeModernizerJobCompletedResult.JobFailedInitialBuild(jobId, result.failureReason)
309-
is AwaitModernizationPlanResult.Failure -> return CodeModernizerJobCompletedResult.JobFailed(
310-
jobId,
311-
result.failureReason,
312-
)
313-
is AwaitModernizationPlanResult.Stopped -> return CodeModernizerJobCompletedResult.Stopped
314-
is AwaitModernizationPlanResult.UnknownStatusWhenPolling -> return CodeModernizerJobCompletedResult.JobFailed(
315-
jobId,
316-
message("codemodernizer.notification.warn.unknown_status_response"),
317-
)
318-
}
319255

320-
state.transformationPlan = modernizationPlan
321-
tryOpenTransformationPlanEditor()
256+
var isTransformationPlanEditorOpened = false
257+
var passedBuild = false
258+
var passedStart = false
322259

323-
var isPartialSuccess = false
324260
val result = jobId.pollTransformationStatusAndPlan(
325261
succeedOn = setOf(
326262
TransformationStatus.COMPLETED,
327-
TransformationStatus.STOPPING,
328263
TransformationStatus.STOPPED,
329264
TransformationStatus.PARTIALLY_COMPLETED,
330265
),
@@ -342,24 +277,58 @@ class CodeModernizerSession(
342277
state.currentJobStatus = new
343278
state.transformationPlan = plan
344279
sessionContext.project.refreshCwQTree()
345-
if (new == TransformationStatus.PARTIALLY_COMPLETED) {
346-
isPartialSuccess = true
280+
// Open the transformation plan detail panel once transformation plan is available
281+
if (state.transformationPlan != null && !isTransformationPlanEditorOpened) {
282+
tryOpenTransformationPlanEditor()
283+
isTransformationPlanEditorOpened = true
347284
}
348285
val instant = Instant.now()
286+
// Set the job start time
287+
if (state.currentJobCreationTime == Instant.MIN) {
288+
state.currentJobCreationTime = instant
289+
}
349290
state.updateJobHistory(sessionContext, new, instant)
350291
setCurrentJobStopTime(new, instant)
292+
setCurrentJobSummary(new)
293+
294+
if (!passedStart && new in STATES_AFTER_STARTED) {
295+
passedStart = true
296+
}
297+
if (!passedBuild && new in STATES_AFTER_INITIAL_BUILD) {
298+
passedBuild = true
299+
}
300+
351301
jobTransitionHandler(new, plan)
352302
LOG.info { "Waiting for Modernization Job [$jobId] to complete. State changed for job: $old -> $new" }
353303
}
354304
return when {
355305
result.state == TransformationStatus.STOPPED -> CodeModernizerJobCompletedResult.Stopped
356-
isPartialSuccess -> CodeModernizerJobCompletedResult.JobPartiallySucceeded(jobId, sessionContext.targetJavaVersion)
357-
result.succeeded -> CodeModernizerJobCompletedResult.JobCompletedSuccessfully(jobId)
358306
result.state == TransformationStatus.UNKNOWN_TO_SDK_VERSION -> CodeModernizerJobCompletedResult.JobFailed(
359307
jobId,
360308
message("codemodernizer.notification.warn.unknown_status_response")
361309
)
362310

311+
result.state == TransformationStatus.PARTIALLY_COMPLETED -> CodeModernizerJobCompletedResult.JobPartiallySucceeded(
312+
jobId,
313+
sessionContext.targetJavaVersion
314+
)
315+
316+
result.state == TransformationStatus.FAILED -> {
317+
if (!passedStart) {
318+
val failureReason = result.jobDetails?.reason() ?: message("codemodernizer.notification.warn.unknown_start_failure")
319+
return CodeModernizerJobCompletedResult.JobFailed(jobId, failureReason)
320+
} else if (!passedBuild) {
321+
val failureReason = result.jobDetails?.reason() ?: message("codemodernizer.notification.warn.unknown_build_failure")
322+
return CodeModernizerJobCompletedResult.JobFailedInitialBuild(jobId, failureReason)
323+
} else {
324+
val failureReason = result.jobDetails?.reason() ?: message("codemodernizer.notification.warn.unknown_status_response")
325+
return CodeModernizerJobCompletedResult.JobFailed(jobId, failureReason)
326+
}
327+
}
328+
329+
result.succeeded -> CodeModernizerJobCompletedResult.JobCompletedSuccessfully(jobId)
330+
331+
// Should not happen
363332
else -> CodeModernizerJobCompletedResult.JobFailed(jobId, result.jobDetails?.reason())
364333
}
365334
} catch (e: Exception) {

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

Lines changed: 0 additions & 21 deletions
This file was deleted.

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,6 @@ val STATES_AFTER_STARTED = setOf(
3535
*STATES_AFTER_INITIAL_BUILD.toTypedArray(),
3636
)
3737

38-
val STATES_WHERE_JOB_STOPPED_PRE_PLAN_READY = setOf(
39-
TransformationStatus.FAILED,
40-
TransformationStatus.STOPPED,
41-
TransformationStatus.STOPPING,
42-
TransformationStatus.REJECTED,
43-
TransformationStatus.UNKNOWN_TO_SDK_VERSION,
44-
)
45-
4638
const val TROUBLESHOOTING_URL_DOWNLOAD_DIFF =
4739
"https://docs.aws.amazon.com/amazonq/latest/aws-builder-use-ug/troubleshooting-code-transformation.html#w24aac14c20c19c11"
4840
const val TROUBLESHOOTING_URL_MAVEN_COMMANDS =

0 commit comments

Comments
 (0)