From c03481908773e3d41f2087ffc83ad31240762e24 Mon Sep 17 00:00:00 2001 From: Simone Gotti Date: Thu, 18 Jul 2019 14:54:07 +0200 Subject: [PATCH] datamanager: accept optional datastatus in initEtcd --- internal/datamanager/datamanager.go | 2 +- internal/datamanager/wal.go | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/internal/datamanager/datamanager.go b/internal/datamanager/datamanager.go index d0ccc4f..02abf23 100644 --- a/internal/datamanager/datamanager.go +++ b/internal/datamanager/datamanager.go @@ -193,7 +193,7 @@ func (d *DataManager) deleteEtcd(ctx context.Context) error { func (d *DataManager) Run(ctx context.Context, readyCh chan struct{}) error { for { - err := d.InitEtcd(ctx) + err := d.InitEtcd(ctx, nil) if err == nil { break } diff --git a/internal/datamanager/wal.go b/internal/datamanager/wal.go index 689ea6f..b70d57b 100644 --- a/internal/datamanager/wal.go +++ b/internal/datamanager/wal.go @@ -907,7 +907,7 @@ func (d *DataManager) etcdPinger(ctx context.Context) error { return nil } -func (d *DataManager) InitEtcd(ctx context.Context) error { +func (d *DataManager) InitEtcd(ctx context.Context, dataStatus *DataStatus) error { writeWal := func(wal *WalFile) error { walFile, err := d.ost.ReadObject(d.storageWalStatusFile(wal.WalSequence) + ".committed") if err != nil { @@ -1002,15 +1002,19 @@ 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 dataStatus != nil { + firstWal = dataStatus.WalSequence + } else { + dataStatus, 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) + if err == nil { + firstWal = dataStatus.WalSequence + } } // if there're some wals in the objectstorage this means etcd has been reset.