Skip to content

Commit dca14bc

Browse files
fix(ddc): wrap ufsTotal status update with retry on conflict
Signed-off-by: Monika Jhakar <jakharmonika364@gmail.com>
1 parent 0956e64 commit dca14bc

2 files changed

Lines changed: 35 additions & 11 deletions

File tree

pkg/ddc/alluxio/ufs_internal.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ package alluxio
1919
import (
2020
"context"
2121
"fmt"
22-
v1 "k8s.io/api/core/v1"
2322
"path/filepath"
2423
"reflect"
2524
"strings"
2625
"time"
2726

27+
v1 "k8s.io/api/core/v1"
28+
2829
datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
2930
"github.com/fluid-cloudnative/fluid/pkg/common"
3031
"github.com/fluid-cloudnative/fluid/pkg/ddc/alluxio/operations"
@@ -167,13 +168,24 @@ func (e *AlluxioEngine) processUpdatingUFS(ufsToUpdate *utils.UFSToUpdate) (upda
167168

168169
if updateReady {
169170
// need to reset ufsTotal to Calculating so that SyncMetadata will work
170-
datasetToUpdate := dataset.DeepCopy()
171-
datasetToUpdate.Status.UfsTotal = metadataSyncNotDoneMsg
172-
if !reflect.DeepEqual(dataset.Status, datasetToUpdate.Status) {
173-
err = e.Client.Status().Update(context.TODO(), datasetToUpdate)
171+
err = retry.RetryOnConflict(retry.DefaultBackoff, func() (err error) {
172+
dataset, err := utils.GetDataset(e.Client, e.name, e.namespace)
174173
if err != nil {
175-
e.Log.Error(err, "fail to update ufsTotal of dataset to Calculating")
174+
return
176175
}
176+
datasetToUpdate := dataset.DeepCopy()
177+
datasetToUpdate.Status.UfsTotal = metadataSyncNotDoneMsg
178+
if !reflect.DeepEqual(dataset.Status, datasetToUpdate.Status) {
179+
err = e.Client.Status().Update(context.TODO(), datasetToUpdate)
180+
if err != nil {
181+
return
182+
}
183+
}
184+
return
185+
})
186+
if err != nil {
187+
e.Log.Error(err, "fail to update ufsTotal of dataset to Calculating")
188+
return true, err
177189
}
178190

179191
err = e.SyncMetadata()

pkg/ddc/goosefs/ufs_internal.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/fluid-cloudnative/fluid/pkg/utils/kubeclient"
2929
securityutil "github.com/fluid-cloudnative/fluid/pkg/utils/security"
3030
"github.com/pkg/errors"
31+
"k8s.io/client-go/util/retry"
3132
)
3233

3334
func (e *GooseFSEngine) usedStorageBytesInternal() (value int64, err error) {
@@ -235,13 +236,24 @@ func (e *GooseFSEngine) processUpdatingUFS(ufsToUpdate *utils.UFSToUpdate) (err
235236
}
236237
}
237238
// need to reset ufsTotal to Calculating so that SyncMetadata will work
238-
datasetToUpdate := dataset.DeepCopy()
239-
datasetToUpdate.Status.UfsTotal = MetadataSyncNotDoneMsg
240-
if !reflect.DeepEqual(dataset.Status, datasetToUpdate.Status) {
241-
err = e.Client.Status().Update(context.TODO(), datasetToUpdate)
239+
err = retry.RetryOnConflict(retry.DefaultBackoff, func() (err error) {
240+
dataset, err := utils.GetDataset(e.Client, e.name, e.namespace)
242241
if err != nil {
243-
e.Log.Error(err, "fail to update ufsTotal of dataset to Calculating")
242+
return
244243
}
244+
datasetToUpdate := dataset.DeepCopy()
245+
datasetToUpdate.Status.UfsTotal = MetadataSyncNotDoneMsg
246+
if !reflect.DeepEqual(dataset.Status, datasetToUpdate.Status) {
247+
err = e.Client.Status().Update(context.TODO(), datasetToUpdate)
248+
if err != nil {
249+
return
250+
}
251+
}
252+
return
253+
})
254+
if err != nil {
255+
e.Log.Error(err, "fail to update ufsTotal of dataset to Calculating")
256+
return err
245257
}
246258

247259
err = e.SyncMetadata()

0 commit comments

Comments
 (0)