Change the default reindex debounce duration to 1s.

Also make it configurable using an env var.
This commit is contained in:
André Duffeck
2022-11-03 13:15:54 +01:00
parent 5602668634
commit 12bdf29ac4
6 changed files with 12 additions and 9 deletions
+2
View File
@@ -19,6 +19,8 @@ type Config struct {
GRPC GRPCConfig `yaml:"grpc"` 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"` Reva *shared.Reva `yaml:"reva"`
GRPCClientTLS *shared.GRPCClientTLS `yaml:"grpc_client_tls"` GRPCClientTLS *shared.GRPCClientTLS `yaml:"grpc_client_tls"`
Events Events `yaml:"events"` Events Events `yaml:"events"`
@@ -29,8 +29,9 @@ func DefaultConfig() *config.Config {
Service: config.Service{ Service: config.Service{
Name: "search", Name: "search",
}, },
Datapath: path.Join(defaults.BaseDataPath(), "search"), Datapath: path.Join(defaults.BaseDataPath(), "search"),
Reva: shared.DefaultRevaConfig(), DebounceDuration: 1000,
Reva: shared.DefaultRevaConfig(),
Events: config.Events{ Events: config.Events{
Endpoint: "127.0.0.1:9233", Endpoint: "127.0.0.1:9233",
Cluster: "ocis-cluster", Cluster: "ocis-cluster",
@@ -84,7 +84,7 @@ var _ = Describe("Searchprovider", func() {
Describe("New", func() { Describe("New", func() {
It("returns a new instance", 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()) Expect(p).ToNot(BeNil())
}) })
}) })
@@ -79,7 +79,7 @@ func (s MatchArray) Less(i, j int) bool {
return s[i].Score > s[j].Score 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{ p := &Provider{
gwClient: gwClient, gwClient: gwClient,
indexClient: indexClient, indexClient: indexClient,
@@ -87,7 +87,7 @@ func New(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, mach
logger: logger, 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) err := p.doIndexSpace(context.Background(), id, userID)
if err != nil { if err != nil {
p.logger.Error().Err(err).Interface("spaceID", id).Interface("userID", userID).Msg("error while indexing a space") 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 // 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 { 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 p.indexSpaceDebouncer = debouncer
return p return p
} }
@@ -73,7 +73,7 @@ var _ = Describe("Searchprovider", func() {
gwClient = &cs3mocks.GatewayAPIClient{} gwClient = &cs3mocks.GatewayAPIClient{}
indexClient = &mocks.IndexClient{} 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{ gwClient.On("Authenticate", mock.Anything, mock.Anything).Return(&gateway.AuthenticateResponse{
Status: status.NewOK(ctx), Status: status.NewOK(ctx),
@@ -94,7 +94,7 @@ var _ = Describe("Searchprovider", func() {
Describe("New", func() { Describe("New", func() {
It("returns a new instance", 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()) Expect(p).ToNot(BeNil())
}) })
}) })
+1 -1
View File
@@ -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") 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{ return &Service{
id: cfg.GRPC.Namespace + "." + cfg.Service.Name, id: cfg.GRPC.Namespace + "." + cfg.Service.Name,