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  }