Adding support for waitgroup to the Startuphooks (#3654)

The startup hooks where executing after the deploy controller. We needed the deploy controller to wait until the startup hooks had completed.
This commit is contained in:
Jamie Phillips 2021-07-15 22:28:47 -04:00 committed by GitHub
parent ad28d18b19
commit aef8a6aafd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 3 deletions

View File

@ -2,6 +2,7 @@ package cmds
import (
"context"
"sync"
"github.com/rancher/k3s/pkg/version"
"github.com/urfave/cli"
@ -63,7 +64,7 @@ type Server struct {
ClusterResetRestorePath string
EncryptSecrets bool
SystemDefaultRegistry string
StartupHooks []func(context.Context, <-chan struct{}, string) error
StartupHooks []func(context.Context, *sync.WaitGroup, <-chan struct{}, string) error
EtcdSnapshotName string
EtcdDisableSnapshots bool
EtcdExposeMetrics bool

View File

@ -10,6 +10,7 @@ import (
"path/filepath"
"strconv"
"strings"
"sync"
"time"
corev1 "k8s.io/api/core/v1"
@ -69,8 +70,10 @@ func StartServer(ctx context.Context, config *Config) error {
go startOnAPIServerReady(ctx, config)
}
config.StartupHooksWg = &sync.WaitGroup{}
config.StartupHooksWg.Add(len(config.StartupHooks))
for _, hook := range config.StartupHooks {
if err := hook(ctx, config.ControlConfig.Runtime.APIServerReady, config.ControlConfig.Runtime.KubeConfigAdmin); err != nil {
if err := hook(ctx, config.StartupHooksWg, config.ControlConfig.Runtime.APIServerReady, config.ControlConfig.Runtime.KubeConfigAdmin); err != nil {
return errors.Wrap(err, "startup hook")
}
}
@ -111,6 +114,7 @@ func runControllers(ctx context.Context, config *Config) error {
return err
}
config.StartupHooksWg.Wait()
if err := stageFiles(ctx, sc, controlConfig); err != nil {
return err
}

View File

@ -2,6 +2,7 @@ package server
import (
"context"
"sync"
"github.com/rancher/k3s/pkg/daemons/config"
)
@ -12,7 +13,8 @@ type Config struct {
ControlConfig config.Control
Rootless bool
SupervisorPort int
StartupHooks []func(context.Context, <-chan struct{}, string) error
StartupHooks []func(context.Context, *sync.WaitGroup, <-chan struct{}, string) error
StartupHooksWg *sync.WaitGroup
LeaderControllers CustomControllers
Controllers CustomControllers
}