From a3764ebeba5dc1ff02bc7a73f7ab8628d981f473 Mon Sep 17 00:00:00 2001 From: Scott Lepper Date: Tue, 8 Oct 2024 16:17:31 -0400 Subject: [PATCH] [Search] fix: add and delete (#94438) [search] fix: add and delete from index --- pkg/storage/unified/resource/index.go | 7 ++++- pkg/storage/unified/resource/index_server.go | 29 ++++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/pkg/storage/unified/resource/index.go b/pkg/storage/unified/resource/index.go index 696ea11147f..cdd8b6f68c5 100644 --- a/pkg/storage/unified/resource/index.go +++ b/pkg/storage/unified/resource/index.go @@ -87,7 +87,12 @@ func (i *Index) Index(ctx context.Context, data *Data) error { if err != nil { return err } - err = shard.index.Index(res.Metadata.Uid, data.Value.Value) + var jsonDoc interface{} + err = json.Unmarshal(data.Value.Value, &jsonDoc) + if err != nil { + return err + } + err = shard.index.Index(res.Metadata.Uid, jsonDoc) if err != nil { return err } diff --git a/pkg/storage/unified/resource/index_server.go b/pkg/storage/unified/resource/index_server.go index c90f176549b..47937e7f7f3 100644 --- a/pkg/storage/unified/resource/index_server.go +++ b/pkg/storage/unified/resource/index_server.go @@ -139,14 +139,9 @@ func (f *indexWatchServer) Add(we *WatchEvent) error { } func (f *indexWatchServer) Delete(we *WatchEvent) error { - // TODO: this seems flakey. Does a delete have a Resource or Previous? - // both cases have happened ( maybe because Georges pr was reverted ) - rs := we.Resource - if rs == nil { - rs = we.Previous - } - if rs == nil { - return errors.New("resource not found") + rs, err := resource(we) + if err != nil { + return err } data, err := getData(rs) if err != nil { @@ -160,7 +155,11 @@ func (f *indexWatchServer) Delete(we *WatchEvent) error { } func (f *indexWatchServer) Update(we *WatchEvent) error { - data, err := getData(we.Resource) + rs, err := resource(we) + if err != nil { + return err + } + data, err := getData(rs) if err != nil { return err } @@ -208,3 +207,15 @@ func getData(wr *WatchEvent_Resource) (*Data, error) { } return &Data{Key: key, Value: value, Uid: r.Metadata.Uid}, nil } + +func resource(we *WatchEvent) (*WatchEvent_Resource, error) { + rs := we.Resource + if rs == nil || len(rs.Value) == 0 { + // for updates/deletes + rs = we.Previous + } + if rs == nil || len(rs.Value) == 0 { + return nil, errors.New("resource not found") + } + return rs, nil +}