From 512162bf98c91b24b2ed85c77e47c4d590ac1e3e Mon Sep 17 00:00:00 2001 From: Simone Gotti Date: Wed, 17 Jul 2019 17:05:35 +0200 Subject: [PATCH] datamanager: clean etcd data before reinitialization --- internal/datamanager/wal.go | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/internal/datamanager/wal.go b/internal/datamanager/wal.go index c9a8a14..d98e2d0 100644 --- a/internal/datamanager/wal.go +++ b/internal/datamanager/wal.go @@ -962,7 +962,26 @@ func (d *DataManager) InitEtcd(ctx context.Context) error { } defer func() { _ = m.Unlock(ctx) }() - // Create changegroup min revision if it doesn't exists + mustInit := false + + _, err = d.e.Get(ctx, etcdWalsDataKey, 0) + if err != nil { + if err != etcd.ErrKeyNotFound { + return err + } + mustInit = true + } + + if mustInit { + d.log.Infof("no data found in etcd, initializing") + + // delete all wals from etcd + if err := d.deleteEtcd(ctx); err != nil { + return err + } + } + + // Always create changegroup min revision if it doesn't exists cmp := []etcdclientv3.Cmp{} then := []etcdclientv3.Op{} @@ -973,16 +992,10 @@ func (d *DataManager) InitEtcd(ctx context.Context) error { return etcd.FromEtcdError(err) } - _, err = d.e.Get(ctx, etcdWalsDataKey, 0) - if err != nil && err != etcd.ErrKeyNotFound { - return err - } - if err == nil { + if !mustInit { return nil } - d.log.Infof("no data found in etcd, initializing") - // walsdata not found in etcd // if there're some wals in the objectstorage this means etcd has been reset. @@ -1055,7 +1068,7 @@ func (d *DataManager) InitEtcd(ctx context.Context) error { return etcd.FromEtcdError(err) } if !tresp.Succeeded { - return errors.Errorf("failed to sync etcd: waldata already written") + return errors.Errorf("failed to sync etcd: walsdata already written") } return nil