@@ -49,7 +49,6 @@ type SearchResult struct {
49
49
type Indexer interface {
50
50
Init () (bool , error )
51
51
Ping () bool
52
- SetAvailabilityChangeCallback (callback func (bool ))
53
52
Index (issue []* IndexerData ) error
54
53
Delete (ids ... int64 ) error
55
54
Search (ctx context.Context , kw string , repoIDs []int64 , limit , start int ) (* SearchResult , error )
@@ -94,7 +93,7 @@ func (h *indexerHolder) get() Indexer {
94
93
95
94
var (
96
95
// issueIndexerQueue queue of issue ids to be updated
97
- issueIndexerQueue queue.Queue
96
+ issueIndexerQueue * queue.WorkerPoolQueue [ * IndexerData ]
98
97
holder = newIndexerHolder ()
99
98
)
100
99
@@ -108,62 +107,43 @@ func InitIssueIndexer(syncReindex bool) {
108
107
// Create the Queue
109
108
switch setting .Indexer .IssueType {
110
109
case "bleve" , "elasticsearch" , "meilisearch" :
111
- handler := func (data ... queue. Data ) []queue. Data {
110
+ handler := func (items ... * IndexerData ) []* IndexerData {
112
111
indexer := holder .get ()
113
112
if indexer == nil {
114
- log .Error ("Issue indexer handler: unable to get indexer!" )
115
- return data
113
+ log .Error ("Issue indexer handler: unable to get indexer." )
114
+ return items
115
+ }
116
+ if ! indexer .Ping () {
117
+ log .Error ("Issue indexer handler: indexer is unavailable." )
118
+ return items
116
119
}
117
120
118
- iData := make ([]* IndexerData , 0 , len (data ))
119
- unhandled := make ([]queue.Data , 0 , len (data ))
120
- for _ , datum := range data {
121
- indexerData , ok := datum .(* IndexerData )
122
- if ! ok {
123
- log .Error ("Unable to process provided datum: %v - not possible to cast to IndexerData" , datum )
124
- continue
125
- }
121
+ // the old logic did: if indexer.Ping() { return nil }, skip all failed items
122
+
123
+ toIndex := make ([]* IndexerData , 0 , len (items ))
124
+ for _ , indexerData := range items {
126
125
log .Trace ("IndexerData Process: %d %v %t" , indexerData .ID , indexerData .IDs , indexerData .IsDelete )
127
126
if indexerData .IsDelete {
128
127
if err := indexer .Delete (indexerData .IDs ... ); err != nil {
129
128
log .Error ("Error whilst deleting from index: %v Error: %v" , indexerData .IDs , err )
130
- if indexer .Ping () {
131
- continue
132
- }
133
- // Add back to queue
134
- unhandled = append (unhandled , datum )
135
129
}
136
130
continue
137
131
}
138
- iData = append (iData , indexerData )
132
+ toIndex = append (toIndex , indexerData )
139
133
}
140
- if len (unhandled ) > 0 {
141
- for _ , indexerData := range iData {
142
- unhandled = append (unhandled , indexerData )
143
- }
144
- return unhandled
145
- }
146
- if err := indexer .Index (iData ); err != nil {
147
- log .Error ("Error whilst indexing: %v Error: %v" , iData , err )
148
- if indexer .Ping () {
149
- return nil
150
- }
151
- // Add back to queue
152
- for _ , indexerData := range iData {
153
- unhandled = append (unhandled , indexerData )
154
- }
155
- return unhandled
134
+ if err := indexer .Index (toIndex ); err != nil {
135
+ log .Error ("Error whilst indexing: %v Error: %v" , toIndex , err )
156
136
}
157
137
return nil
158
138
}
159
139
160
- issueIndexerQueue = queue .CreateQueue ("issue_indexer" , handler , & IndexerData {} )
140
+ issueIndexerQueue = queue .CreateSimpleQueue ("issue_indexer" , handler )
161
141
162
142
if issueIndexerQueue == nil {
163
143
log .Fatal ("Unable to create issue indexer queue" )
164
144
}
165
145
default :
166
- issueIndexerQueue = & queue.DummyQueue {}
146
+ issueIndexerQueue = queue .CreateSimpleQueue [ * IndexerData ]( "issue_indexer" , nil )
167
147
}
168
148
169
149
// Create the Indexer
@@ -240,18 +220,6 @@ func InitIssueIndexer(syncReindex bool) {
240
220
log .Fatal ("Unknown issue indexer type: %s" , setting .Indexer .IssueType )
241
221
}
242
222
243
- if queue , ok := issueIndexerQueue .(queue.Pausable ); ok {
244
- holder .get ().SetAvailabilityChangeCallback (func (available bool ) {
245
- if ! available {
246
- log .Info ("Issue index queue paused" )
247
- queue .Pause ()
248
- } else {
249
- log .Info ("Issue index queue resumed" )
250
- queue .Resume ()
251
- }
252
- })
253
- }
254
-
255
223
// Start processing the queue
256
224
go graceful .GetManager ().RunWithShutdownFns (issueIndexerQueue .Run )
257
225
@@ -285,9 +253,6 @@ func InitIssueIndexer(syncReindex bool) {
285
253
case <- graceful .GetManager ().IsShutdown ():
286
254
log .Warn ("Shutdown occurred before issue index initialisation was complete" )
287
255
case <- time .After (timeout ):
288
- if shutdownable , ok := issueIndexerQueue .(queue.Shutdownable ); ok {
289
- shutdownable .Terminate ()
290
- }
291
256
log .Fatal ("Issue Indexer Initialization timed-out after: %v" , timeout )
292
257
}
293
258
}()
0 commit comments