@@ -16,6 +16,7 @@ import { RedshiftWarehouseType } from '../models/models'
1616import { AWSResourceNode } from '../../../shared/treeview/nodes/awsResourceNode'
1717import { LoadMoreNode } from '../../../shared/treeview/nodes/loadMoreNode'
1818import { 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 ]
0 commit comments