diff --git a/services/search/pkg/config/config.go b/services/search/pkg/config/config.go index f9cee19da..1f463c0f5 100644 --- a/services/search/pkg/config/config.go +++ b/services/search/pkg/config/config.go @@ -18,7 +18,9 @@ type Config struct { GRPC GRPCConfig `yaml:"grpc"` - Datapath string `yaml:"data_path" env:"SEARCH_DATA_PATH" desc:"The directory where the filesystem storage will store search data. If not definied, the root directory derives from $OCIS_BASE_DATA_PATH:/search."` + Datapath string `yaml:"data_path" env:"SEARCH_DATA_PATH" desc:"The directory where the filesystem storage will store search data. If not definied, the root directory derives from $OCIS_BASE_DATA_PATH:/search."` + DebounceDuration int `yaml:"debounce_duration" env:"SEARCH_REINDEX_DEBOUNCE_DURATION" desc:"The duration in milliseconds the reindex debouncer waits before triggering a reindex of a space that was modified."` + Reva *shared.Reva `yaml:"reva"` GRPCClientTLS *shared.GRPCClientTLS `yaml:"grpc_client_tls"` Events Events `yaml:"events"` diff --git a/services/search/pkg/config/defaults/defaultconfig.go b/services/search/pkg/config/defaults/defaultconfig.go index cfc9eb701..ac4604e0d 100644 --- a/services/search/pkg/config/defaults/defaultconfig.go +++ b/services/search/pkg/config/defaults/defaultconfig.go @@ -29,8 +29,9 @@ func DefaultConfig() *config.Config { Service: config.Service{ Name: "search", }, - Datapath: path.Join(defaults.BaseDataPath(), "search"), - Reva: shared.DefaultRevaConfig(), + Datapath: path.Join(defaults.BaseDataPath(), "search"), + DebounceDuration: 1000, + Reva: shared.DefaultRevaConfig(), Events: config.Events{ Endpoint: "127.0.0.1:9233", Cluster: "ocis-cluster", diff --git a/services/search/pkg/search/provider/events_test.go b/services/search/pkg/search/provider/events_test.go index 73ca2a17c..9e3275acf 100644 --- a/services/search/pkg/search/provider/events_test.go +++ b/services/search/pkg/search/provider/events_test.go @@ -84,7 +84,7 @@ var _ = Describe("Searchprovider", func() { Describe("New", func() { It("returns a new instance", func() { - p = provider.New(gwClient, indexClient, "", eventsChan, logger) + p = provider.New(gwClient, indexClient, "", eventsChan, 1000, logger) Expect(p).ToNot(BeNil()) }) }) diff --git a/services/search/pkg/search/provider/searchprovider.go b/services/search/pkg/search/provider/searchprovider.go index 5201daf98..f20a3116d 100644 --- a/services/search/pkg/search/provider/searchprovider.go +++ b/services/search/pkg/search/provider/searchprovider.go @@ -79,7 +79,7 @@ func (s MatchArray) Less(i, j int) bool { return s[i].Score > s[j].Score } -func New(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, machineAuthAPIKey string, eventsChan <-chan interface{}, logger log.Logger) *Provider { +func New(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, machineAuthAPIKey string, eventsChan <-chan interface{}, debounceDuration int, logger log.Logger) *Provider { p := &Provider{ gwClient: gwClient, indexClient: indexClient, @@ -87,7 +87,7 @@ func New(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, mach logger: logger, } - p.indexSpaceDebouncer = NewSpaceDebouncer(50*time.Millisecond, func(id *provider.StorageSpaceId, userID *user.UserId) { + p.indexSpaceDebouncer = NewSpaceDebouncer(time.Duration(debounceDuration)*time.Millisecond, func(id *provider.StorageSpaceId, userID *user.UserId) { err := p.doIndexSpace(context.Background(), id, userID) if err != nil { p.logger.Error().Err(err).Interface("spaceID", id).Interface("userID", userID).Msg("error while indexing a space") @@ -109,7 +109,7 @@ func New(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, mach // NewWithDebouncer returns a new provider with a customer index space debouncer func NewWithDebouncer(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, machineAuthAPIKey string, eventsChan <-chan interface{}, logger log.Logger, debouncer *SpaceDebouncer) *Provider { - p := New(gwClient, indexClient, machineAuthAPIKey, eventsChan, logger) + p := New(gwClient, indexClient, machineAuthAPIKey, eventsChan, 0, logger) p.indexSpaceDebouncer = debouncer return p } diff --git a/services/search/pkg/search/provider/searchprovider_test.go b/services/search/pkg/search/provider/searchprovider_test.go index 584391987..aac1d7a85 100644 --- a/services/search/pkg/search/provider/searchprovider_test.go +++ b/services/search/pkg/search/provider/searchprovider_test.go @@ -73,7 +73,7 @@ var _ = Describe("Searchprovider", func() { gwClient = &cs3mocks.GatewayAPIClient{} indexClient = &mocks.IndexClient{} - p = provider.New(gwClient, indexClient, "", eventsChan, logger) + p = provider.New(gwClient, indexClient, "", eventsChan, 1000, logger) gwClient.On("Authenticate", mock.Anything, mock.Anything).Return(&gateway.AuthenticateResponse{ Status: status.NewOK(ctx), @@ -94,7 +94,7 @@ var _ = Describe("Searchprovider", func() { Describe("New", func() { It("returns a new instance", func() { - p := provider.New(gwClient, indexClient, "", eventsChan, logger) + p := provider.New(gwClient, indexClient, "", eventsChan, 1000, logger) Expect(p).ToNot(BeNil()) }) }) diff --git a/services/search/pkg/service/v0/service.go b/services/search/pkg/service/v0/service.go index 8dd12ba71..353bacfca 100644 --- a/services/search/pkg/service/v0/service.go +++ b/services/search/pkg/service/v0/service.go @@ -93,7 +93,7 @@ func NewHandler(opts ...Option) (searchsvc.SearchProviderHandler, error) { logger.Fatal().Err(err).Str("addr", cfg.Reva.Address).Msg("could not get reva client") } - provider := searchprovider.New(gwclient, index, cfg.MachineAuthAPIKey, evts, logger) + provider := searchprovider.New(gwclient, index, cfg.MachineAuthAPIKey, evts, cfg.DebounceDuration, logger) return &Service{ id: cfg.GRPC.Namespace + "." + cfg.Service.Name,