// Periodically flushes messages to bleve index func (b *Bleve) PeriodicFlush(die chan bool) { var ( bvBatchIndex *bv.Batch err error nbMessages int sleepDuration time.Duration = 3 * time.Second ) // Run periodic cleanup task go b.periodicCleanup(die) for { select { case <-die: return default: } nbMessages = len(b.messages) if nbMessages > 0 && (nbMessages >= b.batchSize || time.Now().Sub(b.lastFlush) > b.intervalFlush) { b.mutexFlushMessages.Lock() bvBatchIndex = b.index.NewBatch() for _, message := range b.messages { err = bvBatchIndex.Index(uuid.NewV4().String(), message) if err != nil { logger.Instance(). WithError(err). Warning("Unable to add message to batch") } } if bvBatchIndex.Size() > 0 { err = b.index.Batch(bvBatchIndex) if err != nil { logger.Instance(). WithError(err). Warning("Unable to batch index messages") } else { logger.Instance(). WithField("nb_messages", bvBatchIndex.Size()). Info("Messages successfully indexed") b.lastFlush = time.Now() b.messages = []*storage.Message{} } } b.mutexFlushMessages.Unlock() } time.Sleep(sleepDuration) } }