From 8a095325b43699c31879f8b1648aef0929d34126 Mon Sep 17 00:00:00 2001 From: Rokibul Hasan Date: Fri, 20 Oct 2023 11:39:12 +0600 Subject: [PATCH 1/2] Add sortByResourceVersion Signed-off-by: Rokibul Hasan --- pkg/server.go | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/pkg/server.go b/pkg/server.go index d72ec5b3..be7ee382 100644 --- a/pkg/server.go +++ b/pkg/server.go @@ -286,11 +286,6 @@ func (s *Server) Run() (*http.Server, *rest.Config, error) { return srv, &cfg, nil } -type APIObjects struct { - GVR schema.GroupVersionResource `json:",inline,omitempty"` - Items []unstructured.Unstructured `json:"Items"` -} - func (s *Server) Checkpoint() { s.m.Lock() defer s.m.Unlock() @@ -307,46 +302,33 @@ func (s *Server) NextResourceVersion() int64 { return result } -func (s *Server) Export() ([]APIObjects, []APIObjects) { +func (s *Server) Export() ([]unstructured.Unstructured, []unstructured.Unstructured) { s.m.Lock() defer s.m.Unlock() - current := make([]APIObjects, 0, len(s.stores)) - deleted := make([]APIObjects, 0, len(s.stores)) + current := make([]unstructured.Unstructured, 0, len(s.stores)) + deleted := make([]unstructured.Unstructured, 0, len(s.stores)) + for _, store := range s.stores { - current = append(current, APIObjects{ - GVR: store.GVR, - Items: getDirtyObjects(store.Current, s.checkedVersion), - }) - deleted = append(deleted, APIObjects{ - GVR: store.GVR, - Items: getDirtyObjects(store.Deleted, s.checkedVersion), - }) + current = append(current, getDirtyObjects(store.Current, s.checkedVersion)...) + deleted = append(deleted, getDirtyObjects(store.Deleted, s.checkedVersion)...) } + sort.Slice(current, func(i, j int) bool { - if current[i].GVR.Group != current[j].GVR.Group { - return current[i].GVR.Group < current[j].GVR.Group - } - return current[i].GVR.Resource != current[j].GVR.Resource + return atoi(current[i].GetResourceVersion()) < atoi(current[j].GetResourceVersion()) }) return current, deleted } func getDirtyObjects(in map[types.NamespacedName]*unstructured.Unstructured, checkedVersion int64) []unstructured.Unstructured { - out := make([]unstructured.Unstructured, 0, len(in)) + var out []unstructured.Unstructured for _, obj := range in { rv, _ := strconv.ParseInt(obj.GetResourceVersion(), 10, 64) if rv >= checkedVersion { out = append(out, *obj) } } - sort.Slice(out, func(i, j int) bool { - if out[i].GetNamespace() != out[j].GetNamespace() { - return out[i].GetNamespace() < out[j].GetNamespace() - } - return out[i].GetName() < out[j].GetName() - }) return out } @@ -360,3 +342,8 @@ func (s *Server) RemoveNamespace(ns string) { } } } + +func atoi(s string) int { + i, _ := strconv.Atoi(s) + return i +} From 4fe032fb9d77cdc47f0202342729873d971e865c Mon Sep 17 00:00:00 2001 From: Rokibul Hasan Date: Fri, 20 Oct 2023 13:56:59 +0600 Subject: [PATCH 2/2] PR issues resolve Signed-off-by: Rokibul Hasan --- pkg/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/server.go b/pkg/server.go index be7ee382..3b69c97c 100644 --- a/pkg/server.go +++ b/pkg/server.go @@ -322,7 +322,7 @@ func (s *Server) Export() ([]unstructured.Unstructured, []unstructured.Unstructu } func getDirtyObjects(in map[types.NamespacedName]*unstructured.Unstructured, checkedVersion int64) []unstructured.Unstructured { - var out []unstructured.Unstructured + out := make([]unstructured.Unstructured, 0, len(in)) for _, obj := range in { rv, _ := strconv.ParseInt(obj.GetResourceVersion(), 10, 64) if rv >= checkedVersion {