This is an automated email from the ASF dual-hosted git repository.
chia7712 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-k8shim.git
The following commit(s) were added to refs/heads/master by this push:
new 3ce745ef [YUNIKORN-2651] Update the unchecked error for make lint
warnings (#850)
3ce745ef is described below
commit 3ce745ef9c0af75751f402a939e138846844c844
Author: YUN SUN <[email protected]>
AuthorDate: Tue Jun 4 16:38:15 2024 +0800
[YUNIKORN-2651] Update the unchecked error for make lint warnings (#850)
Closes: #850
Signed-off-by: Chia-Ping Tsai <[email protected]>
---
.golangci.yml | 2 ++
pkg/admission/conf/am_conf.go | 9 ++++++--
pkg/admission/namespace_cache.go | 11 +++++++---
pkg/admission/namespace_cache_test.go | 6 ++++--
pkg/admission/priority_class_cache.go | 11 +++++++---
pkg/admission/priority_class_cache_test.go | 6 ++++--
pkg/cache/context.go | 33 +++++++++++++++++++++++------
pkg/client/apifactory.go | 32 ++++++++++++++++++----------
pkg/client/apifactory_mock.go | 7 ++++--
pkg/cmd/admissioncontroller/main.go | 18 +++++++++++++---
pkg/shim/scheduler_mock_test.go | 4 ----
test/e2e/framework/helpers/k8s/k8s_utils.go | 8 ++++++-
12 files changed, 108 insertions(+), 39 deletions(-)
diff --git a/.golangci.yml b/.golangci.yml
index 2d9bbc30..179df382 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -35,6 +35,8 @@ linters-settings:
local-prefixes: github.com/apache/yunikorn
govet:
check-shadowing: true
+ goconst:
+ min-occurrences: 5
funlen:
lines: 120
statements: 80
diff --git a/pkg/admission/conf/am_conf.go b/pkg/admission/conf/am_conf.go
index 154df9ce..f375af5e 100644
--- a/pkg/admission/conf/am_conf.go
+++ b/pkg/admission/conf/am_conf.go
@@ -117,8 +117,13 @@ func NewAdmissionControllerConf(configMaps
[]*v1.ConfigMap) *AdmissionController
return acc
}
-func (acc *AdmissionControllerConf) RegisterHandlers(configMaps
informersv1.ConfigMapInformer) {
- configMaps.Informer().AddEventHandler(&configMapUpdateHandler{conf:
acc})
+func (acc *AdmissionControllerConf) RegisterHandlers(configMaps
informersv1.ConfigMapInformer) error {
+ _, err :=
configMaps.Informer().AddEventHandler(&configMapUpdateHandler{conf: acc})
+ if err != nil {
+ return fmt.Errorf("failed to create register handlers: %w", err)
+ }
+
+ return nil
}
func (acc *AdmissionControllerConf) GetNamespace() string {
diff --git a/pkg/admission/namespace_cache.go b/pkg/admission/namespace_cache.go
index c5ff8065..963ffc27 100644
--- a/pkg/admission/namespace_cache.go
+++ b/pkg/admission/namespace_cache.go
@@ -19,6 +19,8 @@
package admission
import (
+ "fmt"
+
v1 "k8s.io/api/core/v1"
informersv1 "k8s.io/client-go/informers/core/v1"
"k8s.io/client-go/tools/cache"
@@ -53,14 +55,17 @@ type nsFlags struct {
}
// NewNamespaceCache creates a new cache and registers the handler for the
cache with the Informer.
-func NewNamespaceCache(namespaces informersv1.NamespaceInformer)
*NamespaceCache {
+func NewNamespaceCache(namespaces informersv1.NamespaceInformer)
(*NamespaceCache, error) {
nsc := &NamespaceCache{
nameSpaces: make(map[string]nsFlags),
}
if namespaces != nil {
-
namespaces.Informer().AddEventHandler(&namespaceUpdateHandler{cache: nsc})
+ _, err :=
namespaces.Informer().AddEventHandler(&namespaceUpdateHandler{cache: nsc})
+ if err != nil {
+ return nil, fmt.Errorf("failed to create namespace
cache: %w", err)
+ }
}
- return nsc
+ return nsc, nil
}
// enableYuniKorn returns the value for the enableYuniKorn flag (tri-state
UNSET, TRUE or FALSE) for the namespace.
diff --git a/pkg/admission/namespace_cache_test.go
b/pkg/admission/namespace_cache_test.go
index 792a2fcd..5d9e2bcd 100644
--- a/pkg/admission/namespace_cache_test.go
+++ b/pkg/admission/namespace_cache_test.go
@@ -35,7 +35,8 @@ import (
const testNS = "test-ns"
func TestFlags(t *testing.T) {
- cache := NewNamespaceCache(nil)
+ cache, nsErr := NewNamespaceCache(nil)
+ assert.NilError(t, nsErr)
cache.nameSpaces["notset"] = nsFlags{
enableYuniKorn: UNSET,
generateAppID: UNSET,
@@ -69,7 +70,8 @@ func TestNamespaceHandlers(t *testing.T) {
kubeClient := client.NewKubeClientMock(false)
informers := NewInformers(kubeClient, "default")
- cache := NewNamespaceCache(informers.Namespace)
+ cache, nsErr := NewNamespaceCache(informers.Namespace)
+ assert.NilError(t, nsErr)
informers.Start()
defer informers.Stop()
diff --git a/pkg/admission/priority_class_cache.go
b/pkg/admission/priority_class_cache.go
index b640ce83..87a4dd87 100644
--- a/pkg/admission/priority_class_cache.go
+++ b/pkg/admission/priority_class_cache.go
@@ -19,6 +19,8 @@
package admission
import (
+ "fmt"
+
schedulingv1 "k8s.io/api/scheduling/v1"
informersv1 "k8s.io/client-go/informers/scheduling/v1"
"k8s.io/client-go/tools/cache"
@@ -36,14 +38,17 @@ type PriorityClassCache struct {
}
// NewPriorityClassCache creates a new cache and registers the handler for the
cache with the Informer.
-func NewPriorityClassCache(priorityClasses informersv1.PriorityClassInformer)
*PriorityClassCache {
+func NewPriorityClassCache(priorityClasses informersv1.PriorityClassInformer)
(*PriorityClassCache, error) {
pcc := &PriorityClassCache{
priorityClasses: make(map[string]bool),
}
if priorityClasses != nil {
-
priorityClasses.Informer().AddEventHandler(&priorityClassUpdateHandler{cache:
pcc})
+ _, err :=
priorityClasses.Informer().AddEventHandler(&priorityClassUpdateHandler{cache:
pcc})
+ if err != nil {
+ return nil, fmt.Errorf("failed to create a new cache
and register the handler: %w", err)
+ }
}
- return pcc
+ return pcc, nil
}
// isPreemptSelfAllowed returns the preemption value. Only returns false if
configured.
diff --git a/pkg/admission/priority_class_cache_test.go
b/pkg/admission/priority_class_cache_test.go
index 0fe287af..de755eb5 100644
--- a/pkg/admission/priority_class_cache_test.go
+++ b/pkg/admission/priority_class_cache_test.go
@@ -35,7 +35,8 @@ import (
const testPC = "test-pc"
func TestIsPreemptSelfAllowed(t *testing.T) {
- cache := NewPriorityClassCache(nil)
+ cache, pcErr := NewPriorityClassCache(nil)
+ assert.NilError(t, pcErr)
cache.priorityClasses["yes"] = true
cache.priorityClasses["no"] = false
@@ -49,7 +50,8 @@ func TestPriorityClassHandlers(t *testing.T) {
kubeClient := client.NewKubeClientMock(false)
informers := NewInformers(kubeClient, "default")
- cache := NewPriorityClassCache(informers.PriorityClass)
+ cache, pcErr := NewPriorityClassCache(informers.PriorityClass)
+ assert.NilError(t, pcErr)
informers.Start()
defer informers.Stop()
diff --git a/pkg/cache/context.go b/pkg/cache/context.go
index 20036eec..a59b224e 100644
--- a/pkg/cache/context.go
+++ b/pkg/cache/context.go
@@ -111,33 +111,50 @@ func NewContextWithBootstrapConfigMaps(apis
client.APIProvider, bootstrapConfigM
return ctx
}
-func (ctx *Context) AddSchedulingEventHandlers() {
- ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
+func (ctx *Context) AddSchedulingEventHandlers() error {
+ err := ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
Type: client.ConfigMapInformerHandlers,
FilterFn: ctx.filterConfigMaps,
AddFn: ctx.addConfigMaps,
UpdateFn: ctx.updateConfigMaps,
DeleteFn: ctx.deleteConfigMaps,
})
- ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
+ if err != nil {
+ return err
+ }
+
+ err = ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
Type: client.PriorityClassInformerHandlers,
FilterFn: ctx.filterPriorityClasses,
AddFn: ctx.addPriorityClass,
UpdateFn: ctx.updatePriorityClass,
DeleteFn: ctx.deletePriorityClass,
})
- ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
+ if err != nil {
+ return err
+ }
+
+ err = ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
Type: client.NodeInformerHandlers,
AddFn: ctx.addNode,
UpdateFn: ctx.updateNode,
DeleteFn: ctx.deleteNode,
})
- ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
+ if err != nil {
+ return err
+ }
+
+ err = ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
Type: client.PodInformerHandlers,
AddFn: ctx.AddPod,
UpdateFn: ctx.UpdatePod,
DeleteFn: ctx.DeletePod,
})
+ if err != nil {
+ return err
+ }
+
+ return nil
}
func (ctx *Context) IsPluginMode() bool {
@@ -1449,7 +1466,11 @@ func (ctx *Context) InitializeState() error {
// Step 5: Start scheduling event handlers. At this point,
initialization is mostly complete, and any existing
// objects will show up as newly added objects. Since the add/update
event handlers are idempotent, this is fine.
- ctx.AddSchedulingEventHandlers()
+ err = ctx.AddSchedulingEventHandlers()
+ if err != nil {
+ log.Log(log.Admission).Error("failed to add scheduling event
handlers", zap.Error(err))
+ return err
+ }
// Step 6: Finalize priority classes. Between the start of
initialization and when the informer event handlers are
// registered, it is possible that a priority class object was deleted.
Process them again and remove
diff --git a/pkg/client/apifactory.go b/pkg/client/apifactory.go
index 62bdcb20..beedfbd9 100644
--- a/pkg/client/apifactory.go
+++ b/pkg/client/apifactory.go
@@ -19,6 +19,7 @@
package client
import (
+ "fmt"
"time"
"go.uber.org/zap"
@@ -53,7 +54,7 @@ func (t Type) String() string {
type APIProvider interface {
GetAPIs() *Clients
- AddEventHandler(handlers *ResourceEventHandlers)
+ AddEventHandler(handlers *ResourceEventHandlers) error
Start()
Stop()
WaitForSync()
@@ -143,7 +144,7 @@ func (s *APIFactory) IsTestingMode() bool {
return s.testMode
}
-func (s *APIFactory) AddEventHandler(handlers *ResourceEventHandlers) {
+func (s *APIFactory) AddEventHandler(handlers *ResourceEventHandlers) error {
s.lock.Lock()
defer s.lock.Unlock()
// register all handlers
@@ -166,34 +167,43 @@ func (s *APIFactory) AddEventHandler(handlers
*ResourceEventHandlers) {
}
log.Log(log.ShimClient).Info("registering event handler",
zap.Stringer("type", handlers.Type))
- s.addEventHandlers(handlers.Type, h, 0)
+ if err := s.addEventHandlers(handlers.Type, h, 0); err != nil {
+ return fmt.Errorf("failed to initialize event handlers: %w",
err)
+ }
+ return nil
}
func (s *APIFactory) addEventHandlers(
- handlerType Type, handler cache.ResourceEventHandler, resyncPeriod
time.Duration) {
+ handlerType Type, handler cache.ResourceEventHandler, resyncPeriod
time.Duration) error {
+ var err error
switch handlerType {
case PodInformerHandlers:
- s.GetAPIs().PodInformer.Informer().
+ _, err = s.GetAPIs().PodInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
case NodeInformerHandlers:
- s.GetAPIs().NodeInformer.Informer().
+ _, err = s.GetAPIs().NodeInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
case ConfigMapInformerHandlers:
- s.GetAPIs().ConfigMapInformer.Informer().
+ _, err = s.GetAPIs().ConfigMapInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
case StorageInformerHandlers:
- s.GetAPIs().StorageInformer.Informer().
+ _, err = s.GetAPIs().StorageInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
case PVInformerHandlers:
- s.GetAPIs().PVInformer.Informer().
+ _, err = s.GetAPIs().PVInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
case PVCInformerHandlers:
- s.GetAPIs().PVCInformer.Informer().
+ _, err = s.GetAPIs().PVCInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
case PriorityClassInformerHandlers:
- s.GetAPIs().PriorityClassInformer.Informer().
+ _, err = s.GetAPIs().PriorityClassInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
}
+
+ if err != nil {
+ return fmt.Errorf("failed to add event handlers: %w", err)
+ }
+ return nil
}
func (s *APIFactory) WaitForSync() {
diff --git a/pkg/client/apifactory_mock.go b/pkg/client/apifactory_mock.go
index 73392390..fee2d257 100644
--- a/pkg/client/apifactory_mock.go
+++ b/pkg/client/apifactory_mock.go
@@ -19,6 +19,7 @@
package client
import (
+ "fmt"
"time"
"go.uber.org/zap"
@@ -219,16 +220,18 @@ func (m *MockedAPIProvider) IsTestingMode() bool {
return true
}
-func (m *MockedAPIProvider) AddEventHandler(handlers *ResourceEventHandlers) {
+func (m *MockedAPIProvider) AddEventHandler(handlers *ResourceEventHandlers)
error {
m.Lock()
defer m.Unlock()
if !m.running {
- return
+ return fmt.Errorf("mocked API provider is not running")
}
m.eventHandler <- handlers
log.Log(log.Test).Info("registering event handler",
zap.Stringer("type", handlers.Type))
+
+ return nil
}
func (m *MockedAPIProvider) RunEventHandler() {
diff --git a/pkg/cmd/admissioncontroller/main.go
b/pkg/cmd/admissioncontroller/main.go
index 815f9294..08f2771e 100644
--- a/pkg/cmd/admissioncontroller/main.go
+++ b/pkg/cmd/admissioncontroller/main.go
@@ -62,9 +62,21 @@ func main() {
kubeClient := client.NewKubeClient(amConf.GetKubeConfig())
informers := admission.NewInformers(kubeClient, amConf.GetNamespace())
- amConf.RegisterHandlers(informers.ConfigMap)
- pcCache := admission.NewPriorityClassCache(informers.PriorityClass)
- nsCache := admission.NewNamespaceCache(informers.Namespace)
+
+ if hadlerErr := amConf.RegisterHandlers(informers.ConfigMap); hadlerErr
!= nil {
+ log.Log(log.Admission).Fatal("Failed to register handlers",
zap.Error(hadlerErr))
+ return
+ }
+ pcCache, pcErr :=
admission.NewPriorityClassCache(informers.PriorityClass)
+ if pcErr != nil {
+ log.Log(log.Admission).Fatal("Failed to create new priority
class cache", zap.Error(pcErr))
+ return
+ }
+ nsCache, nsErr := admission.NewNamespaceCache(informers.Namespace)
+ if nsErr != nil {
+ log.Log(log.Admission).Fatal("Failed to create namespace
cache", zap.Error(nsErr))
+ return
+ }
informers.Start()
wm, err := admission.NewWebhookManager(amConf)
diff --git a/pkg/shim/scheduler_mock_test.go b/pkg/shim/scheduler_mock_test.go
index 6b6b9af6..1bbe5f02 100644
--- a/pkg/shim/scheduler_mock_test.go
+++ b/pkg/shim/scheduler_mock_test.go
@@ -162,10 +162,6 @@ func (fc *MockScheduler) waitAndAssertApplicationState(t
*testing.T, appID, expe
}
}
-func (fc *MockScheduler) removeApplication(appId string) error {
- return fc.context.RemoveApplication(appId)
-}
-
func (fc *MockScheduler) waitAndAssertTaskState(t *testing.T, appID, taskID,
expectedState string) {
app := fc.context.GetApplication(appID)
assert.Equal(t, app != nil, true)
diff --git a/test/e2e/framework/helpers/k8s/k8s_utils.go
b/test/e2e/framework/helpers/k8s/k8s_utils.go
index 92fb07a8..77a472f5 100644
--- a/test/e2e/framework/helpers/k8s/k8s_utils.go
+++ b/test/e2e/framework/helpers/k8s/k8s_utils.go
@@ -32,6 +32,7 @@ import (
"github.com/onsi/ginkgo/v2"
"github.com/onsi/gomega"
+ "go.uber.org/zap"
appsv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1"
v1 "k8s.io/api/core/v1"
@@ -58,6 +59,7 @@ import (
"github.com/apache/yunikorn-k8shim/pkg/common/constants"
"github.com/apache/yunikorn-k8shim/pkg/common/utils"
"github.com/apache/yunikorn-k8shim/pkg/locking"
+ "github.com/apache/yunikorn-k8shim/pkg/log"
"github.com/apache/yunikorn-k8shim/test/e2e/framework/configmanager"
"github.com/apache/yunikorn-k8shim/test/e2e/framework/helpers/common"
)
@@ -716,7 +718,11 @@ func (k *KubeCtl) StartConfigMapInformer(namespace string,
stopChan <-chan struc
informerFactory :=
informers.NewSharedInformerFactoryWithOptions(k.clientSet, 0,
informers.WithNamespace(namespace))
informerFactory.Start(stopChan)
configMapInformer := informerFactory.Core().V1().ConfigMaps()
- configMapInformer.Informer().AddEventHandler(eventHandler)
+ _, err := configMapInformer.Informer().AddEventHandler(eventHandler)
+ if err != nil {
+ log.Log(log.AdmissionConf).Error("Error adding event handler",
zap.Error(err))
+ return err
+ }
go configMapInformer.Informer().Run(stopChan)
if err := utils.WaitForCondition(func() bool {
return configMapInformer.Informer().HasSynced()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]