// curationConsistent determines whether the given metric is in a dirty state // and needs curation. func (w watermarkOperator) curationConsistent(f model.Fingerprint, watermark model.Watermark) (consistent bool, err error) { var ( rawValue []byte curationValue = &dto.CurationValue{} curationKey = &dto.CurationKey{ Fingerprint: f.ToDTO(), OlderThan: proto.Int64(w.olderThan.Unix()), MinimumGroupSize: proto.Uint32(w.groupSize), } ) rawValue, err = w.curationState.Get(coding.NewProtocolBuffer(curationKey)) if err != nil { return } err = proto.Unmarshal(rawValue, curationValue) if err != nil { return } curationRemark := model.NewCurationRemarkFromDTO(curationValue) if !curationRemark.OlderThanLimit(watermark.Time) { consistent = true return } return }
func (w watermarkFilter) Filter(key, value interface{}) (result storage.FilterResult) { fingerprint := key.(model.Fingerprint) watermark := value.(model.Watermark) curationKey := &dto.CurationKey{ Fingerprint: fingerprint.ToDTO(), MinimumGroupSize: proto.Uint32(w.groupSize), OlderThan: proto.Int64(int64(w.recencyThreshold)), } curationValue := &dto.CurationValue{} rawCurationValue, err := w.curationState.Get(coding.NewProtocolBuffer(curationKey)) if err != nil { panic(err) } err = proto.Unmarshal(rawCurationValue, curationValue) if err != nil { panic(err) } switch { case model.NewCurationRemarkFromDTO(curationValue).OlderThanLimit(watermark.Time): result = storage.ACCEPT case len(w.stop) != 0: result = storage.STOP default: result = storage.SKIP } return }