Skip to content

Commit 60ed63c

Browse files
committed
fix test and make code clean
1 parent 0de12a2 commit 60ed63c

File tree

4 files changed

+47
-73
lines changed

4 files changed

+47
-73
lines changed

modules/indexer/code/bleve.go

Lines changed: 27 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@
55
package code
66

77
import (
8-
"context"
98
"fmt"
109
"os"
1110
"strconv"
1211
"strings"
13-
"sync"
1412

1513
"code.gitea.io/gitea/models"
1614
"code.gitea.io/gitea/modules/base"
1715
"code.gitea.io/gitea/modules/charset"
1816
"code.gitea.io/gitea/modules/git"
19-
"code.gitea.io/gitea/modules/graceful"
2017
"code.gitea.io/gitea/modules/log"
2118
"code.gitea.io/gitea/modules/setting"
2219

@@ -59,7 +56,7 @@ func addUnicodeNormalizeTokenFilter(m *mapping.IndexMappingImpl) error {
5956
// updates and bleve version updates. If index needs to be created (or
6057
// re-created), returns (nil, nil)
6158
func openIndexer(path string, latestVersion int) (bleve.Index, error) {
62-
_, err := os.Stat(setting.Indexer.IssuePath)
59+
_, err := os.Stat(path)
6360
if err != nil && os.IsNotExist(err) {
6461
return nil, nil
6562
} else if err != nil {
@@ -137,34 +134,6 @@ const (
137134
repoIndexerLatestVersion = 4
138135
)
139136

140-
type bleveIndexerHolder struct {
141-
index bleve.Index
142-
mutex sync.RWMutex
143-
cond *sync.Cond
144-
}
145-
146-
func newBleveIndexerHolder() *bleveIndexerHolder {
147-
b := &bleveIndexerHolder{}
148-
b.cond = sync.NewCond(b.mutex.RLocker())
149-
return b
150-
}
151-
152-
func (r *bleveIndexerHolder) set(index bleve.Index) {
153-
r.mutex.Lock()
154-
defer r.mutex.Unlock()
155-
r.index = index
156-
r.cond.Broadcast()
157-
}
158-
159-
func (r *bleveIndexerHolder) get() bleve.Index {
160-
r.mutex.RLock()
161-
defer r.mutex.RUnlock()
162-
if r.index == nil {
163-
r.cond.Wait()
164-
}
165-
return r.index
166-
}
167-
168137
// createRepoIndexer create a repo indexer if one does not already exist
169138
func createRepoIndexer(path string, latestVersion int) (bleve.Index, error) {
170139
docMapping := bleve.NewDocumentMapping()
@@ -222,51 +191,47 @@ var (
222191

223192
// BleveIndexer represents a bleve indexer implementation
224193
type BleveIndexer struct {
225-
indexDir string
226-
indexerHolder *bleveIndexerHolder
194+
indexDir string
195+
indexer bleve.Index
227196
}
228197

229198
// NewBleveIndexer creates a new bleve local indexer
230-
func NewBleveIndexer(indexDir string) *BleveIndexer {
231-
return &BleveIndexer{
232-
indexDir: indexDir,
233-
indexerHolder: newBleveIndexerHolder(),
199+
func NewBleveIndexer(indexDir string) (*BleveIndexer, bool, error) {
200+
indexer := &BleveIndexer{
201+
indexDir: indexDir,
234202
}
203+
created, err := indexer.init()
204+
return indexer, created, err
235205
}
236206

237207
// Init init the indexer
238-
func (b *BleveIndexer) Init() (bool, error) {
239-
indexer, err := openIndexer(b.indexDir, repoIndexerLatestVersion)
208+
func (b *BleveIndexer) init() (bool, error) {
209+
var err error
210+
b.indexer, err = openIndexer(b.indexDir, repoIndexerLatestVersion)
240211
if err != nil {
241-
log.Fatal("openIndexer: %v", err)
212+
return false, err
242213
}
243-
if indexer != nil {
244-
b.indexerHolder.set(indexer)
245-
b.closeAtTerminate()
214+
if b.indexer != nil {
246215
return false, nil
247216
}
248217

249-
indexer, err = createRepoIndexer(setting.Indexer.RepoPath, repoIndexerLatestVersion)
218+
b.indexer, err = createRepoIndexer(b.indexDir, repoIndexerLatestVersion)
250219
if err != nil {
251220
return false, err
252221
}
253-
b.indexerHolder.set(indexer)
254-
b.closeAtTerminate()
222+
255223
return true, nil
256224
}
257225

258-
func (b *BleveIndexer) closeAtTerminate() {
259-
graceful.GetManager().RunAtTerminate(context.Background(), func() {
260-
log.Debug("Closing repo indexer")
261-
indexer := b.indexerHolder.get()
262-
if indexer != nil {
263-
err := indexer.Close()
264-
if err != nil {
265-
log.Error("Error whilst closing the repository indexer: %v", err)
266-
}
226+
func (b *BleveIndexer) Close() {
227+
log.Debug("Closing repo indexer")
228+
if b.indexer != nil {
229+
err := b.indexer.Close()
230+
if err != nil {
231+
log.Error("Error whilst closing the repository indexer: %v", err)
267232
}
268-
log.Info("PID: %d Repository Indexer closed", os.Getpid())
269-
})
233+
}
234+
log.Info("PID: %d Repository Indexer closed", os.Getpid())
270235
}
271236

272237
// Index indexes the data
@@ -287,7 +252,7 @@ func (b *BleveIndexer) Index(repoID int64) error {
287252
return nil
288253
}
289254

290-
batch := rupture.NewFlushingBatch(b.indexerHolder.get(), maxBatchSize)
255+
batch := rupture.NewFlushingBatch(b.indexer, maxBatchSize)
291256
for _, update := range changes.Updates {
292257
if err := addUpdate(update, repo, batch); err != nil {
293258
return err
@@ -308,11 +273,11 @@ func (b *BleveIndexer) Index(repoID int64) error {
308273
func (b *BleveIndexer) Delete(repoID int64) error {
309274
query := numericEqualityQuery(repoID, "RepoID")
310275
searchRequest := bleve.NewSearchRequestOptions(query, 2147483647, 0, false)
311-
result, err := b.indexerHolder.get().Search(searchRequest)
276+
result, err := b.indexer.Search(searchRequest)
312277
if err != nil {
313278
return err
314279
}
315-
batch := rupture.NewFlushingBatch(b.indexerHolder.get(), maxBatchSize)
280+
batch := rupture.NewFlushingBatch(b.indexer, maxBatchSize)
316281
for _, hit := range result.Hits {
317282
if err = batch.Delete(hit.ID); err != nil {
318283
return err
@@ -348,7 +313,7 @@ func (b *BleveIndexer) Search(repoIDs []int64, keyword string, page, pageSize in
348313
searchRequest.Fields = []string{"Content", "RepoID"}
349314
searchRequest.IncludeLocations = true
350315

351-
result, err := b.indexerHolder.get().Search(searchRequest)
316+
result, err := b.indexer.Search(searchRequest)
352317
if err != nil {
353318
return 0, nil, err
354319
}

modules/indexer/code/bleve_test.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"testing"
1111

1212
"code.gitea.io/gitea/models"
13+
"code.gitea.io/gitea/modules/log"
14+
"code.gitea.io/gitea/modules/setting"
1315

1416
"github.com/stretchr/testify/assert"
1517
)
@@ -22,13 +24,16 @@ func TestIndexAndSearch(t *testing.T) {
2224
models.PrepareTestEnv(t)
2325

2426
dir := "./bleve.index"
25-
defer os.RemoveAll(dir)
26-
indexer := NewBleveIndexer(dir)
27+
os.RemoveAll(dir)
2728

28-
_, err := indexer.Init()
29-
assert.NoError(t, err)
29+
setting.Indexer.RepoIndexerEnabled = true
30+
idx, _, err := NewBleveIndexer(dir)
31+
if err != nil {
32+
idx.Close()
33+
log.Fatal("indexer.Init: %v", err)
34+
}
3035

31-
err = indexer.Index(1)
36+
err = idx.Index(1)
3237
assert.NoError(t, err)
3338

3439
var (
@@ -52,7 +57,7 @@ func TestIndexAndSearch(t *testing.T) {
5257
)
5358

5459
for _, kw := range keywords {
55-
total, res, err := indexer.Search(nil, kw.Keyword, 1, 10)
60+
total, res, err := idx.Search(nil, kw.Keyword, 1, 10)
5661
assert.NoError(t, err)
5762
assert.EqualValues(t, len(kw.IDs), total)
5863

modules/indexer/code/indexer.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ type SearchResult struct {
2727

2828
// Indexer defines an interface to indexer issues contents
2929
type Indexer interface {
30-
Init() (bool, error)
3130
Index(repoID int64) error
3231
Delete(repoID int64) error
3332
Search(repoIDs []int64, keyword string, page, pageSize int) (int64, []*SearchResult, error)
33+
Close()
3434
}
3535

3636
// Init initialize the repo indexer
@@ -43,13 +43,15 @@ func Init() {
4343
go func() {
4444
start := time.Now()
4545
log.Info("Initializing Repository Indexer")
46-
indexer = NewBleveIndexer(setting.Indexer.RepoPath)
47-
created, err := indexer.Init()
46+
var created bool
47+
var err error
48+
indexer, created, err = NewBleveIndexer(setting.Indexer.RepoPath)
4849
if err != nil {
50+
indexer.Close()
4951
log.Fatal("indexer.Init: %v", err)
5052
}
5153

52-
go processRepoIndexerOperationQueue()
54+
go processRepoIndexerOperationQueue(indexer)
5355

5456
if created {
5557
go populateRepoIndexer()

modules/indexer/code/queue.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ type repoIndexerOperation struct {
2121

2222
var repoIndexerOperationQueue chan repoIndexerOperation
2323

24-
func processRepoIndexerOperationQueue() {
24+
func processRepoIndexerOperationQueue(indexer Indexer) {
25+
defer indexer.Close()
26+
2527
repoIndexerOperationQueue = make(chan repoIndexerOperation, setting.Indexer.UpdateQueueLength)
2628
for {
2729
select {

0 commit comments

Comments
 (0)