Unverified Commit d71b3358 authored by Hussein Galal's avatar Hussein Galal Committed by GitHub

Fix snapshot restoration on fresh nodes (#4737)

parent bf4e037f
...@@ -174,6 +174,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont ...@@ -174,6 +174,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont
serverConfig.ControlConfig.DisableScheduler = true serverConfig.ControlConfig.DisableScheduler = true
serverConfig.ControlConfig.DisableCCM = true serverConfig.ControlConfig.DisableCCM = true
close(agentReady)
dataDir, err := datadir.LocalHome(cfg.DataDir, false) dataDir, err := datadir.LocalHome(cfg.DataDir, false)
if err != nil { if err != nil {
return err return err
......
...@@ -311,12 +311,11 @@ const systemTimeSkew = int64(3) ...@@ -311,12 +311,11 @@ const systemTimeSkew = int64(3)
// isMigrated checks to see if the given bootstrap data // isMigrated checks to see if the given bootstrap data
// is in the latest format. // is in the latest format.
func isMigrated(buf io.ReadSeeker) bool { func isMigrated(buf io.ReadSeeker, files *bootstrap.PathsDataformat) bool {
buf.Seek(0, 0) buf.Seek(0, 0)
defer 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 // This will fail if data is being pulled from old an cluster since
// older clusters used a map[string][]byte for the data structure. // older clusters used a map[string][]byte for the data structure.
// Therefore, we need to perform a migration to the newer bootstrap // 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, ...@@ -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 // from an older version of k3s. That version might not have the new data format
// and we should write the correct format. // and we should write the correct format.
files := make(bootstrap.PathsDataformat) files := make(bootstrap.PathsDataformat)
if !isMigrated(buf) { if !isMigrated(buf, &files) {
if err := migrateBootstrapData(ctx, buf, files); err != nil { if err := migrateBootstrapData(ctx, buf, files); err != nil {
return err return err
} }
...@@ -423,7 +422,7 @@ func (c *Cluster) ReconcileBootstrapData(ctx context.Context, buf io.ReadSeeker, ...@@ -423,7 +422,7 @@ func (c *Cluster) ReconcileBootstrapData(ctx context.Context, buf io.ReadSeeker,
} }
files := make(bootstrap.PathsDataformat) files := make(bootstrap.PathsDataformat)
if !isMigrated(buf) { if !isMigrated(buf, &files) {
if err := migrateBootstrapData(ctx, buf, files); err != nil { if err := migrateBootstrapData(ctx, buf, files); err != nil {
return err return err
} }
......
...@@ -198,6 +198,11 @@ func (e *ETCD) Reset(ctx context.Context, rebootstrap func() error) error { ...@@ -198,6 +198,11 @@ func (e *ETCD) Reset(ctx context.Context, rebootstrap func() error) error {
t := time.NewTicker(5 * time.Second) t := time.NewTicker(5 * time.Second)
defer t.Stop() defer t.Stop()
for range t.C { 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 { if err := e.Test(ctx); err == nil {
members, err := e.client.MemberList(ctx) members, err := e.client.MemberList(ctx)
if err != nil { if err != nil {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment