in nimo-shake/incr-sync/syncer.go [202:230]
func (d *Dispatcher) waitFatherShardFinished() {
// re-check father shard finished
var father string
if d.shard.Shard.ParentShardId != nil {
father = *d.shard.Shard.ParentShardId
}
LOG.Info("%s begins, check father shard[%v] status", d.String(), father)
if father != "" {
// check father finished
for {
fatherCkpt, err := d.ckptWriter.Query(father, d.ns.Collection)
if err != nil && err.Error() != utils.NotFountErr {
LOG.Crashf("%s query father[%v] checkpoint fail[%v]", d.String(), father, err)
}
// err != nil means utils.NotFountErr
if err != nil || !checkpoint.IsStatusProcessing(fatherCkpt.Status) {
break
}
LOG.Warn("%s father shard[%v] is still running, waiting...", d.String(), father)
time.Sleep(WaitFatherFinishInterval * time.Second)
}
}
LOG.Info("%s father shard[%v] finished", d.String(), father)
}