diff --git a/extensions/search/pkg/search/index/index.go b/extensions/search/pkg/search/index/index.go index ed4b88dfa..f61c9e2a3 100644 --- a/extensions/search/pkg/search/index/index.go +++ b/extensions/search/pkg/search/index/index.go @@ -77,8 +77,8 @@ func (i *Index) Add(ref *sprovider.Reference, ri *sprovider.ResourceInfo) error } // Remove removes an entity from the index -func (i *Index) Remove(ri *sprovider.ResourceInfo) error { - return i.bleveIndex.Delete(idToBleveId(ri.Id)) +func (i *Index) Remove(id *sprovider.ResourceId) error { + return i.bleveIndex.Delete(idToBleveId(id)) } // Search searches the index according to the criteria specified in the given SearchIndexRequest diff --git a/extensions/search/pkg/search/index/index_test.go b/extensions/search/pkg/search/index/index_test.go index bde7dffef..98ae27dd1 100644 --- a/extensions/search/pkg/search/index/index_test.go +++ b/extensions/search/pkg/search/index/index_test.go @@ -248,7 +248,7 @@ var _ = Describe("Index", func() { count, _ := bleveIndex.DocCount() Expect(count).To(Equal(uint64(1))) - err = i.Remove(ri) + err = i.Remove(ri.Id) Expect(err).ToNot(HaveOccurred()) count, _ = bleveIndex.DocCount() Expect(count).To(Equal(uint64(0))) diff --git a/extensions/search/pkg/search/mocks/IndexClient.go b/extensions/search/pkg/search/mocks/IndexClient.go index fd8e3167b..dae95ec51 100644 --- a/extensions/search/pkg/search/mocks/IndexClient.go +++ b/extensions/search/pkg/search/mocks/IndexClient.go @@ -52,11 +52,11 @@ func (_m *IndexClient) DocCount() (uint64, error) { } // Remove provides a mock function with given fields: ri -func (_m *IndexClient) Remove(ri *providerv1beta1.ResourceInfo) error { +func (_m *IndexClient) Remove(ri *providerv1beta1.ResourceId) error { ret := _m.Called(ri) var r0 error - if rf, ok := ret.Get(0).(func(*providerv1beta1.ResourceInfo) error); ok { + if rf, ok := ret.Get(0).(func(*providerv1beta1.ResourceId) error); ok { r0 = rf(ri) } else { r0 = ret.Error(0) diff --git a/extensions/search/pkg/search/provider/searchprovider.go b/extensions/search/pkg/search/provider/searchprovider.go index cee5df910..471024a56 100644 --- a/extensions/search/pkg/search/provider/searchprovider.go +++ b/extensions/search/pkg/search/provider/searchprovider.go @@ -51,6 +51,12 @@ func New(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, mach owner = &user.User{ Id: e.Executant, } + case events.ItemTrashed: + err := p.indexClient.Remove(e.Id) + if err != nil { + p.logger.Error().Err(err).Interface("Id", e.Id).Msg("failed to remove item from index") + } + continue default: // Not sure what to do here. Skip. continue @@ -70,13 +76,19 @@ func New(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, mach // Stat changed resource resource statRes, err := gwClient.Stat(ownerCtx, &provider.StatRequest{Ref: ref}) - if err != nil || statRes.Status.Code != rpc.Code_CODE_OK { - p.logger.Error().Err(err).Interface("statRes", statRes).Msg("failed to stat the changed resource") + if err != nil { + p.logger.Error().Err(err).Msg("failed to stat the changed resource") + } + + switch statRes.Status.Code { + case rpc.Code_CODE_OK: + err = p.indexClient.Add(ref, statRes.Info) + default: + p.logger.Error().Interface("statRes", statRes).Msg("failed to stat the changed resource") } - err = p.indexClient.Add(ref, statRes.Info) if err != nil { - p.logger.Error().Err(err).Msg("error adding resource to the index") + p.logger.Error().Err(err).Msg("error adding updating the resource in the index") } else { p.logDocCount() } diff --git a/extensions/search/pkg/search/provider/searchprovider_test.go b/extensions/search/pkg/search/provider/searchprovider_test.go index 30b3c13cf..a622ea956 100644 --- a/extensions/search/pkg/search/provider/searchprovider_test.go +++ b/extensions/search/pkg/search/provider/searchprovider_test.go @@ -107,7 +107,29 @@ var _ = Describe("Searchprovider", func() { called = true }) eventsChan <- events.FileUploaded{ - FileID: ref, + Ref: ref, + Executant: user.Id, + } + + Eventually(func() bool { + return called + }).Should(BeTrue()) + }) + + It("removes an entry from the index when the file has been deleted", func() { + called := false + + gwClient.On("Stat", mock.Anything, mock.Anything).Return(&sprovider.StatResponse{ + Status: status.NewNotFound(context.Background(), ""), + }, nil) + indexClient.On("Remove", mock.MatchedBy(func(id *sprovider.ResourceId) bool { + return id.OpaqueId == ri.Id.OpaqueId + })).Return(nil).Run(func(args mock.Arguments) { + called = true + }) + eventsChan <- events.ItemTrashed{ + Ref: ref, + Id: ri.Id, Executant: user.Id, } diff --git a/extensions/search/pkg/search/search.go b/extensions/search/pkg/search/search.go index 8200a364a..b5e1ed11e 100644 --- a/extensions/search/pkg/search/search.go +++ b/extensions/search/pkg/search/search.go @@ -38,6 +38,6 @@ type ProviderClient interface { type IndexClient interface { Search(ctx context.Context, req *searchsvc.SearchIndexRequest) (*searchsvc.SearchIndexResponse, error) Add(ref *providerv1beta1.Reference, ri *providerv1beta1.ResourceInfo) error - Remove(ri *providerv1beta1.ResourceInfo) error + Remove(ri *providerv1beta1.ResourceId) error DocCount() (uint64, error) }