Skip to content

Commit 54bd63c

Browse files
authored
Change UpdateRepoIndex api to include watchers (#7012)
* Change UpdateRepoIndex api to include watchers * Add timeout
1 parent 6eb53ac commit 54bd63c

File tree

2 files changed

+20
-24
lines changed

2 files changed

+20
-24
lines changed

integrations/repo_search_test.go

+7-16
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package integrations
66

77
import (
8-
"log"
98
"net/http"
109
"testing"
1110
"time"
@@ -34,22 +33,14 @@ func TestSearchRepo(t *testing.T) {
3433
repo, err := models.GetRepositoryByOwnerAndName("user2", "repo1")
3534
assert.NoError(t, err)
3635

37-
models.UpdateRepoIndexer(repo)
36+
waiter := make(chan error, 1)
37+
models.UpdateRepoIndexer(repo, waiter)
3838

39-
log.Printf("Waiting for indexing\n")
40-
41-
i := 0
42-
for i < 60 {
43-
if repo.IndexerStatus != nil && len(repo.IndexerStatus.CommitSha) != 0 {
44-
break
45-
}
46-
time.Sleep(1 * time.Second)
47-
i++
48-
}
49-
if i < 60 {
50-
log.Printf("Indexing took: %ds\n", i)
51-
} else {
52-
log.Printf("Waited the limit: %ds for indexing, continuing\n", i)
39+
select {
40+
case err := <-waiter:
41+
assert.NoError(t, err)
42+
case <-time.After(1 * time.Minute):
43+
assert.Fail(t, "UpdateRepoIndexer took too long")
5344
}
5445

5546
req := NewRequestf(t, "GET", "/user2/repo1/search?q=Description&page=1")

models/repo_indexer.go

+13-8
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ func (repo *Repository) updateIndexerStatus(sha string) error {
5757
}
5858

5959
type repoIndexerOperation struct {
60-
repo *Repository
61-
deleted bool
60+
repo *Repository
61+
deleted bool
62+
watchers []chan<- error
6263
}
6364

6465
var repoIndexerOperationQueue chan repoIndexerOperation
@@ -312,26 +313,30 @@ func nonGenesisChanges(repo *Repository, revision string) (*repoChanges, error)
312313
func processRepoIndexerOperationQueue() {
313314
for {
314315
op := <-repoIndexerOperationQueue
316+
var err error
315317
if op.deleted {
316-
if err := indexer.DeleteRepoFromIndexer(op.repo.ID); err != nil {
318+
if err = indexer.DeleteRepoFromIndexer(op.repo.ID); err != nil {
317319
log.Error("DeleteRepoFromIndexer: %v", err)
318320
}
319321
} else {
320-
if err := updateRepoIndexer(op.repo); err != nil {
322+
if err = updateRepoIndexer(op.repo); err != nil {
321323
log.Error("updateRepoIndexer: %v", err)
322324
}
323325
}
326+
for _, watcher := range op.watchers {
327+
watcher <- err
328+
}
324329
}
325330
}
326331

327332
// DeleteRepoFromIndexer remove all of a repository's entries from the indexer
328-
func DeleteRepoFromIndexer(repo *Repository) {
329-
addOperationToQueue(repoIndexerOperation{repo: repo, deleted: true})
333+
func DeleteRepoFromIndexer(repo *Repository, watchers ...chan<- error) {
334+
addOperationToQueue(repoIndexerOperation{repo: repo, deleted: true, watchers: watchers})
330335
}
331336

332337
// UpdateRepoIndexer update a repository's entries in the indexer
333-
func UpdateRepoIndexer(repo *Repository) {
334-
addOperationToQueue(repoIndexerOperation{repo: repo, deleted: false})
338+
func UpdateRepoIndexer(repo *Repository, watchers ...chan<- error) {
339+
addOperationToQueue(repoIndexerOperation{repo: repo, deleted: false, watchers: watchers})
335340
}
336341

337342
func addOperationToQueue(op repoIndexerOperation) {

0 commit comments

Comments
 (0)