From d71b3358714711c2f95bc6cc6020320b6f6e5f0f Mon Sep 17 00:00:00 2001 From: Hussein Galal Date: Tue, 14 Dec 2021 02:04:39 +0200 Subject: [PATCH] Fix snapshot restoration on fresh nodes (#4737) Signed-off-by: galal-hussein --- pkg/cli/server/server.go | 1 + pkg/cluster/bootstrap.go | 9 ++++----- pkg/etcd/etcd.go | 5 +++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pkg/cli/server/server.go b/pkg/cli/server/server.go index 77a683c801..e28fdfa944 100644 --- a/pkg/cli/server/server.go +++ b/pkg/cli/server/server.go @@ -174,6 +174,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont serverConfig.ControlConfig.DisableScheduler = true serverConfig.ControlConfig.DisableCCM = true + close(agentReady) dataDir, err := datadir.LocalHome(cfg.DataDir, false) if err != nil { return err diff --git a/pkg/cluster/bootstrap.go b/pkg/cluster/bootstrap.go index a10cb75935..dac6dec27c 100644 --- a/pkg/cluster/bootstrap.go +++ b/pkg/cluster/bootstrap.go @@ -311,12 +311,11 @@ const systemTimeSkew = int64(3) // isMigrated checks to see if the given bootstrap data // is in the latest format. -func isMigrated(buf io.ReadSeeker) bool { +func isMigrated(buf io.ReadSeeker, files *bootstrap.PathsDataformat) bool { buf.Seek(0, 0) defer buf.Seek(0, 0) - files := make(bootstrap.PathsDataformat) - if err := json.NewDecoder(buf).Decode(&files); err != nil { + if err := json.NewDecoder(buf).Decode(files); err != nil { // This will fail if data is being pulled from old an cluster since // older clusters used a map[string][]byte for the data structure. // Therefore, we need to perform a migration to the newer bootstrap @@ -342,7 +341,7 @@ func (c *Cluster) ReconcileBootstrapData(ctx context.Context, buf io.ReadSeeker, // from an older version of k3s. That version might not have the new data format // and we should write the correct format. files := make(bootstrap.PathsDataformat) - if !isMigrated(buf) { + if !isMigrated(buf, &files) { if err := migrateBootstrapData(ctx, buf, files); err != nil { return err } @@ -423,7 +422,7 @@ func (c *Cluster) ReconcileBootstrapData(ctx context.Context, buf io.ReadSeeker, } files := make(bootstrap.PathsDataformat) - if !isMigrated(buf) { + if !isMigrated(buf, &files) { if err := migrateBootstrapData(ctx, buf, files); err != nil { return err } diff --git a/pkg/etcd/etcd.go b/pkg/etcd/etcd.go index 73ec497993..9f029edcd7 100644 --- a/pkg/etcd/etcd.go +++ b/pkg/etcd/etcd.go @@ -198,6 +198,11 @@ func (e *ETCD) Reset(ctx context.Context, rebootstrap func() error) error { t := time.NewTicker(5 * time.Second) defer t.Stop() for range t.C { + // resetting the apiaddresses to nil since we are doing a restoration + if _, err := e.client.Put(ctx, AddressKey, ""); err != nil { + logrus.Warnf("failed to reset api addresses key in etcd: %v", err) + continue + } if err := e.Test(ctx); err == nil { members, err := e.client.MemberList(ctx) if err != nil {