internal/server/index_builder.go (70 lines of code) (raw):

package server import ( "context" "errors" "fmt" "log/slog" "time" "gitlab.com/gitlab-org/gitlab-zoekt-indexer/internal/callback" "gitlab.com/gitlab-org/gitlab-zoekt-indexer/internal/file_cleaner" "gitlab.com/gitlab-org/gitlab-zoekt-indexer/internal/indexer" "gitlab.com/gitlab-org/gitlab-zoekt-indexer/internal/indexing_lock" "gitlab.com/gitlab-org/labkit/correlation" ) func (b DefaultIndexBuilder) DeleteRepository(req DeleteRequest, callbackFunc callback.CallbackFunc, lock *indexing_lock.IndexingLock) error { fileCleaner := file_cleaner.NewFileCleaner(b.GetIndexDir(), lock) if err := fileCleaner.MarkRepoForDeletion(req.RepoID); err != nil { if req.Callback != nil { callbackFunc.OnFailure(*req.Callback, err) } return err } callbackFunc.OnSuccess(*req.Callback) return nil } func (b DefaultIndexBuilder) GetIndexDir() string { return b.IndexDir } func (b DefaultIndexBuilder) IndexRepository(ctx context.Context, req IndexRequest, callbackFunc callback.CallbackFunc) error { if req.GitalyConnectionInfo == nil { return errors.New("gitalyConnectionInfo is not set") } if req.FileSizeLimit == 0 { return errors.New("fileSizeLimit is not set") } timeout, err := time.ParseDuration(req.Timeout) if err != nil { return fmt.Errorf("failed to parse Timeout: %v with error %w", req.Timeout, err) } ctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() idx := &indexer.Indexer{ IndexDir: b.IndexDir, ProjectID: req.RepoID, GitalyAddress: req.GitalyConnectionInfo.Address, GitalyStorageName: req.GitalyConnectionInfo.Storage, GitalyToken: req.GitalyConnectionInfo.Token, GitalyRelativePath: req.GitalyConnectionInfo.Path, LimitFileSize: req.FileSizeLimit, ForceReindex: req.Force, Parallelism: req.Parallelism, Writer: &indexer.DefaultIndexWriter{}, OnRetryableFailure: indexer.IndexingFailureFallback, } ctx = correlation.ContextWithCorrelation(ctx, correlation.ExtractFromContextOrGenerate(ctx)) indexingResult, err := idx.IndexRepository(ctx) if indexingResult != nil { slog.Debug("indexing Result", "project_id", idx.ProjectID, "force", idx.ForceReindex, "modified_files_count", indexingResult.ModifiedFilesCount, "deleted_files_count", indexingResult.DeletedFilesCount) } railsCallback := req.Callback if err != nil { if railsCallback != nil { callbackFunc.OnFailure(*railsCallback, err) } return err } if railsCallback != nil { callbackFunc.OnSuccess(*railsCallback) } return nil }