Sync error consider adding an alarm
tsywkGo opened this issue · comments
for {
needFlush := false
needSavePos := false
select {
case v := <-r.syncCh:
switch v := v.(type) {
case posSaver:
now := time.Now()
if v.force || now.Sub(lastSavedTime) > 3*time.Second {
lastSavedTime = now
needFlush = true
needSavePos = true
pos = v.pos
}
case []*elastic.BulkRequest:
reqs = append(reqs, v...)
needFlush = len(reqs) >= bulkSize
}
case <-ticker.C:
needFlush = true
case <-r.ctx.Done():
return
}
if needFlush {
// TODO: retry some times?
if err := r.doBulk(reqs); err != nil {
log.Errorf("do ES bulk err %v, close sync", err)
r.cancel()
return
}
reqs = reqs[0:0]
}
if needSavePos {
if err := r.master.Save(pos); err != nil {
log.Errorf("save sync position %s err %v, close sync", pos, err)
r.cancel()
return
}
}
}
When an error occurs, exit directly, r.syncCh
will be blocked; But there is no alarm; So consider add an alarm.