Skip to content

Commit

Permalink
Call AddToScheme in init() instead of during Controller creation (kna…
Browse files Browse the repository at this point in the history
…tive#365)

* Call AddToScheme in init()

The Scheme type maps are not protected from concurrent access, so they
should only be written to during initialization. Previously AddToScheme
was called every time a controller was created. This only caused
concurrent accesses in test runs with concurrent running controllers.

* Move AddToScheme to pkg/controller

Eliminates duplication in each controller package.
  • Loading branch information
grantr authored and mattmoor committed Mar 15, 2018
1 parent b06988f commit f7d663b
Show file tree
Hide file tree
Showing 8 changed files with 10 additions and 15 deletions.
2 changes: 2 additions & 0 deletions pkg/controller/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@ go_library(
deps = [
"//pkg/apis/ela/v1alpha1:go_default_library",
"//pkg/client/clientset/versioned:go_default_library",
"//pkg/client/clientset/versioned/scheme:go_default_library",
"//pkg/client/informers/externalversions:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
"//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library",
"//vendor/k8s.io/client-go/rest:go_default_library",
],
)
1 change: 0 additions & 1 deletion pkg/controller/configuration/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ go_library(
"//pkg/apis/ela:go_default_library",
"//pkg/apis/ela/v1alpha1:go_default_library",
"//pkg/client/clientset/versioned:go_default_library",
"//pkg/client/clientset/versioned/scheme:go_default_library",
"//pkg/client/informers/externalversions:go_default_library",
"//pkg/client/listers/ela/v1alpha1:go_default_library",
"//pkg/controller:go_default_library",
Expand Down
4 changes: 0 additions & 4 deletions pkg/controller/configuration/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ import (
"github.com/elafros/elafros/pkg/apis/ela"
"github.com/elafros/elafros/pkg/apis/ela/v1alpha1"
clientset "github.com/elafros/elafros/pkg/client/clientset/versioned"
elascheme "github.com/elafros/elafros/pkg/client/clientset/versioned/scheme"
informers "github.com/elafros/elafros/pkg/client/informers/externalversions"
listers "github.com/elafros/elafros/pkg/client/listers/ela/v1alpha1"
)
Expand Down Expand Up @@ -91,9 +90,6 @@ func NewController(
revisionInformer := elaInformerFactory.Elafros().V1alpha1().Revisions()

// Create event broadcaster
// Add ela types to the default Kubernetes Scheme so Events can be
// logged for ela types.
elascheme.AddToScheme(scheme.Scheme)
glog.V(4).Info("Creating event broadcaster")
eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartLogging(glog.Infof)
Expand Down
8 changes: 8 additions & 0 deletions pkg/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ package controller
import (
kubeinformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"

clientset "github.com/elafros/elafros/pkg/client/clientset/versioned"
elascheme "github.com/elafros/elafros/pkg/client/clientset/versioned/scheme"
informers "github.com/elafros/elafros/pkg/client/informers/externalversions"
)

Expand All @@ -30,3 +32,9 @@ type Interface interface {
}

type Constructor func(kubernetes.Interface, clientset.Interface, kubeinformers.SharedInformerFactory, informers.SharedInformerFactory, *rest.Config) Interface

func init() {
// Add ela types to the default Kubernetes Scheme so Events can be
// logged for ela types.
elascheme.AddToScheme(scheme.Scheme)
}
1 change: 0 additions & 1 deletion pkg/controller/revision/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ go_library(
"//pkg/apis/build/v1alpha1:go_default_library",
"//pkg/apis/ela/v1alpha1:go_default_library",
"//pkg/client/clientset/versioned:go_default_library",
"//pkg/client/clientset/versioned/scheme:go_default_library",
"//pkg/client/informers/externalversions:go_default_library",
"//pkg/client/listers/ela/v1alpha1:go_default_library",
"//pkg/controller:go_default_library",
Expand Down
4 changes: 0 additions & 4 deletions pkg/controller/revision/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ import (
buildv1alpha1 "github.com/elafros/elafros/pkg/apis/build/v1alpha1"
"github.com/elafros/elafros/pkg/apis/ela/v1alpha1"
clientset "github.com/elafros/elafros/pkg/client/clientset/versioned"
elascheme "github.com/elafros/elafros/pkg/client/clientset/versioned/scheme"
informers "github.com/elafros/elafros/pkg/client/informers/externalversions"
listers "github.com/elafros/elafros/pkg/client/listers/ela/v1alpha1"
"github.com/elafros/elafros/pkg/controller"
Expand Down Expand Up @@ -150,9 +149,6 @@ func NewController(
endpointsInformer := kubeInformerFactory.Core().V1().Endpoints()

// Create event broadcaster
// Add ela types to the default Kubernetes Scheme so Events can be
// logged for ela types.
elascheme.AddToScheme(scheme.Scheme)
glog.V(4).Info("Creating event broadcaster")
eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartLogging(glog.Infof)
Expand Down
1 change: 0 additions & 1 deletion pkg/controller/route/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ go_library(
"//pkg/apis/ela/v1alpha1:go_default_library",
"//pkg/apis/istio/v1alpha2:go_default_library",
"//pkg/client/clientset/versioned:go_default_library",
"//pkg/client/clientset/versioned/scheme:go_default_library",
"//pkg/client/informers/externalversions:go_default_library",
"//pkg/client/listers/ela/v1alpha1:go_default_library",
"//pkg/controller:go_default_library",
Expand Down
4 changes: 0 additions & 4 deletions pkg/controller/route/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ import (
"github.com/elafros/elafros/pkg/apis/ela"
"github.com/elafros/elafros/pkg/apis/ela/v1alpha1"
clientset "github.com/elafros/elafros/pkg/client/clientset/versioned"
elascheme "github.com/elafros/elafros/pkg/client/clientset/versioned/scheme"
informers "github.com/elafros/elafros/pkg/client/informers/externalversions"
listers "github.com/elafros/elafros/pkg/client/listers/ela/v1alpha1"
"github.com/elafros/elafros/pkg/controller"
Expand Down Expand Up @@ -124,9 +123,6 @@ func NewController(
configInformer := elaInformerFactory.Elafros().V1alpha1().Configurations()

// Create event broadcaster
// Add ela types to the default Kubernetes Scheme so Events can be
// logged for ela types.
elascheme.AddToScheme(scheme.Scheme)
glog.V(4).Info("Creating event broadcaster")
eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartLogging(glog.Infof)
Expand Down

0 comments on commit f7d663b

Please sign in to comment.