Skip to content

Commit e7f9dc7

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

2 files changed

Lines changed: 33 additions & 11 deletions

File tree

pkg/ddc/alluxio/ufs_internal.go

Lines changed: 17 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"
@@ -163,13 +164,23 @@ func (e *AlluxioEngine) processUpdatingUFS(ufsToUpdate *utils.UFSToUpdate) (upda
163164

164165
if updateReady {
165166
// need to reset ufsTotal to Calculating so that SyncMetadata will work
166-
datasetToUpdate := dataset.DeepCopy()
167-
datasetToUpdate.Status.UfsTotal = metadataSyncNotDoneMsg
168-
if !reflect.DeepEqual(dataset.Status, datasetToUpdate.Status) {
169-
err = e.Client.Status().Update(context.TODO(), datasetToUpdate)
167+
err = retry.RetryOnConflict(retry.DefaultBackoff, func() (err error) {
168+
dataset, err := utils.GetDataset(e.Client, e.name, e.namespace)
170169
if err != nil {
171-
e.Log.Error(err, "fail to update ufsTotal of dataset to Calculating")
170+
return
172171
}
172+
datasetToUpdate := dataset.DeepCopy()
173+
datasetToUpdate.Status.UfsTotal = metadataSyncNotDoneMsg
174+
if !reflect.DeepEqual(dataset.Status, datasetToUpdate.Status) {
175+
err = e.Client.Status().Update(context.TODO(), datasetToUpdate)
176+
if err != nil {
177+
return
178+
}
179+
}
180+
return
181+
})
182+
if err != nil {
183+
e.Log.Error(err, "fail to update ufsTotal of dataset to Calculating")
173184
}
174185

175186
err = e.SyncMetadata()

pkg/ddc/goosefs/ufs_internal.go

Lines changed: 16 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,23 @@ 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")
245256
}
246257

247258
err = e.SyncMetadata()

0 commit comments

Comments
 (0)