From d02d5c52a6d64bf436a6027348c0afd6775ba25c Mon Sep 17 00:00:00 2001 From: vegbir Date: Tue, 10 Sep 2024 16:50:22 +0800 Subject: [PATCH] rubik:exit when it failed to start nriInformer Signed-off-by: vegbir --- pkg/api/api.go | 3 +-- pkg/informer/apiserverinformer.go | 6 ++---- pkg/informer/nriinformer.go | 18 ++++++++++++------ pkg/rubik/rubik.go | 4 +--- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/pkg/api/api.go b/pkg/api/api.go index dc8254d..c903f95 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -52,6 +52,5 @@ type EventHandler interface { // Informer is an interface for external pod data sources to interact with rubik type Informer interface { Publisher - Start(ctx context.Context) - WaitReady() + Start(ctx context.Context) error } diff --git a/pkg/informer/apiserverinformer.go b/pkg/informer/apiserverinformer.go index 58ae00a..d5917f3 100644 --- a/pkg/informer/apiserverinformer.go +++ b/pkg/informer/apiserverinformer.go @@ -78,16 +78,14 @@ func InitKubeClient() (*kubernetes.Clientset, error) { return kubeClient, nil } -func (informer *APIServerInformer) WaitReady() { -} - // Start starts and enables PIServerInformer -func (informer *APIServerInformer) Start(ctx context.Context) { +func (informer *APIServerInformer) Start(ctx context.Context) error { const specNodeNameField = "spec.nodeName" // set options to return only pods on the current node. var fieldSelector = fields.OneTermEqualSelector(specNodeNameField, informer.nodeName).String() informer.listFunc(fieldSelector) informer.watchFunc(ctx, fieldSelector) + return nil } func (informer *APIServerInformer) listFunc(fieldSelector string) { diff --git a/pkg/informer/nriinformer.go b/pkg/informer/nriinformer.go index fb4744d..e3af51d 100644 --- a/pkg/informer/nriinformer.go +++ b/pkg/informer/nriinformer.go @@ -16,10 +16,12 @@ package informer import ( "context" + "fmt" "os" "github.com/containerd/nri/pkg/api" "github.com/containerd/nri/pkg/stub" + rubikapi "isula.org/rubik/pkg/api" "isula.org/rubik/pkg/common/constant" "isula.org/rubik/pkg/core/typedef" @@ -52,13 +54,17 @@ func NewNRIInformer(publisher rubikapi.Publisher) (rubikapi.Informer, error) { } // start nriplugin -func (plugin NRIInformer) Start(ctx context.Context) { - go plugin.stub.Run(ctx) -} - -// wait sync event finish -func (plugin NRIInformer) WaitReady() { +func (plugin NRIInformer) Start(ctx context.Context) error { + if err := plugin.stub.Start(ctx); err != nil { + return fmt.Errorf("failed to start nri informer: %v", err) + } <-plugin.finishedSync + + go func() { + plugin.stub.Wait() + plugin.stub.Stop() + }() + return nil } // nri sync event diff --git a/pkg/rubik/rubik.go b/pkg/rubik/rubik.go index a0dfa89..c402699 100644 --- a/pkg/rubik/rubik.go +++ b/pkg/rubik/rubik.go @@ -71,7 +71,6 @@ func (a *Agent) Run(ctx context.Context) error { if err := a.startInformer(ctx, informerName); err != nil { return err } - a.informer.WaitReady() if err := a.startServiceHandler(ctx); err != nil { return err } @@ -98,8 +97,7 @@ func (a *Agent) startInformer(ctx context.Context, informerName string) error { return fmt.Errorf("failed to subscribe informer: %v", err) } a.informer = i - i.Start(ctx) - return nil + return i.Start(ctx) } // stopInformer stops the informer -- Gitee