@@ -30,6 +30,7 @@ type Registry struct {
3030 cachedFeatureServices map [string ]map [string ]* core.FeatureService
3131 cachedEntities map [string ]map [string ]* core.Entity
3232 cachedFeatureViews map [string ]map [string ]* core.FeatureView
33+ cachedStreamFeatureViews map [string ]map [string ]* core.StreamFeatureView
3334 cachedOnDemandFeatureViews map [string ]map [string ]* core.OnDemandFeatureView
3435 cachedRegistry * core.Registry
3536 cachedRegistryProtoLastUpdated time.Time
@@ -106,10 +107,12 @@ func (r *Registry) load(registry *core.Registry) {
106107 r .cachedFeatureServices = make (map [string ]map [string ]* core.FeatureService )
107108 r .cachedEntities = make (map [string ]map [string ]* core.Entity )
108109 r .cachedFeatureViews = make (map [string ]map [string ]* core.FeatureView )
110+ r .cachedStreamFeatureViews = make (map [string ]map [string ]* core.StreamFeatureView )
109111 r .cachedOnDemandFeatureViews = make (map [string ]map [string ]* core.OnDemandFeatureView )
110112 r .loadEntities (registry )
111113 r .loadFeatureServices (registry )
112114 r .loadFeatureViews (registry )
115+ r .loadStreamFeatureViews (registry )
113116 r .loadOnDemandFeatureViews (registry )
114117 r .cachedRegistryProtoLastUpdated = time .Now ()
115118}
@@ -144,6 +147,16 @@ func (r *Registry) loadFeatureViews(registry *core.Registry) {
144147 }
145148}
146149
150+ func (r * Registry ) loadStreamFeatureViews (registry * core.Registry ) {
151+ streamFeatureViews := registry .StreamFeatureViews
152+ for _ , streamFeatureView := range streamFeatureViews {
153+ if _ , ok := r .cachedStreamFeatureViews [streamFeatureView .Spec .Project ]; ! ok {
154+ r .cachedStreamFeatureViews [streamFeatureView .Spec .Project ] = make (map [string ]* core.StreamFeatureView )
155+ }
156+ r .cachedStreamFeatureViews [streamFeatureView .Spec .Project ][streamFeatureView .Spec .Name ] = streamFeatureView
157+ }
158+ }
159+
147160func (r * Registry ) loadOnDemandFeatureViews (registry * core.Registry ) {
148161 onDemandFeatureViews := registry .OnDemandFeatureViews
149162 for _ , onDemandFeatureView := range onDemandFeatureViews {
@@ -193,7 +206,26 @@ func (r *Registry) ListFeatureViews(project string) ([]*model.FeatureView, error
193206}
194207
195208/*
196- Look up Feature Views inside project
209+ Look up Stream Feature Views inside project
210+ Returns empty list if project not found
211+ */
212+
213+ func (r * Registry ) ListStreamFeatureViews (project string ) ([]* model.FeatureView , error ) {
214+ if cachedStreamFeatureViews , ok := r .cachedStreamFeatureViews [project ]; ! ok {
215+ return []* model.FeatureView {}, nil
216+ } else {
217+ streamFeatureViews := make ([]* model.FeatureView , len (cachedStreamFeatureViews ))
218+ index := 0
219+ for _ , streamFeatureViewProto := range cachedStreamFeatureViews {
220+ streamFeatureViews [index ] = model .NewFeatureViewFromStreamFeatureViewProto (streamFeatureViewProto )
221+ index += 1
222+ }
223+ return streamFeatureViews , nil
224+ }
225+ }
226+
227+ /*
228+ Look up Feature Services inside project
197229 Returns empty list if project not found
198230*/
199231
@@ -254,6 +286,18 @@ func (r *Registry) GetFeatureView(project, featureViewName string) (*model.Featu
254286 }
255287}
256288
289+ func (r * Registry ) GetStreamFeatureView (project , streamFeatureViewName string ) (* model.FeatureView , error ) {
290+ if cachedStreamFeatureViews , ok := r .cachedStreamFeatureViews [project ]; ! ok {
291+ return nil , fmt .Errorf ("no cached stream feature views found for project %s" , project )
292+ } else {
293+ if streamFeatureViewProto , ok := cachedStreamFeatureViews [streamFeatureViewName ]; ! ok {
294+ return nil , fmt .Errorf ("no cached stream feature view %s found for project %s" , streamFeatureViewName , project )
295+ } else {
296+ return model .NewFeatureViewFromStreamFeatureViewProto (streamFeatureViewProto ), nil
297+ }
298+ }
299+ }
300+
257301func (r * Registry ) GetFeatureService (project , featureServiceName string ) (* model.FeatureService , error ) {
258302 if cachedFeatureServices , ok := r .cachedFeatureServices [project ]; ! ok {
259303 return nil , fmt .Errorf ("no cached feature services found for project %s" , project )
0 commit comments