mirror of
https://github.com/kubernetes/client-go.git
synced 2025-08-01 23:40:27 +00:00
Refactor informer constructors
Kubernetes-commit: 4da185a601e1f657a873dfd7e51efcc8a3b94c37
This commit is contained in:
parent
9990b0b122
commit
7da319745b
118
tools/cache/controller.go
vendored
118
tools/cache/controller.go
vendored
@ -346,6 +346,52 @@ func DeletionHandlingObjectToName(obj interface{}) (ObjectName, error) {
|
|||||||
return ObjectToName(obj)
|
return ObjectToName(obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InformerOptions configure a Reflector.
|
||||||
|
type InformerOptions struct {
|
||||||
|
// ListerWatcher implements List and Watch functions for the source of the resource
|
||||||
|
// the informer will be informing about.
|
||||||
|
ListerWatcher ListerWatcher
|
||||||
|
|
||||||
|
// ObjectType is an object of the type that informer is expected to receive.
|
||||||
|
ObjectType runtime.Object
|
||||||
|
|
||||||
|
// Handler defines functions that should called on object mutations.
|
||||||
|
Handler ResourceEventHandler
|
||||||
|
|
||||||
|
// ResyncPeriod is the underlying Reflector's resync period. If non-zero, the store
|
||||||
|
// is re-synced with that frequency - Modify events are delivered even if objects
|
||||||
|
// didn't change.
|
||||||
|
// This is useful for synchronizing objects that configure external resources
|
||||||
|
// (e.g. configure cloud provider functionalities).
|
||||||
|
// Optional - if unset, store resyncing is not happening periodically.
|
||||||
|
ResyncPeriod time.Duration
|
||||||
|
|
||||||
|
// Indexers, if set, are the indexers for the received objects to optimize
|
||||||
|
// certain queries.
|
||||||
|
// Optional - if unset no indexes are maintained.
|
||||||
|
Indexers Indexers
|
||||||
|
|
||||||
|
// Transform function, if set, will be called on all objects before they will be
|
||||||
|
// put into the Store and corresponding Add/Modify/Delete handlers will be invoked
|
||||||
|
// for them.
|
||||||
|
// Optional - if unset no additional transforming is happening.
|
||||||
|
Transform TransformFunc
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewInformerWithOptions returns a Store and a controller for populating the store
|
||||||
|
// while also providing event notifications. You should only used the returned
|
||||||
|
// Store for Get/List operations; Add/Modify/Deletes will cause the event
|
||||||
|
// notifications to be faulty.
|
||||||
|
func NewInformerWithOptions(options InformerOptions) (Store, Controller) {
|
||||||
|
var clientState Store
|
||||||
|
if options.Indexers == nil {
|
||||||
|
clientState = NewStore(DeletionHandlingMetaNamespaceKeyFunc)
|
||||||
|
} else {
|
||||||
|
clientState = NewIndexer(DeletionHandlingMetaNamespaceKeyFunc, options.Indexers)
|
||||||
|
}
|
||||||
|
return clientState, newInformer(clientState, options)
|
||||||
|
}
|
||||||
|
|
||||||
// NewInformer returns a Store and a controller for populating the store
|
// NewInformer returns a Store and a controller for populating the store
|
||||||
// while also providing event notifications. You should only used the returned
|
// while also providing event notifications. You should only used the returned
|
||||||
// Store for Get/List operations; Add/Modify/Deletes will cause the event
|
// Store for Get/List operations; Add/Modify/Deletes will cause the event
|
||||||
@ -360,6 +406,8 @@ func DeletionHandlingObjectToName(obj interface{}) (ObjectName, error) {
|
|||||||
// long as possible (until the upstream source closes the watch or times out,
|
// long as possible (until the upstream source closes the watch or times out,
|
||||||
// or you stop the controller).
|
// or you stop the controller).
|
||||||
// - h is the object you want notifications sent to.
|
// - h is the object you want notifications sent to.
|
||||||
|
//
|
||||||
|
// Deprecated: Use NewInformerWithOptions instead.
|
||||||
func NewInformer(
|
func NewInformer(
|
||||||
lw ListerWatcher,
|
lw ListerWatcher,
|
||||||
objType runtime.Object,
|
objType runtime.Object,
|
||||||
@ -369,7 +417,13 @@ func NewInformer(
|
|||||||
// This will hold the client state, as we know it.
|
// This will hold the client state, as we know it.
|
||||||
clientState := NewStore(DeletionHandlingMetaNamespaceKeyFunc)
|
clientState := NewStore(DeletionHandlingMetaNamespaceKeyFunc)
|
||||||
|
|
||||||
return clientState, newInformer(lw, objType, resyncPeriod, h, clientState, nil)
|
options := InformerOptions{
|
||||||
|
ListerWatcher: lw,
|
||||||
|
ObjectType: objType,
|
||||||
|
Handler: h,
|
||||||
|
ResyncPeriod: resyncPeriod,
|
||||||
|
}
|
||||||
|
return clientState, newInformer(clientState, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewIndexerInformer returns an Indexer and a Controller for populating the index
|
// NewIndexerInformer returns an Indexer and a Controller for populating the index
|
||||||
@ -387,6 +441,8 @@ func NewInformer(
|
|||||||
// or you stop the controller).
|
// or you stop the controller).
|
||||||
// - h is the object you want notifications sent to.
|
// - h is the object you want notifications sent to.
|
||||||
// - indexers is the indexer for the received object type.
|
// - indexers is the indexer for the received object type.
|
||||||
|
//
|
||||||
|
// Deprecated: Use NewInformerWithOptions instead.
|
||||||
func NewIndexerInformer(
|
func NewIndexerInformer(
|
||||||
lw ListerWatcher,
|
lw ListerWatcher,
|
||||||
objType runtime.Object,
|
objType runtime.Object,
|
||||||
@ -397,7 +453,14 @@ func NewIndexerInformer(
|
|||||||
// This will hold the client state, as we know it.
|
// This will hold the client state, as we know it.
|
||||||
clientState := NewIndexer(DeletionHandlingMetaNamespaceKeyFunc, indexers)
|
clientState := NewIndexer(DeletionHandlingMetaNamespaceKeyFunc, indexers)
|
||||||
|
|
||||||
return clientState, newInformer(lw, objType, resyncPeriod, h, clientState, nil)
|
options := InformerOptions{
|
||||||
|
ListerWatcher: lw,
|
||||||
|
ObjectType: objType,
|
||||||
|
Handler: h,
|
||||||
|
ResyncPeriod: resyncPeriod,
|
||||||
|
Indexers: indexers,
|
||||||
|
}
|
||||||
|
return clientState, newInformer(clientState, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTransformingInformer returns a Store and a controller for populating
|
// NewTransformingInformer returns a Store and a controller for populating
|
||||||
@ -407,6 +470,8 @@ func NewIndexerInformer(
|
|||||||
// The given transform function will be called on all objects before they will
|
// The given transform function will be called on all objects before they will
|
||||||
// put into the Store and corresponding Add/Modify/Delete handlers will
|
// put into the Store and corresponding Add/Modify/Delete handlers will
|
||||||
// be invoked for them.
|
// be invoked for them.
|
||||||
|
//
|
||||||
|
// Deprecated: Use NewInformerWithOptions instead.
|
||||||
func NewTransformingInformer(
|
func NewTransformingInformer(
|
||||||
lw ListerWatcher,
|
lw ListerWatcher,
|
||||||
objType runtime.Object,
|
objType runtime.Object,
|
||||||
@ -417,7 +482,14 @@ func NewTransformingInformer(
|
|||||||
// This will hold the client state, as we know it.
|
// This will hold the client state, as we know it.
|
||||||
clientState := NewStore(DeletionHandlingMetaNamespaceKeyFunc)
|
clientState := NewStore(DeletionHandlingMetaNamespaceKeyFunc)
|
||||||
|
|
||||||
return clientState, newInformer(lw, objType, resyncPeriod, h, clientState, transformer)
|
options := InformerOptions{
|
||||||
|
ListerWatcher: lw,
|
||||||
|
ObjectType: objType,
|
||||||
|
Handler: h,
|
||||||
|
ResyncPeriod: resyncPeriod,
|
||||||
|
Transform: transformer,
|
||||||
|
}
|
||||||
|
return clientState, newInformer(clientState, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTransformingIndexerInformer returns an Indexer and a controller for
|
// NewTransformingIndexerInformer returns an Indexer and a controller for
|
||||||
@ -427,6 +499,8 @@ func NewTransformingInformer(
|
|||||||
// The given transform function will be called on all objects before they will
|
// The given transform function will be called on all objects before they will
|
||||||
// be put into the Index and corresponding Add/Modify/Delete handlers will
|
// be put into the Index and corresponding Add/Modify/Delete handlers will
|
||||||
// be invoked for them.
|
// be invoked for them.
|
||||||
|
//
|
||||||
|
// Deprecated: Use NewInformerWithOptions instead.
|
||||||
func NewTransformingIndexerInformer(
|
func NewTransformingIndexerInformer(
|
||||||
lw ListerWatcher,
|
lw ListerWatcher,
|
||||||
objType runtime.Object,
|
objType runtime.Object,
|
||||||
@ -438,7 +512,15 @@ func NewTransformingIndexerInformer(
|
|||||||
// This will hold the client state, as we know it.
|
// This will hold the client state, as we know it.
|
||||||
clientState := NewIndexer(DeletionHandlingMetaNamespaceKeyFunc, indexers)
|
clientState := NewIndexer(DeletionHandlingMetaNamespaceKeyFunc, indexers)
|
||||||
|
|
||||||
return clientState, newInformer(lw, objType, resyncPeriod, h, clientState, transformer)
|
options := InformerOptions{
|
||||||
|
ListerWatcher: lw,
|
||||||
|
ObjectType: objType,
|
||||||
|
Handler: h,
|
||||||
|
ResyncPeriod: resyncPeriod,
|
||||||
|
Indexers: indexers,
|
||||||
|
Transform: transformer,
|
||||||
|
}
|
||||||
|
return clientState, newInformer(clientState, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Multiplexes updates in the form of a list of Deltas into a Store, and informs
|
// Multiplexes updates in the form of a list of Deltas into a Store, and informs
|
||||||
@ -481,42 +563,28 @@ func processDeltas(
|
|||||||
// providing event notifications.
|
// providing event notifications.
|
||||||
//
|
//
|
||||||
// Parameters
|
// Parameters
|
||||||
// - lw is list and watch functions for the source of the resource you want to
|
|
||||||
// be informed of.
|
|
||||||
// - objType is an object of the type that you expect to receive.
|
|
||||||
// - resyncPeriod: if non-zero, will re-list this often (you will get OnUpdate
|
|
||||||
// calls, even if nothing changed). Otherwise, re-list will be delayed as
|
|
||||||
// long as possible (until the upstream source closes the watch or times out,
|
|
||||||
// or you stop the controller).
|
|
||||||
// - h is the object you want notifications sent to.
|
|
||||||
// - clientState is the store you want to populate
|
// - clientState is the store you want to populate
|
||||||
func newInformer(
|
// - options contain the options to configure the controller
|
||||||
lw ListerWatcher,
|
func newInformer(clientState Store, options InformerOptions) Controller {
|
||||||
objType runtime.Object,
|
|
||||||
resyncPeriod time.Duration,
|
|
||||||
h ResourceEventHandler,
|
|
||||||
clientState Store,
|
|
||||||
transformer TransformFunc,
|
|
||||||
) Controller {
|
|
||||||
// This will hold incoming changes. Note how we pass clientState in as a
|
// This will hold incoming changes. Note how we pass clientState in as a
|
||||||
// KeyLister, that way resync operations will result in the correct set
|
// KeyLister, that way resync operations will result in the correct set
|
||||||
// of update/delete deltas.
|
// of update/delete deltas.
|
||||||
fifo := NewDeltaFIFOWithOptions(DeltaFIFOOptions{
|
fifo := NewDeltaFIFOWithOptions(DeltaFIFOOptions{
|
||||||
KnownObjects: clientState,
|
KnownObjects: clientState,
|
||||||
EmitDeltaTypeReplaced: true,
|
EmitDeltaTypeReplaced: true,
|
||||||
Transformer: transformer,
|
Transformer: options.Transform,
|
||||||
})
|
})
|
||||||
|
|
||||||
cfg := &Config{
|
cfg := &Config{
|
||||||
Queue: fifo,
|
Queue: fifo,
|
||||||
ListerWatcher: lw,
|
ListerWatcher: options.ListerWatcher,
|
||||||
ObjectType: objType,
|
ObjectType: options.ObjectType,
|
||||||
FullResyncPeriod: resyncPeriod,
|
FullResyncPeriod: options.ResyncPeriod,
|
||||||
RetryOnError: false,
|
RetryOnError: false,
|
||||||
|
|
||||||
Process: func(obj interface{}, isInInitialList bool) error {
|
Process: func(obj interface{}, isInInitialList bool) error {
|
||||||
if deltas, ok := obj.(Deltas); ok {
|
if deltas, ok := obj.(Deltas); ok {
|
||||||
return processDeltas(h, clientState, deltas, isInInitialList)
|
return processDeltas(options.Handler, clientState, deltas, isInInitialList)
|
||||||
}
|
}
|
||||||
return errors.New("object given as Process argument is not Deltas")
|
return errors.New("object given as Process argument is not Deltas")
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user