diff --git a/internal/registry/obj_selector.go b/internal/registry/obj_selector.go index ef9e0d9..78abb37 100644 --- a/internal/registry/obj_selector.go +++ b/internal/registry/obj_selector.go @@ -9,6 +9,8 @@ import ( "go.etcd.io/bbolt" ) +const nextObjectTimeout = 10 * time.Second + type ObjFilter struct { Status string Age int @@ -57,7 +59,16 @@ func NewObjSelector(registry *ObjRegistry, selectionSize int, kind SelectorKind, // - underlying registry context is done, nil objects will be returned on the // currently blocked and every further NextObject calls. func (o *ObjSelector) NextObject() *ObjectInfo { - return <-o.objChan + if o.kind == SelectorOneshot { + return <-o.objChan + } + + select { + case <-time.After(nextObjectTimeout): + return nil + case obj := <-o.objChan: + return obj + } } // Count returns total number of objects that match filter of the selector.