mirror of
https://github.com/kubernetes/client-go.git
synced 2025-08-06 09:53:54 +00:00
switch to using the real FIFO
Kubernetes-commit: a9aab298b4738f4ea9111131cdf193a3b1ba14e5
This commit is contained in:
parent
43bf1a1b0a
commit
f2d9cfb8c8
@ -53,6 +53,12 @@ const (
|
|||||||
// alpha: v1.30
|
// alpha: v1.30
|
||||||
InformerResourceVersion Feature = "InformerResourceVersion"
|
InformerResourceVersion Feature = "InformerResourceVersion"
|
||||||
|
|
||||||
|
// owner: @deads2k
|
||||||
|
// beta: v1.33
|
||||||
|
//
|
||||||
|
// Refactor informers to deliver watch stream events in order instead of out of order.
|
||||||
|
InOrderInformers Feature = "InOrderInformers"
|
||||||
|
|
||||||
// owner: @p0lyn0mial
|
// owner: @p0lyn0mial
|
||||||
// beta: v1.30
|
// beta: v1.30
|
||||||
//
|
//
|
||||||
@ -73,5 +79,6 @@ var defaultKubernetesFeatureGates = map[Feature]FeatureSpec{
|
|||||||
ClientsAllowCBOR: {Default: false, PreRelease: Alpha},
|
ClientsAllowCBOR: {Default: false, PreRelease: Alpha},
|
||||||
ClientsPreferCBOR: {Default: false, PreRelease: Alpha},
|
ClientsPreferCBOR: {Default: false, PreRelease: Alpha},
|
||||||
InformerResourceVersion: {Default: false, PreRelease: Alpha},
|
InformerResourceVersion: {Default: false, PreRelease: Alpha},
|
||||||
|
InOrderInformers: {Default: true, PreRelease: Beta},
|
||||||
WatchListClient: {Default: false, PreRelease: Beta},
|
WatchListClient: {Default: false, PreRelease: Beta},
|
||||||
}
|
}
|
||||||
|
17
tools/cache/controller.go
vendored
17
tools/cache/controller.go
vendored
@ -19,6 +19,7 @@ package cache
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
clientgofeaturegate "k8s.io/client-go/features"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -592,11 +593,17 @@ func newInformer(clientState Store, options InformerOptions) 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{
|
|
||||||
KnownObjects: clientState,
|
var fifo Queue
|
||||||
EmitDeltaTypeReplaced: true,
|
if clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InOrderInformers) {
|
||||||
Transformer: options.Transform,
|
fifo = NewRealFIFO(MetaNamespaceKeyFunc, clientState, options.Transform)
|
||||||
})
|
} else {
|
||||||
|
fifo = NewDeltaFIFOWithOptions(DeltaFIFOOptions{
|
||||||
|
KnownObjects: clientState,
|
||||||
|
EmitDeltaTypeReplaced: true,
|
||||||
|
Transformer: options.Transform,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
cfg := &Config{
|
cfg := &Config{
|
||||||
Queue: fifo,
|
Queue: fifo,
|
||||||
|
7
tools/cache/controller_test.go
vendored
7
tools/cache/controller_test.go
vendored
@ -49,10 +49,7 @@ func Example() {
|
|||||||
// This will hold incoming changes. Note how we pass downstream in as a
|
// This will hold incoming changes. Note how we pass downstream 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 := NewRealFIFO(MetaNamespaceKeyFunc, downstream, nil)
|
||||||
KeyFunction: MetaNamespaceKeyFunc,
|
|
||||||
KnownObjects: downstream,
|
|
||||||
})
|
|
||||||
|
|
||||||
// Let's do threadsafe output to get predictable test results.
|
// Let's do threadsafe output to get predictable test results.
|
||||||
deletionCounter := make(chan string, 1000)
|
deletionCounter := make(chan string, 1000)
|
||||||
@ -87,7 +84,7 @@ func Example() {
|
|||||||
|
|
||||||
// fifo's KeyOf is easiest, because it handles
|
// fifo's KeyOf is easiest, because it handles
|
||||||
// DeletedFinalStateUnknown markers.
|
// DeletedFinalStateUnknown markers.
|
||||||
key, err := fifo.KeyOf(newest.Object)
|
key, err := fifo.keyOf(newest.Object)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
15
tools/cache/shared_informer.go
vendored
15
tools/cache/shared_informer.go
vendored
@ -540,11 +540,16 @@ func (s *sharedIndexInformer) RunWithContext(ctx context.Context) {
|
|||||||
s.startedLock.Lock()
|
s.startedLock.Lock()
|
||||||
defer s.startedLock.Unlock()
|
defer s.startedLock.Unlock()
|
||||||
|
|
||||||
fifo := NewDeltaFIFOWithOptions(DeltaFIFOOptions{
|
var fifo Queue
|
||||||
KnownObjects: s.indexer,
|
if clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InOrderInformers) {
|
||||||
EmitDeltaTypeReplaced: true,
|
fifo = NewRealFIFO(MetaNamespaceKeyFunc, s.indexer, s.transform)
|
||||||
Transformer: s.transform,
|
} else {
|
||||||
})
|
fifo = NewDeltaFIFOWithOptions(DeltaFIFOOptions{
|
||||||
|
KnownObjects: s.indexer,
|
||||||
|
EmitDeltaTypeReplaced: true,
|
||||||
|
Transformer: s.transform,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
cfg := &Config{
|
cfg := &Config{
|
||||||
Queue: fifo,
|
Queue: fifo,
|
||||||
|
Loading…
Reference in New Issue
Block a user