Skip to content

Commit fdda3ca

Browse files
authored
fix(redshift): api breaks for unsupported regions (#5614)
## Problem Customer not able to list the provisioned clusters in region where serverless API's not present. Solution ## Solution Made a minor code change to fix the issue. Tested the change too. --- <!--- REMINDER: Ensure that your PR meets the guidelines in CONTRIBUTING.md --> License: I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent fb2fa91 commit fdda3ca

File tree

2 files changed

+26
-16
lines changed

2 files changed

+26
-16
lines changed

packages/core/src/awsService/redshift/explorer/redshiftNode.ts

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { RedshiftWarehouseType } from '../models/models'
1616
import { AWSResourceNode } from '../../../shared/treeview/nodes/awsResourceNode'
1717
import { LoadMoreNode } from '../../../shared/treeview/nodes/loadMoreNode'
1818
import { ChildNodeLoader, ChildNodePage } from '../../../awsexplorer/childNodeLoader'
19+
import { getLogger } from '../../../shared/logger/logger'
1920

2021
/**
2122
* An AWS Explorer node representing Redshift.
@@ -88,13 +89,13 @@ export class RedshiftNode extends AWSTreeNodeBase implements LoadMoreNode {
8889
const childNodes: RedshiftWarehouseNode[] = []
8990
let newServerlessToken: string = ''
9091
let newProvisionedToken: string = ''
91-
// provisionedToken can be undefined (first time load) or non-empty (more results available). If it's empty, we've loaded all
92+
// Handle provisioned clusters
9293
if (compositeContinuationToken === undefined || compositeContinuationToken.provisionedToken !== '') {
9394
const response = await this.redshiftClient.describeProvisionedClusters(
9495
compositeContinuationToken?.provisionedToken
9596
)
9697
if (response.Clusters) {
97-
const provisionedNodes = response.Clusters?.map((cluster) => {
98+
const provisionedNodes = response.Clusters.map((cluster) => {
9899
return new RedshiftWarehouseNode(
99100
this,
100101
{
@@ -108,21 +109,26 @@ export class RedshiftNode extends AWSTreeNodeBase implements LoadMoreNode {
108109
newProvisionedToken = response.Marker ?? ''
109110
}
110111
}
111-
// serverlessToken can be undefined (first time load) or non-empty (more results available). If it's empty, we've loaded all
112+
// Handle serverless workgroups
112113
if (compositeContinuationToken === undefined || compositeContinuationToken.serverlessToken !== '') {
113-
const response = await this.redshiftClient.listServerlessWorkgroups(
114-
compositeContinuationToken?.serverlessToken
115-
)
116-
if (response.workgroups) {
117-
const serverlessNodes: RedshiftWarehouseNode[] = response.workgroups?.map((workgroup) => {
118-
return new RedshiftWarehouseNode(
119-
this,
120-
{ arn: workgroup.workgroupArn, name: workgroup.workgroupName } as AWSResourceNode,
121-
RedshiftWarehouseType.SERVERLESS
122-
)
123-
})
124-
childNodes.push(...serverlessNodes)
125-
newServerlessToken = response.nextToken ?? ''
114+
try {
115+
const response = await this.redshiftClient.listServerlessWorkgroups(
116+
compositeContinuationToken?.serverlessToken
117+
)
118+
if (response.workgroups) {
119+
const serverlessNodes = response.workgroups.map((workgroup) => {
120+
return new RedshiftWarehouseNode(
121+
this,
122+
{ arn: workgroup.workgroupArn, name: workgroup.workgroupName } as AWSResourceNode,
123+
RedshiftWarehouseType.SERVERLESS
124+
)
125+
})
126+
childNodes.push(...serverlessNodes)
127+
newServerlessToken = response.nextToken ?? ''
128+
}
129+
} catch (error) {
130+
getLogger().error("Serverless workgroup operation isn't supported or failed:", error)
131+
// Continue without interrupting the provisioned cluster loading
126132
}
127133
}
128134
return [childNodes, newProvisionedToken, newServerlessToken]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "Bug Fix",
3+
"description": "Redshift: updated the list clusters and workgroups for regions which do not have serverless APIs"
4+
}

0 commit comments

Comments
 (0)