Remove items from the index when they were deleted

This commit is contained in:
André Duffeck
2022-04-28 08:39:21 +02:00
parent 4dd89aa804
commit 0b0efd6799
6 changed files with 45 additions and 11 deletions

View File

@@ -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

View File

@@ -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)))

View File

@@ -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)

View File

@@ -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()
}

View File

@@ -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,
}

View File

@@ -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)
}