Skip to content
This repository was archived by the owner on Sep 30, 2024. It is now read-only.

Extract reposcheduler and add support for syntactic indexes #60958

Merged
merged 29 commits into from
Apr 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
262d2ef
Extract reposcheduler and add support for syntactic indexes
keynmol Mar 8, 2024
2577e90
gazelle
keynmol Mar 8, 2024
b5213ea
Run migration generators
keynmol Mar 8, 2024
23e4aa7
go formatting
keynmol Mar 8, 2024
fd44cab
Update mocks and bazel build for tests
keynmol Mar 8, 2024
83cdb83
Make migration idempotent
keynmol Mar 11, 2024
37353fb
regenerate files
keynmol Mar 11, 2024
1bb0010
Refactor reposcheduler test
keynmol Mar 12, 2024
0245cc6
DRY the global policy tests as well
keynmol Mar 13, 2024
6a935c0
Include indexing type in lsif_last_index_scan primary key
keynmol Mar 18, 2024
4822ea0
Make migration idempotent
keynmol Mar 18, 2024
046f438
check in generated stuff
keynmol Mar 19, 2024
3febbd4
Use constraint name for conflict handling
keynmol Mar 20, 2024
2b86a02
Switch to a separate table
keynmol Mar 21, 2024
fd55462
Make migration idempotent
keynmol Mar 21, 2024
9438272
Remove spurious comments
keynmol Mar 21, 2024
6e4e4fb
Remove unnecessary goroutine parameter
keynmol Mar 22, 2024
e3721b9
PR comments
keynmol Mar 26, 2024
b24994a
Default syntactic indexing to false, make it non null in DB
keynmol Mar 26, 2024
31370b1
PR comments
keynmol Mar 26, 2024
2d2b6ba
Regenerate migrations
keynmol Mar 26, 2024
b8c521a
Push RepositoryToIndex conversion into the store
keynmol Mar 26, 2024
f033f14
Add extensive comments to reposcheduler tests
keynmol Mar 26, 2024
bba1af3
Refactor tests
keynmol Mar 26, 2024
0528dde
Add comments, clarify metric and variable names
keynmol Mar 27, 2024
11bc9d3
gofmt
keynmol Mar 27, 2024
951733a
Revert changes to AutoIndexingService
keynmol Mar 27, 2024
919f34b
fixup
keynmol Mar 27, 2024
5962c57
PR comments
keynmol Mar 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion cmd/worker/internal/codeintel/autoindexing_scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ func (j *autoindexingScheduler) Routines(_ context.Context, observationCtx *obse
services.UploadsService,
services.PoliciesService,
matcher,
services.AutoIndexingService,
services.PreciseRepoSchedulingService,
*services.AutoIndexingService,
db.Repos(),
), nil
}
1 change: 1 addition & 0 deletions internal/codeintel/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ go_library(
"//internal/codeintel/dependencies",
"//internal/codeintel/policies",
"//internal/codeintel/ranking",
"//internal/codeintel/reposcheduler",
"//internal/codeintel/sentinel",
"//internal/codeintel/shared",
"//internal/codeintel/uploads",
Expand Down
1 change: 1 addition & 0 deletions internal/codeintel/autoindexing/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ go_library(
"//internal/codeintel/autoindexing/internal/store",
"//internal/codeintel/autoindexing/shared",
"//internal/codeintel/dependencies",
"//internal/codeintel/reposcheduler",
"//internal/codeintel/uploads/shared",
"//internal/database",
"//internal/gitserver",
Expand Down
6 changes: 4 additions & 2 deletions internal/codeintel/autoindexing/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/sourcegraph/sourcegraph/internal/codeintel/autoindexing/internal/background/summary"
"github.com/sourcegraph/sourcegraph/internal/codeintel/autoindexing/internal/inference"
autoindexingstore "github.com/sourcegraph/sourcegraph/internal/codeintel/autoindexing/internal/store"
"github.com/sourcegraph/sourcegraph/internal/codeintel/reposcheduler"
"github.com/sourcegraph/sourcegraph/internal/database"
"github.com/sourcegraph/sourcegraph/internal/gitserver"
"github.com/sourcegraph/sourcegraph/internal/goroutine"
Expand Down Expand Up @@ -49,14 +50,15 @@ func NewIndexSchedulers(
uploadSvc UploadService,
policiesSvc PoliciesService,
policyMatcher PolicyMatcher,
autoindexingSvc *Service,
repoSchedulingSvc reposcheduler.RepositorySchedulingService,
autoindexingSvc Service,
repoStore database.RepoStore,
) []goroutine.BackgroundRoutine {
return background.NewIndexSchedulers(
scopedContext("scheduler", observationCtx),
policiesSvc,
policyMatcher,
autoindexingSvc,
repoSchedulingSvc,
autoindexingSvc.indexEnqueuer,
repoStore,
autoindexingSvc.store,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ go_library(
"//internal/codeintel/autoindexing/internal/background/summary",
"//internal/codeintel/autoindexing/internal/jobselector",
"//internal/codeintel/autoindexing/internal/store",
"//internal/codeintel/reposcheduler",
"//internal/database",
"//internal/goroutine",
"//internal/observation",
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions internal/codeintel/autoindexing/internal/background/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/sourcegraph/sourcegraph/internal/codeintel/autoindexing/internal/background/summary"
"github.com/sourcegraph/sourcegraph/internal/codeintel/autoindexing/internal/jobselector"
"github.com/sourcegraph/sourcegraph/internal/codeintel/autoindexing/internal/store"
"github.com/sourcegraph/sourcegraph/internal/codeintel/reposcheduler"
"github.com/sourcegraph/sourcegraph/internal/database"
"github.com/sourcegraph/sourcegraph/internal/goroutine"
"github.com/sourcegraph/sourcegraph/internal/observation"
Expand All @@ -23,7 +24,7 @@ func NewIndexSchedulers(
observationCtx *observation.Context,
policiesSvc scheduler.PoliciesService,
policyMatcher scheduler.PolicyMatcher,
autoindexingSvc scheduler.AutoIndexingService,
repoSchedulingSvc reposcheduler.RepositorySchedulingService,
indexEnqueuer scheduler.IndexEnqueuer,
repoStore database.RepoStore,
store store.Store,
Expand All @@ -32,7 +33,7 @@ func NewIndexSchedulers(
return []goroutine.BackgroundRoutine{
scheduler.NewScheduler(
observationCtx,
autoindexingSvc,
repoSchedulingSvc,
policiesSvc,
policyMatcher,
indexEnqueuer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ go_library(
"//internal/codeintel/dependencies",
"//internal/codeintel/policies",
"//internal/codeintel/policies/shared",
"//internal/codeintel/reposcheduler",
"//internal/codeintel/uploads/shared",
"//internal/conf",
"//internal/database",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,3 @@ type IndexEnqueuer interface {
QueueIndexes(ctx context.Context, repositoryID int, rev, configuration string, force, bypassLimit bool) (_ []uploadsshared.Index, err error)
QueueIndexesForPackage(ctx context.Context, pkg dependencies.MinimialVersionedPackageRepo) (err error)
}

type AutoIndexingService interface {
GetRepositoriesForIndexScan(ctx context.Context, processDelay time.Duration, allowGlobalPolicies bool, repositoryMatchLimit *int, limit int, now time.Time) (_ []int, err error)
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/sourcegraph/sourcegraph/internal/codeintel/autoindexing/internal/inference"
"github.com/sourcegraph/sourcegraph/internal/codeintel/autoindexing/internal/store"
policiesshared "github.com/sourcegraph/sourcegraph/internal/codeintel/policies/shared"
"github.com/sourcegraph/sourcegraph/internal/codeintel/reposcheduler"
"github.com/sourcegraph/sourcegraph/internal/conf"
"github.com/sourcegraph/sourcegraph/internal/database"
"github.com/sourcegraph/sourcegraph/internal/gitserver/gitdomain"
Expand All @@ -23,30 +24,30 @@ import (
)

type indexSchedulerJob struct {
autoindexingSvc AutoIndexingService
policiesSvc PoliciesService
policyMatcher PolicyMatcher
indexEnqueuer IndexEnqueuer
repoStore database.RepoStore
repoSchedulingSvc reposcheduler.RepositorySchedulingService
policiesSvc PoliciesService
policyMatcher PolicyMatcher
indexEnqueuer IndexEnqueuer
repoStore database.RepoStore
}

var m = new(metrics.SingletonREDMetrics)

func NewScheduler(
observationCtx *observation.Context,
autoindexingSvc AutoIndexingService,
repoSchedulingSvc reposcheduler.RepositorySchedulingService,
policiesSvc PoliciesService,
policyMatcher PolicyMatcher,
indexEnqueuer IndexEnqueuer,
repoStore database.RepoStore,
config *Config,
) goroutine.BackgroundRoutine {
job := indexSchedulerJob{
autoindexingSvc: autoindexingSvc,
policiesSvc: policiesSvc,
policyMatcher: policyMatcher,
indexEnqueuer: indexEnqueuer,
repoStore: repoStore,
repoSchedulingSvc: repoSchedulingSvc,
policiesSvc: policiesSvc,
policyMatcher: policyMatcher,
indexEnqueuer: indexEnqueuer,
repoStore: repoStore,
}

redMetrics := m.Get(func() *metrics.REDMetrics {
Expand Down Expand Up @@ -103,12 +104,13 @@ func (b indexSchedulerJob) handleScheduler(
// set should contain repositories that have yet to be updated, or that have been updated least recently.
// This allows us to update every repository reliably, even if it takes a long time to process through
// the backlog.
repositories, err := b.autoindexingSvc.GetRepositoriesForIndexScan(
repositories, err := b.repoSchedulingSvc.GetRepositoriesForIndexScan(
ctx,
repositoryProcessDelay,
conf.CodeIntelAutoIndexingAllowGlobalPolicies(),
repositoryMatchLimit,
repositoryBatchSize,
reposcheduler.NewBatchOptions(
repositoryProcessDelay,
conf.CodeIntelAutoIndexingAllowGlobalPolicies(),
repositoryMatchLimit,
repositoryBatchSize),
time.Now(),
)
if err != nil {
Expand All @@ -128,13 +130,13 @@ func (b indexSchedulerJob) handleScheduler(
errMu sync.Mutex
)

for _, repositoryID := range repositories {
for _, repository := range repositories {
if err := sema.Acquire(ctx, 1); err != nil {
return err
}
go func() {
defer sema.Release(1)
if repositoryErr := b.handleRepository(ctx, repositoryID, policyBatchSize, now); repositoryErr != nil {
if repositoryErr := b.handleRepository(ctx, repository.ID, policyBatchSize, now); repositoryErr != nil {
if !errors.As(err, &inference.LimitError{}) {
errMu.Lock()
errs = errors.Append(errs, repositoryErr)
Expand Down
3 changes: 1 addition & 2 deletions internal/codeintel/autoindexing/internal/store/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ go_test(
"coverage_test.go",
"dependencies_test.go",
"enqueuer_test.go",
"scheduler_test.go",
"store_helpers_test.go",
"store_test.go",
],
embed = [":store"],
tags = [
Expand All @@ -61,7 +61,6 @@ go_test(
"//internal/database/dbtest",
"//internal/executor",
"//internal/observation",
"//internal/timeutil",
"@com_github_google_go_cmp//cmp",
"@com_github_keegancsmith_sqlf//:sqlf",
"@com_github_lib_pq//:pq",
Expand Down
Loading