func()

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))
	}
}