mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-08-01 10:20:52 -04:00
Reindex spaces concurrently
This speeds up reindexing all spaces which happend sequentially space after space until now. The level of concurrency can be configured using the SEARCH_REINDEX_CONCURRENCY env var (3 by default).
This commit is contained in:
@@ -28,6 +28,7 @@ type Config struct {
|
||||
Extractor Extractor `yaml:"extractor"`
|
||||
ContentExtractionSizeLimit uint64 `yaml:"content_extraction_size_limit" env:"SEARCH_CONTENT_EXTRACTION_SIZE_LIMIT" desc:"Maximum file size in bytes that is allowed for content extraction." introductionVersion:"1.0.0"`
|
||||
BatchSize int `yaml:"batch_size" env:"SEARCH_BATCH_SIZE" desc:"The number of documents to process in a single batch. Defaults to 500." introductionVersion:"1.0.0"`
|
||||
ReindexConcurrency int `yaml:"reindex_concurrency" env:"SEARCH_REINDEX_CONCURRENCY" desc:"The maximum number of spaces that are reindexed concurrently when reindexing all spaces." introductionVersion:"%%NEXT%%"`
|
||||
|
||||
ServiceAccount ServiceAccount `yaml:"service_account"`
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ func DefaultConfig() *config.Config {
|
||||
},
|
||||
ContentExtractionSizeLimit: 20 * 1024 * 1024, // Limit content extraction to <20MB files by default
|
||||
BatchSize: 50,
|
||||
ReindexConcurrency: 3,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
"github.com/opencloud-eu/reva/v2/pkg/utils"
|
||||
merrors "go-micro.dev/v4/errors"
|
||||
"go-micro.dev/v4/metadata"
|
||||
"golang.org/x/sync/errgroup"
|
||||
grpcmetadata "google.golang.org/grpc/metadata"
|
||||
|
||||
"github.com/opencloud-eu/opencloud/pkg/log"
|
||||
@@ -144,13 +145,32 @@ func (s Service) IndexSpace(_ context.Context, in *searchsvc.IndexSpaceRequest,
|
||||
return errors.New(resp.GetStatus().GetMessage())
|
||||
}
|
||||
|
||||
// Index all spaces concurrently, limited to a configurable number of spaces
|
||||
// being reindexed at the same time.
|
||||
concurrency := max(s.cfg.ReindexConcurrency, 1)
|
||||
|
||||
g, gctx := errgroup.WithContext(ctx)
|
||||
g.SetLimit(concurrency)
|
||||
|
||||
for _, space := range resp.GetStorageSpaces() {
|
||||
if err := s.searcher.IndexSpace(space.GetId(), in.GetForceReindex()); err != nil {
|
||||
return err
|
||||
// stop scheduling new work once one of the goroutines failed
|
||||
if gctx.Err() != nil {
|
||||
break
|
||||
}
|
||||
|
||||
g.Go(func() error {
|
||||
s.log.Info().Str("space_id", space.GetId().GetOpaqueId()).Msg("indexing space")
|
||||
err := s.searcher.IndexSpace(space.GetId(), in.GetForceReindex())
|
||||
if err != nil {
|
||||
s.log.Error().Err(err).Str("space_id", space.GetId().GetOpaqueId()).Msg("failed to index space")
|
||||
} else {
|
||||
s.log.Info().Str("space_id", space.GetId().GetOpaqueId()).Msg("finished indexing space")
|
||||
}
|
||||
return err
|
||||
})
|
||||
}
|
||||
|
||||
return nil
|
||||
return g.Wait()
|
||||
}
|
||||
|
||||
// FromCache pulls a search result from cache
|
||||
|
||||
Reference in New Issue
Block a user