datamanager: start initEtcd from last datastatus

This commit is contained in:
Simone Gotti 2019-07-18 15:02:11 +02:00
parent 445ef24daa
commit cb2a871be6
1 changed files with 15 additions and 0 deletions

View File

@ -1002,6 +1002,17 @@ func (d *DataManager) InitEtcd(ctx context.Context) error {
// walsdata not found in etcd
curDataStatus, err := d.GetLastDataStatus()
if err != nil && err != ostypes.ErrNotExist {
return err
}
// set the first wal to import in etcd if there's a snapshot. In this way we'll
// ignore older wals (or wals left after an import)
var firstWal string
if err == nil {
firstWal = curDataStatus.WalSequence
}
// if there're some wals in the objectstorage this means etcd has been reset.
// So take all the wals in committed or checkpointed state starting from the
// first not checkpointed wal and put them in etcd
@ -1015,6 +1026,10 @@ func (d *DataManager) InitEtcd(ctx context.Context) error {
return wal.Err
}
if wal.WalSequence < firstWal {
continue
}
lastCommittedStorageWalElem.Value = wal
lastCommittedStorageWalElem = lastCommittedStorageWalElem.Next()
lastCommittedStorageWalSequence = wal.WalSequence