Skip to content

Commit 77a4c8e

Browse files
authored
Merge pull request #1761 from andyzhangx/wait-for-azcopy-job-running
fix: wait for azcopy job running in volume clone
2 parents b4a82b8 + 76a5a5f commit 77a4c8e

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

Diff for: pkg/blob/controllerserver.go

+17-8
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,17 @@ func (d *Driver) copyBlobContainer(ctx context.Context, req *csi.CreateVolumeReq
806806
case util.AzcopyJobError, util.AzcopyJobCompleted:
807807
return err
808808
case util.AzcopyJobRunning:
809-
return fmt.Errorf("wait for the existing AzCopy job to complete, current copy percentage is %s%%", percent)
809+
err = wait.PollImmediate(20*time.Second, time.Duration(d.waitForAzCopyTimeoutMinutes)*time.Minute, func() (bool, error) {
810+
jobState, percent, err := d.azcopy.GetAzcopyJob(dstContainerName, authAzcopyEnv)
811+
klog.V(2).Infof("azcopy job status: %s, copy percent: %s%%, error: %v", jobState, percent, err)
812+
if err != nil {
813+
return false, err
814+
}
815+
if jobState == util.AzcopyJobRunning {
816+
return false, nil
817+
}
818+
return true, nil
819+
})
810820
case util.AzcopyJobNotFound:
811821
klog.V(2).Infof("copy blob container %s:%s to %s:%s", srcAccountName, srcContainerName, dstAccountName, dstContainerName)
812822
execFunc := func() error {
@@ -819,13 +829,12 @@ func (d *Driver) copyBlobContainer(ctx context.Context, req *csi.CreateVolumeReq
819829
_, percent, _ := d.azcopy.GetAzcopyJob(dstContainerName, authAzcopyEnv)
820830
return fmt.Errorf("timeout waiting for copy blob container %s to %s complete, current copy percent: %s%%", srcContainerName, dstContainerName, percent)
821831
}
822-
copyErr := util.WaitUntilTimeout(time.Duration(d.waitForAzCopyTimeoutMinutes)*time.Minute, execFunc, timeoutFunc)
823-
if copyErr != nil {
824-
klog.Warningf("CopyBlobContainer(%s, %s, %s) failed with error: %v", accountOptions.ResourceGroup, dstAccountName, dstContainerName, copyErr)
825-
} else {
826-
klog.V(2).Infof("copied blob container %s to %s successfully", srcContainerName, dstContainerName)
827-
}
828-
return copyErr
832+
err = util.WaitUntilTimeout(time.Duration(d.waitForAzCopyTimeoutMinutes)*time.Minute, execFunc, timeoutFunc)
833+
}
834+
if err != nil {
835+
klog.Warningf("CopyBlobContainer(%s, %s, %s) failed with error: %v", accountOptions.ResourceGroup, dstAccountName, dstContainerName, err)
836+
} else {
837+
klog.V(2).Infof("copied blob container %s to %s successfully", srcContainerName, dstContainerName)
829838
}
830839
return err
831840
}

Diff for: pkg/blob/controllerserver_test.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -1736,6 +1736,7 @@ func TestCopyVolume(t *testing.T) {
17361736
name: "azcopy job is in progress",
17371737
testFunc: func(t *testing.T) {
17381738
ctx := context.Background()
1739+
accountOptions := azure.AccountOptions{}
17391740
d := NewFakeDriver()
17401741
mp := map[string]string{}
17411742

@@ -1761,14 +1762,14 @@ func TestCopyVolume(t *testing.T) {
17611762

17621763
m := util.NewMockEXEC(ctrl)
17631764
listStr1 := "JobId: ed1c3833-eaff-fe42-71d7-513fb065a9d9\nStart Time: Monday, 07-Aug-23 03:29:54 UTC\nStatus: InProgress\nCommand: copy https://{accountName}.file.core.windows.net/{srcFileshare}{SAStoken} https://{accountName}.file.core.windows.net/{dstFileshare}{SAStoken} --recursive --check-length=false"
1764-
m.EXPECT().RunCommand(gomock.Eq("azcopy jobs list | grep dstContainer -B 3"), gomock.Any()).Return(listStr1, nil).Times(1)
1765-
m.EXPECT().RunCommand(gomock.Not("azcopy jobs list | grep dstBlobContainer -B 3"), gomock.Any()).Return("Percent Complete (approx): 50.0", nil)
1765+
m.EXPECT().RunCommand(gomock.Eq("azcopy jobs list | grep dstContainer -B 3"), gomock.Any()).Return(listStr1, nil).AnyTimes()
1766+
m.EXPECT().RunCommand(gomock.Not("azcopy jobs list | grep dstBlobContainer -B 3"), gomock.Any()).Return("Percent Complete (approx): 50.0", nil).AnyTimes()
17661767

17671768
d.azcopy.ExecCmd = m
1769+
d.waitForAzCopyTimeoutMinutes = 1
17681770

1769-
expectedErr := fmt.Errorf("wait for the existing AzCopy job to complete, current copy percentage is 50.0%%")
1770-
err := d.copyVolume(ctx, req, "", "sastoken", nil, "dstContainer", "", nil, "core.windows.net")
1771-
if !reflect.DeepEqual(err, expectedErr) {
1771+
err := d.copyVolume(ctx, req, "", "sastoken", nil, "dstContainer", "", &accountOptions, "core.windows.net")
1772+
if !reflect.DeepEqual(err, wait.ErrWaitTimeout) {
17721773
t.Errorf("Unexpected error: %v", err)
17731774
}
17741775
},

0 commit comments

Comments
 (0)