Change the default reindex debounce duration to 1s.
Also make it configurable using an env var.
This commit is contained in:
@@ -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())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user