From e784878aaf219cf8d54c556cb795fe6a31c7ee32 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 8 Nov 2024 14:15:33 +0300 Subject: [PATCH] set memory --- pkg/storage/unified/apistore/prepare.go | 5 ++ .../unified/resource/memory_backend.go | 55 ++++++++++--------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/pkg/storage/unified/apistore/prepare.go b/pkg/storage/unified/apistore/prepare.go index 877a96bff00..32e743e68f2 100644 --- a/pkg/storage/unified/apistore/prepare.go +++ b/pkg/storage/unified/apistore/prepare.go @@ -6,7 +6,9 @@ import ( "fmt" "time" + "github.com/google/uuid" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/apiserver/pkg/storage" "k8s.io/klog/v2" @@ -32,6 +34,9 @@ func (s *Storage) prepareObjectForStorage(ctx context.Context, newObject runtime if obj.GetResourceVersion() != "" { return nil, storage.ErrResourceVersionSetOnCreate } + if obj.GetUID() == "" { + obj.SetUID(types.UID(uuid.NewString())) + } obj.SetGenerateName("") // Clear the random name field obj.SetResourceVersion("") diff --git a/pkg/storage/unified/resource/memory_backend.go b/pkg/storage/unified/resource/memory_backend.go index 898909f8343..5c4f5200494 100644 --- a/pkg/storage/unified/resource/memory_backend.go +++ b/pkg/storage/unified/resource/memory_backend.go @@ -44,11 +44,13 @@ func (s *memoryBackend) WriteEvent(ctx context.Context, event WriteEvent) (rv in tree := s.getResourceTree(event.Key) value := &memoryValue{ - rv: rv, - ns: event.Key.Namespace, - name: event.Key.Name, - folder: event.Object.GetFolder(), - value: event.Value, + rv: rv, + ns: event.Key.Namespace, + name: event.Key.Name, + value: event.Value, + } + if event.Object != nil { // delete does not have an object + value.folder = event.Object.GetFolder() } switch event.Type { @@ -72,7 +74,7 @@ func (s *memoryBackend) WriteEvent(ctx context.Context, event WriteEvent) (rv in // ignore default: - return rv, nil // + // return rv, nil // } } @@ -94,31 +96,30 @@ func (s *memoryBackend) ReadResource(ctx context.Context, req *ReadRequest) *Rea s.mutex.Lock() defer s.mutex.Unlock() - tree := s.getResourceTree(req.Key) - val := tree.get(req.Key, req.ResourceVersion) - if val == nil { - return &ReadResponse{Error: NewNotFoundError(req.Key)} - } - if req.ResourceVersion > 0 { - if req.ResourceVersion > s.rv.Load() { - return &ReadResponse{ - Error: &ErrorResult{ - Code: http.StatusGatewayTimeout, - Reason: string(metav1.StatusReasonTimeout), // match etcd behavior - Message: "ResourceVersion is larger than max", - Details: &ErrorDetails{ - Causes: []*ErrorCause{ - { - Reason: string(metav1.CauseTypeResourceVersionTooLarge), - Message: fmt.Sprintf("requested: %d, current %d", req.ResourceVersion, s.rv.Load()), - }, + if req.ResourceVersion > s.rv.Load() { + return &ReadResponse{ + Error: &ErrorResult{ + Code: http.StatusGatewayTimeout, + Reason: string(metav1.StatusReasonTimeout), // match etcd behavior + Message: "ResourceVersion is larger than max", + Details: &ErrorDetails{ + Causes: []*ErrorCause{ + { + Reason: string(metav1.CauseTypeResourceVersionTooLarge), + Message: fmt.Sprintf("requested: %d, current %d", req.ResourceVersion, s.rv.Load()), }, }, }, - } + }, } } + tree := s.getResourceTree(req.Key) + val := tree.get(req.Key, req.ResourceVersion) + if val == nil || val.deleted { + return &ReadResponse{Error: NewNotFoundError(req.Key)} + } + return &ReadResponse{ ResourceVersion: val.rv, Value: val.value, @@ -264,7 +265,7 @@ func (v *memoryValues) get(rv int64) *memoryValue { for i := len(v.version) - 1; i >= 0; i-- { v := v.version[i] - if v.rv > rv { + if v.rv >= rv { return v } } @@ -291,7 +292,7 @@ type memoryListIterator struct { func (c *memoryListIterator) add(ns *memoryNamespace) { for _, r := range ns.names { v := r.get(c.rv) // get the closest (but not over) - if v != nil { + if v != nil && !v.deleted { c.values = append(c.values, v) } }