diff --git a/pkg/disk/disk.go b/pkg/disk/disk.go index d37d8eba6..f7becd018 100644 --- a/pkg/disk/disk.go +++ b/pkg/disk/disk.go @@ -26,6 +26,7 @@ import ( "github.com/container-storage-interface/spec/lib/go/csi" csicommon "github.com/kubernetes-csi/drivers/pkg/csi-common" snapClientset "github.com/kubernetes-csi/external-snapshotter/client/v4/clientset/versioned" + "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/cloud" "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/cloud/metadata" "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/common" "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/features" @@ -283,6 +284,9 @@ func newDiskStatusWaiter() DiskStatusWaiter { return &SimpleDiskStatusWaiter{} } else { waiter := NewBatchedDiskStatusWaiter(GlobalConfigVar.EcsClient, clock.RealClock{}) + waiter.PollHook = func() cloud.ECSInterface { + return updateEcsClient(GlobalConfigVar.EcsClient) + } go waiter.Run(context.Background()) return waiter } diff --git a/pkg/disk/wait_status.go b/pkg/disk/wait_status.go index 6aad0617b..4e082a612 100644 --- a/pkg/disk/wait_status.go +++ b/pkg/disk/wait_status.go @@ -34,6 +34,8 @@ type waitRequest struct { type BatchedDiskStatusWaiter struct { ecsClient cloud.ECSInterface + // remove this once we have a ecsClient that can refresh its credentials + PollHook func() cloud.ECSInterface requestChan chan *waitRequest requests map[string][]*waitRequest @@ -91,6 +93,9 @@ func (w *BatchedDiskStatusWaiter) Run(ctx context.Context) { pollChan = w.clk.After(pollInterval - w.clk.Since(lastPollTime)) } case t := <-pollChan: + if w.PollHook != nil { + w.ecsClient = w.PollHook() + } var err error w.idQueue, err = w.poll(w.idQueue) lastPollTime = t