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