in syncer/service/replicator/resource/resource.go [322:370]
func (o *checker) needOperate(ctx context.Context) *Result {
if o.curNotNil {
if o.updateTime == nil {
return nil
}
updateTime, err := o.updateTime()
if err != nil {
log.Error("get update time failed", err)
return FailResult(err)
}
if updateTime >= o.event.Timestamp {
return SkipResult()
}
return nil
}
switch o.event.Action {
case sync.CreateAction:
return nil
case sync.UpdateAction:
if len(o.resourceID) == 0 {
return nil
}
ts, err := o.tombstoneLoader.get(ctx, &model.GetTombstoneRequest{
ResourceType: o.event.Subject,
ResourceID: o.resourceID,
})
if err != nil {
if errors.Is(err, datasource.ErrTombstoneNotExists) {
return nil
}
return FailResult(err)
}
if ts.Timestamp > o.event.Timestamp {
return SkipResult()
}
return nil
case sync.DeleteAction:
return SkipResult()
default:
return FailResult(fmt.Errorf("invalid action %s", o.event.Action))
}
}