SetDataOperationInTargetDataset set status of target dataset to mark the data operation being performed.
(ctx cruntime.ReconcileRequestContext, operation dataoperation.OperationInterface, engine *TemplateEngine)
| 38 | |
| 39 | // SetDataOperationInTargetDataset set status of target dataset to mark the data operation being performed. |
| 40 | func SetDataOperationInTargetDataset(ctx cruntime.ReconcileRequestContext, operation dataoperation.OperationInterface, engine *TemplateEngine) error { |
| 41 | targetDataset := ctx.Dataset |
| 42 | object := operation.GetOperationObject() |
| 43 | |
| 44 | // check if the bounded runtime is ready |
| 45 | ready := engine.CheckRuntimeReady() |
| 46 | if !ready { |
| 47 | ctx.Log.V(1).Info("Bounded accelerate runtime not ready", "targetDataset", targetDataset) |
| 48 | ctx.Recorder.Eventf(object, |
| 49 | v1.EventTypeNormal, |
| 50 | common.RuntimeNotReady, |
| 51 | "Bounded accelerate runtime not ready") |
| 52 | return fmt.Errorf("bounded accelerate runtime not ready") |
| 53 | } |
| 54 | |
| 55 | operationTypeName := string(operation.GetOperationType()) |
| 56 | dataOpKey := getDataOperationKey(object) |
| 57 | |
| 58 | // set current data operation in target dataset |
| 59 | err := retry.RetryOnConflict(retry.DefaultBackoff, func() error { |
| 60 | dataset, err := utils.GetDataset(ctx.Client, targetDataset.Name, targetDataset.Namespace) |
| 61 | if err != nil { |
| 62 | return err |
| 63 | } |
| 64 | |
| 65 | // set current data operation in the target dataset |
| 66 | datasetToUpdate := dataset.DeepCopy() |
| 67 | datasetToUpdate.SetDataOperationInProgress(operationTypeName, dataOpKey) |
| 68 | // different operation may set other fields |
| 69 | operation.SetTargetDatasetStatusInProgress(datasetToUpdate) |
| 70 | |
| 71 | if !reflect.DeepEqual(dataset.Status, datasetToUpdate.Status) { |
| 72 | if err := ctx.Client.Status().Update(context.TODO(), datasetToUpdate); err != nil { |
| 73 | ctx.Log.Info("fail to update target dataset's lock, will requeue", "targetDatasetName", targetDataset.Name) |
| 74 | return err |
| 75 | } |
| 76 | } |
| 77 | return nil |
| 78 | }) |
| 79 | if err != nil { |
| 80 | ctx.Log.Error(err, "can't set lock on target dataset", "targetDataset", targetDataset.Name) |
| 81 | } |
| 82 | return err |
| 83 | } |
| 84 | |
| 85 | // ReleaseTargetDataset release target dataset OperationRef field which marks the data operation being performed. |
| 86 | func ReleaseTargetDataset(ctx cruntime.ReconcileRequestContext, operation dataoperation.OperationInterface) error { |
no test coverage detected