forked from ironsweet/golucene
-
Notifications
You must be signed in to change notification settings - Fork 0
/
event.go
46 lines (39 loc) · 1.39 KB
/
event.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package index
import (
"github.com/gzg1984/golucene/core/index/model"
)
/*
Interface for internal atomic events. See DocumentsWriter fo details.
Events are executed concurrently and no order is guaranteed. Each
event should only rely on the serializeability within its process
method. All actions that must happen before or after a certain action
must be encoded inside the process() method.
*/
type Event func(writer *IndexWriter, triggerMerge, clearBuffers bool) error
var applyDeletesEvent = Event(func(writer *IndexWriter, triggerMerge, forcePurge bool) error {
panic("not implemented yet")
})
var mergePendingEvent = Event(func(writer *IndexWriter, triggerMerge, forcePurge bool) error {
return writer.doAfterSegmentFlushed(triggerMerge, forcePurge)
})
var forcedPurgeEvent = Event(func(writer *IndexWriter, triggerMerge, forcePurge bool) error {
_, err := writer.purge(true)
return err
})
func newFlushFailedEvent(info *model.SegmentInfo) Event {
return Event(func(writer *IndexWriter, triggerMerge, forcePurge bool) error {
return writer.flushFailed(info)
})
}
func newDeleteNewFilesEvent(files map[string]bool) Event {
return Event(func(writer *IndexWriter, triggerMerge, forcePurge bool) error {
writer.Lock()
defer writer.Unlock()
var fileList []string
for file, _ := range files {
fileList = append(fileList, file)
}
writer.deleter.deleteNewFiles(fileList)
return nil
})
}