// NewFilter returns a Filter for use with a push of key-value pairs. func (d *Data) NewFilter(fs storage.FilterSpec) (storage.Filter, error) { roiIterator, _, found, err := roi.NewIteratorBySpec(fs, d) if err != nil { dvid.Debugf("No filter found that was parsable: %s\n", fs) return nil, err } if !found || roiIterator == nil { dvid.Debugf("No ROI found so using generic data push for data %q.\n", d.DataName()) return nil, nil } return &Filter{d, fs, roiIterator}, nil }
// NewFilter returns a Filter for use with a push of key-value pairs. func (d *Data) NewFilter(fs storage.FilterSpec) (storage.Filter, error) { filter := &Filter{Data: d, fs: fs} // Get associated labelblk. If none, we can't use roi filter so just do standard data send. lblk, err := d.GetSyncedLabelblk() if err != nil { dvid.Infof("Unable to get synced labelblk for labelvol %q. Unable to do any ROI-based filtering.\n", d.DataName()) return nil, nil } roiIterator, _, found, err := roi.NewIteratorBySpec(fs, lblk) if err != nil { return nil, err } if !found || roiIterator == nil { dvid.Debugf("No ROI found so using generic data push for data %q.\n", d.DataName()) return nil, nil } filter.it = roiIterator return filter, nil }