From 7834ad6705aa27ffcf644182c71bf269b86f6d20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Tue, 6 Aug 2024 12:38:50 +0200 Subject: [PATCH] aggregate services by versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- ocis-pkg/natsjsregistry/registry.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ocis-pkg/natsjsregistry/registry.go b/ocis-pkg/natsjsregistry/registry.go index 1f5c3036c..78cc3b1b5 100644 --- a/ocis-pkg/natsjsregistry/registry.go +++ b/ocis-pkg/natsjsregistry/registry.go @@ -138,20 +138,28 @@ func (n *storeregistry) listServices(opts ...store.ListOption) ([]*registry.Serv return nil, err } - svcs := make([]*registry.Service, 0, len(keys)) + versions := map[string]*registry.Service{} for _, k := range keys { - s, err := n.getService(k) + s, err := n.getNode(k) if err != nil { // TODO: continue ? return nil, err } + if versions[s.Version] == nil { + versions[s.Version] = s + } else { + versions[s.Version].Nodes = append(versions[s.Version].Nodes, s.Nodes...) + } + } + svcs := make([]*registry.Service, 0, len(versions)) + for _, s := range versions { svcs = append(svcs, s) - } return svcs, nil } -func (n *storeregistry) getService(s string) (*registry.Service, error) { +// getNode retrieves a node from the store. It returns a service to also keep track of the version. +func (n *storeregistry) getNode(s string) (*registry.Service, error) { recs, err := n.store.Read(s) if err != nil { return nil, err