Commit bd912f50 authored by Andy Goldstein's avatar Andy Goldstein

statefulset: use pvc lister, replace legacylisters

Use a PVC lister instead of a client when retrieving PVCs. Replace unit test's use of legacylisters with the generated listers.
parent 70a26852
...@@ -32,6 +32,7 @@ func startStatefulSetController(ctx ControllerContext) (bool, error) { ...@@ -32,6 +32,7 @@ func startStatefulSetController(ctx ControllerContext) (bool, error) {
go statefulset.NewStatefulSetController( go statefulset.NewStatefulSetController(
ctx.NewInformerFactory.Core().V1().Pods(), ctx.NewInformerFactory.Core().V1().Pods(),
ctx.NewInformerFactory.Apps().V1beta1().StatefulSets(), ctx.NewInformerFactory.Apps().V1beta1().StatefulSets(),
ctx.NewInformerFactory.Core().V1().PersistentVolumeClaims(),
ctx.ClientBuilder.ClientOrDie("statefulset-controller"), ctx.ClientBuilder.ClientOrDie("statefulset-controller"),
).Run(1, ctx.Stop) ).Run(1, ctx.Stop)
return true, nil return true, nil
......
...@@ -575,6 +575,7 @@ function start_kubelet { ...@@ -575,6 +575,7 @@ function start_kubelet {
fi fi
sudo -E "${GO_OUT}/hyperkube" kubelet ${priv_arg}\ sudo -E "${GO_OUT}/hyperkube" kubelet ${priv_arg}\
--enable-cri=false \
--v=${LOG_LEVEL} \ --v=${LOG_LEVEL} \
--chaos-chance="${CHAOS_CHANCE}" \ --chaos-chance="${CHAOS_CHANCE}" \
--container-runtime="${CONTAINER_RUNTIME}" \ --container-runtime="${CONTAINER_RUNTIME}" \
......
...@@ -62,7 +62,6 @@ go_test( ...@@ -62,7 +62,6 @@ go_test(
"//pkg/client/informers/informers_generated/externalversions:go_default_library", "//pkg/client/informers/informers_generated/externalversions:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/apps/v1beta1:go_default_library", "//pkg/client/informers/informers_generated/externalversions/apps/v1beta1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library", "//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library",
"//pkg/client/legacylisters:go_default_library",
"//pkg/client/listers/apps/v1beta1:go_default_library", "//pkg/client/listers/apps/v1beta1:go_default_library",
"//pkg/client/listers/core/v1:go_default_library", "//pkg/client/listers/core/v1:go_default_library",
"//pkg/controller:go_default_library", "//pkg/controller:go_default_library",
......
...@@ -21,7 +21,6 @@ import ( ...@@ -21,7 +21,6 @@ import (
"strings" "strings"
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
errorutils "k8s.io/apimachinery/pkg/util/errors" errorutils "k8s.io/apimachinery/pkg/util/errors"
utilruntime "k8s.io/apimachinery/pkg/util/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/api"
...@@ -56,8 +55,14 @@ type StatefulPodControlInterface interface { ...@@ -56,8 +55,14 @@ type StatefulPodControlInterface interface {
UpdateStatefulSetReplicas(set *apps.StatefulSet, replicas int32) error UpdateStatefulSetReplicas(set *apps.StatefulSet, replicas int32) error
} }
func NewRealStatefulPodControl(client clientset.Interface, setLister appslisters.StatefulSetLister, podLister corelisters.PodLister, recorder record.EventRecorder) StatefulPodControlInterface { func NewRealStatefulPodControl(
return &realStatefulPodControl{client, setLister, podLister, recorder} client clientset.Interface,
setLister appslisters.StatefulSetLister,
podLister corelisters.PodLister,
pvcLister corelisters.PersistentVolumeClaimLister,
recorder record.EventRecorder,
) StatefulPodControlInterface {
return &realStatefulPodControl{client, setLister, podLister, pvcLister, recorder}
} }
// realStatefulPodControl implements StatefulPodControlInterface using a clientset.Interface to communicate with the // realStatefulPodControl implements StatefulPodControlInterface using a clientset.Interface to communicate with the
...@@ -66,6 +71,7 @@ type realStatefulPodControl struct { ...@@ -66,6 +71,7 @@ type realStatefulPodControl struct {
client clientset.Interface client clientset.Interface
setLister appslisters.StatefulSetLister setLister appslisters.StatefulSetLister
podLister corelisters.PodLister podLister corelisters.PodLister
pvcLister corelisters.PersistentVolumeClaimLister
recorder record.EventRecorder recorder record.EventRecorder
} }
...@@ -209,18 +215,19 @@ func (spc *realStatefulPodControl) recordClaimEvent(verb string, set *apps.State ...@@ -209,18 +215,19 @@ func (spc *realStatefulPodControl) recordClaimEvent(verb string, set *apps.State
func (spc *realStatefulPodControl) createPersistentVolumeClaims(set *apps.StatefulSet, pod *v1.Pod) error { func (spc *realStatefulPodControl) createPersistentVolumeClaims(set *apps.StatefulSet, pod *v1.Pod) error {
var errs []error var errs []error
for _, claim := range getPersistentVolumeClaims(set, pod) { for _, claim := range getPersistentVolumeClaims(set, pod) {
_, err := spc.client.Core().PersistentVolumeClaims(claim.Namespace).Get(claim.Name, metav1.GetOptions{}) _, err := spc.pvcLister.PersistentVolumeClaims(claim.Namespace).Get(claim.Name)
if err != nil { switch {
if apierrors.IsNotFound(err) { case apierrors.IsNotFound(err):
_, err := spc.client.Core().PersistentVolumeClaims(claim.Namespace).Create(&claim) _, err := spc.client.Core().PersistentVolumeClaims(claim.Namespace).Create(&claim)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("Failed to create PVC %s: %s", claim.Name, err)) errs = append(errs, fmt.Errorf("Failed to create PVC %s: %s", claim.Name, err))
} }
spc.recordClaimEvent("create", set, pod, &claim, err) if err == nil || !apierrors.IsAlreadyExists(err) {
} else {
errs = append(errs, fmt.Errorf("Failed to retrieve PVC %s: %s", claim.Name, err))
spc.recordClaimEvent("create", set, pod, &claim, err) spc.recordClaimEvent("create", set, pod, &claim, err)
} }
case err != nil:
errs = append(errs, fmt.Errorf("Failed to retrieve PVC %s: %s", claim.Name, err))
spc.recordClaimEvent("create", set, pod, &claim, err)
} }
// TODO: Check resource requirements and accessmodes, update if necessary // TODO: Check resource requirements and accessmodes, update if necessary
} }
......
...@@ -72,6 +72,7 @@ type StatefulSetController struct { ...@@ -72,6 +72,7 @@ type StatefulSetController struct {
func NewStatefulSetController( func NewStatefulSetController(
podInformer coreinformers.PodInformer, podInformer coreinformers.PodInformer,
setInformer appsinformers.StatefulSetInformer, setInformer appsinformers.StatefulSetInformer,
pvcInformer coreinformers.PersistentVolumeClaimInformer,
kubeClient clientset.Interface, kubeClient clientset.Interface,
) *StatefulSetController { ) *StatefulSetController {
eventBroadcaster := record.NewBroadcaster() eventBroadcaster := record.NewBroadcaster()
...@@ -81,8 +82,16 @@ func NewStatefulSetController( ...@@ -81,8 +82,16 @@ func NewStatefulSetController(
ssc := &StatefulSetController{ ssc := &StatefulSetController{
kubeClient: kubeClient, kubeClient: kubeClient,
control: NewDefaultStatefulSetControl(NewRealStatefulPodControl(kubeClient, setInformer.Lister(), podInformer.Lister(), recorder)), control: NewDefaultStatefulSetControl(
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "statefulset"), NewRealStatefulPodControl(
kubeClient,
setInformer.Lister(),
podInformer.Lister(),
pvcInformer.Lister(),
recorder,
),
),
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "statefulset"),
} }
podInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ podInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
......
...@@ -34,7 +34,6 @@ import ( ...@@ -34,7 +34,6 @@ import (
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions" informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions"
appsinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/apps/v1beta1" appsinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/apps/v1beta1"
coreinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1" coreinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1"
listers "k8s.io/kubernetes/pkg/client/legacylisters"
appslisters "k8s.io/kubernetes/pkg/client/listers/apps/v1beta1" appslisters "k8s.io/kubernetes/pkg/client/listers/apps/v1beta1"
corelisters "k8s.io/kubernetes/pkg/client/listers/core/v1" corelisters "k8s.io/kubernetes/pkg/client/listers/core/v1"
"k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller"
...@@ -560,7 +559,7 @@ func (rt *requestTracker) reset() { ...@@ -560,7 +559,7 @@ func (rt *requestTracker) reset() {
type fakeStatefulPodControl struct { type fakeStatefulPodControl struct {
podsLister corelisters.PodLister podsLister corelisters.PodLister
claimsLister listers.StoreToPersistentVolumeClaimLister claimsLister corelisters.PersistentVolumeClaimLister
setsLister appslisters.StatefulSetLister setsLister appslisters.StatefulSetLister
podsIndexer cache.Indexer podsIndexer cache.Indexer
claimsIndexer cache.Indexer claimsIndexer cache.Indexer
...@@ -572,11 +571,10 @@ type fakeStatefulPodControl struct { ...@@ -572,11 +571,10 @@ type fakeStatefulPodControl struct {
} }
func newFakeStatefulPodControl(podInformer coreinformers.PodInformer, setInformer appsinformers.StatefulSetInformer) *fakeStatefulPodControl { func newFakeStatefulPodControl(podInformer coreinformers.PodInformer, setInformer appsinformers.StatefulSetInformer) *fakeStatefulPodControl {
claimsIndexer := cache.NewIndexer(controller.KeyFunc, claimsIndexer := cache.NewIndexer(controller.KeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
return &fakeStatefulPodControl{ return &fakeStatefulPodControl{
podInformer.Lister(), podInformer.Lister(),
listers.StoreToPersistentVolumeClaimLister{Indexer: claimsIndexer}, corelisters.NewPersistentVolumeClaimLister(claimsIndexer),
setInformer.Lister(), setInformer.Lister(),
podInformer.Informer().GetIndexer(), podInformer.Informer().GetIndexer(),
claimsIndexer, claimsIndexer,
......
...@@ -352,6 +352,7 @@ func newFakeStatefulSetController() (*StatefulSetController, *fakeStatefulPodCon ...@@ -352,6 +352,7 @@ func newFakeStatefulSetController() (*StatefulSetController, *fakeStatefulPodCon
ssc := NewStatefulSetController( ssc := NewStatefulSetController(
informerFactory.Core().V1().Pods(), informerFactory.Core().V1().Pods(),
informerFactory.Apps().V1beta1().StatefulSets(), informerFactory.Apps().V1beta1().StatefulSets(),
informerFactory.Core().V1().PersistentVolumeClaims(),
client, client,
) )
ssc.podListerSynced = alwaysReady ssc.podListerSynced = alwaysReady
......
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