Skip to content

Commit f8bdd3f

Browse files
authored
fix(amazonq): handle scenario where user does not have access to all q endpoints (#5625)
If user only has access to subset of the Q endpoints, don't fail the entire iteration sequence
1 parent 7d871da commit f8bdd3f

File tree

1 file changed

+24
-4
lines changed
  • plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile

1 file changed

+24
-4
lines changed

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QProfileResources.kt

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonq.profile
55

6+
import software.amazon.awssdk.awscore.exception.AwsServiceException
67
import software.amazon.awssdk.services.codewhispererruntime.CodeWhispererRuntimeClient
78
import software.aws.toolkits.core.ClientConnectionSettings
9+
import software.aws.toolkits.core.utils.debug
10+
import software.aws.toolkits.core.utils.getLogger
11+
import software.aws.toolkits.core.utils.warn
812
import software.aws.toolkits.jetbrains.core.AwsClientManager
913
import software.aws.toolkits.jetbrains.core.Resource
1014
import software.aws.toolkits.jetbrains.core.region.AwsRegionProvider
@@ -25,15 +29,31 @@ object QProfileResources {
2529
val awsRegion = AwsRegionProvider.getInstance()[regionKey] ?: return@flatMap emptyList()
2630
val client = AwsClientManager
2731
.getInstance()
28-
.getClient(CodeWhispererRuntimeClient::class, connectionSettings.withRegion(awsRegion))
32+
.getClient<CodeWhispererRuntimeClient>(connectionSettings.withRegion(awsRegion))
2933

30-
client.listAvailableProfilesPaginator {}
31-
.profiles()
32-
.map { p -> QRegionProfile(arn = p.arn(), profileName = p.profileName() ?: "<no name>") }
34+
try {
35+
val profiles = client.listAvailableProfilesPaginator {}
36+
.profiles()
37+
.map { p -> QRegionProfile(arn = p.arn(), profileName = p.profileName() ?: "<no name>") }
38+
LOG.debug { "Found profiles for region $regionKey : $profiles" }
39+
40+
profiles
41+
} catch (e: Exception) {
42+
LOG.warn(e) { "Failed to list Q profiles for region $regionKey" }
43+
44+
// service has low TPS so only suppress if not a service error
45+
if (e is AwsServiceException) {
46+
throw e
47+
}
48+
49+
emptyList()
50+
}
3351
}
3452
return mappedProfiles
3553
}
3654

3755
override fun expiry(): Duration = Duration.ofSeconds(60)
3856
}
57+
58+
private val LOG = getLogger<QProfileResources>()
3959
}

0 commit comments

Comments
 (0)