@@ -49,7 +49,6 @@ type SearchResult struct {
4949type Indexer interface {
5050 Init () (bool , error )
5151 Ping () bool
52- SetAvailabilityChangeCallback (callback func (bool ))
5352 Index (issue []* IndexerData ) error
5453 Delete (ids ... int64 ) error
5554 Search (ctx context.Context , kw string , repoIDs []int64 , limit , start int ) (* SearchResult , error )
@@ -94,7 +93,7 @@ func (h *indexerHolder) get() Indexer {
9493
9594var (
9695 // issueIndexerQueue queue of issue ids to be updated
97- issueIndexerQueue queue.Queue
96+ issueIndexerQueue * queue.WorkerPoolQueue [ * IndexerData ]
9897 holder = newIndexerHolder ()
9998)
10099
@@ -108,62 +107,43 @@ func InitIssueIndexer(syncReindex bool) {
108107 // Create the Queue
109108 switch setting .Indexer .IssueType {
110109 case "bleve" , "elasticsearch" , "meilisearch" :
111- handler := func (data ... queue. Data ) []queue. Data {
110+ handler := func (items ... * IndexerData ) []* IndexerData {
112111 indexer := holder .get ()
113112 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
116119 }
117120
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 {
126125 log .Trace ("IndexerData Process: %d %v %t" , indexerData .ID , indexerData .IDs , indexerData .IsDelete )
127126 if indexerData .IsDelete {
128127 if err := indexer .Delete (indexerData .IDs ... ); err != nil {
129128 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 )
135129 }
136130 continue
137131 }
138- iData = append (iData , indexerData )
132+ toIndex = append (toIndex , indexerData )
139133 }
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 )
156136 }
157137 return nil
158138 }
159139
160- issueIndexerQueue = queue .CreateQueue ("issue_indexer" , handler , & IndexerData {} )
140+ issueIndexerQueue = queue .CreateSimpleQueue ("issue_indexer" , handler )
161141
162142 if issueIndexerQueue == nil {
163143 log .Fatal ("Unable to create issue indexer queue" )
164144 }
165145 default :
166- issueIndexerQueue = & queue.DummyQueue {}
146+ issueIndexerQueue = queue .CreateSimpleQueue [ * IndexerData ]( "issue_indexer" , nil )
167147 }
168148
169149 // Create the Indexer
@@ -240,18 +220,6 @@ func InitIssueIndexer(syncReindex bool) {
240220 log .Fatal ("Unknown issue indexer type: %s" , setting .Indexer .IssueType )
241221 }
242222
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-
255223 // Start processing the queue
256224 go graceful .GetManager ().RunWithShutdownFns (issueIndexerQueue .Run )
257225
@@ -285,9 +253,6 @@ func InitIssueIndexer(syncReindex bool) {
285253 case <- graceful .GetManager ().IsShutdown ():
286254 log .Warn ("Shutdown occurred before issue index initialisation was complete" )
287255 case <- time .After (timeout ):
288- if shutdownable , ok := issueIndexerQueue .(queue.Shutdownable ); ok {
289- shutdownable .Terminate ()
290- }
291256 log .Fatal ("Issue Indexer Initialization timed-out after: %v" , timeout )
292257 }
293258 }()
0 commit comments