mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Merge remote-tracking branch 'origin/master' into release-1.31
This commit is contained in:
commit
cb08f03fac
@ -1264,6 +1264,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
||||
|
||||
genericfeatures.AuthorizeWithSelectors: {Default: false, PreRelease: featuregate.Alpha},
|
||||
|
||||
genericfeatures.ConcurrentWatchObjectDecode: {Default: false, PreRelease: featuregate.Beta},
|
||||
|
||||
genericfeatures.ConsistentListFromCache: {Default: true, PreRelease: featuregate.Beta},
|
||||
|
||||
genericfeatures.CoordinatedLeaderElection: {Default: false, PreRelease: featuregate.Alpha},
|
||||
|
@ -30,6 +30,12 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/apimachinery
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/apimachinery
|
||||
library: true
|
||||
- destination: api
|
||||
branches:
|
||||
@ -77,6 +83,15 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/api
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/api
|
||||
library: true
|
||||
- destination: client-go
|
||||
branches:
|
||||
@ -154,6 +169,21 @@ rules:
|
||||
# assumes GO111MODULE=on
|
||||
go build -mod=mod ./...
|
||||
go test -mod=mod ./...
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/client-go
|
||||
smoke-test: |
|
||||
# assumes GO111MODULE=on
|
||||
go build -mod=mod ./...
|
||||
go test -mod=mod ./...
|
||||
library: true
|
||||
- destination: code-generator
|
||||
branches:
|
||||
@ -192,6 +222,15 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/code-generator
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/code-generator
|
||||
- destination: component-base
|
||||
branches:
|
||||
- name: master
|
||||
@ -258,6 +297,19 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/component-base
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/component-base
|
||||
library: true
|
||||
- destination: component-helpers
|
||||
branches:
|
||||
@ -325,6 +377,19 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/component-helpers
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/component-helpers
|
||||
library: true
|
||||
- destination: kms
|
||||
branches:
|
||||
@ -380,6 +445,15 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/kms
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/kms
|
||||
library: true
|
||||
- destination: apiserver
|
||||
branches:
|
||||
@ -467,6 +541,23 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/apiserver
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/apiserver
|
||||
library: true
|
||||
- destination: kube-aggregator
|
||||
branches:
|
||||
@ -574,6 +665,27 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/kube-aggregator
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
- repository: code-generator
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/kube-aggregator
|
||||
- destination: sample-apiserver
|
||||
branches:
|
||||
- name: master
|
||||
@ -705,6 +817,32 @@ rules:
|
||||
smoke-test: |
|
||||
# assumes GO111MODULE=on
|
||||
go build -mod=mod .
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: code-generator
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/sample-apiserver
|
||||
required-packages:
|
||||
- k8s.io/code-generator
|
||||
smoke-test: |
|
||||
# assumes GO111MODULE=on
|
||||
go build -mod=mod .
|
||||
- destination: sample-controller
|
||||
branches:
|
||||
- name: master
|
||||
@ -806,6 +944,26 @@ rules:
|
||||
smoke-test: |
|
||||
# assumes GO111MODULE=on
|
||||
go build -mod=mod .
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: code-generator
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/sample-controller
|
||||
required-packages:
|
||||
- k8s.io/code-generator
|
||||
smoke-test: |
|
||||
# assumes GO111MODULE=on
|
||||
go build -mod=mod .
|
||||
- destination: apiextensions-apiserver
|
||||
branches:
|
||||
- name: master
|
||||
@ -922,6 +1080,29 @@ rules:
|
||||
- staging/src/k8s.io/apiextensions-apiserver
|
||||
required-packages:
|
||||
- k8s.io/code-generator
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: code-generator
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/apiextensions-apiserver
|
||||
required-packages:
|
||||
- k8s.io/code-generator
|
||||
- destination: metrics
|
||||
branches:
|
||||
- name: master
|
||||
@ -998,6 +1179,21 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/metrics
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: code-generator
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/metrics
|
||||
library: true
|
||||
- destination: cli-runtime
|
||||
branches:
|
||||
@ -1065,6 +1261,19 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/cli-runtime
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/cli-runtime
|
||||
library: true
|
||||
- destination: sample-cli-plugin
|
||||
branches:
|
||||
@ -1142,6 +1351,21 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/sample-cli-plugin
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: cli-runtime
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/sample-cli-plugin
|
||||
- destination: kube-proxy
|
||||
branches:
|
||||
- name: master
|
||||
@ -1218,6 +1442,21 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/kube-proxy
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/kube-proxy
|
||||
library: true
|
||||
- destination: cri-api
|
||||
branches:
|
||||
@ -1250,6 +1489,12 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/cri-api
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/cri-api
|
||||
library: true
|
||||
- destination: cri-client
|
||||
branches:
|
||||
@ -1269,6 +1514,23 @@ rules:
|
||||
branch: master
|
||||
dirs:
|
||||
- staging/src/k8s.io/cri-client
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: cri-api
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/cri-client
|
||||
library: true
|
||||
- destination: kubelet
|
||||
branches:
|
||||
@ -1370,6 +1632,27 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/kubelet
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: cri-api
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/kubelet
|
||||
library: true
|
||||
- destination: kube-scheduler
|
||||
branches:
|
||||
@ -1447,6 +1730,21 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/kube-scheduler
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/kube-scheduler
|
||||
library: true
|
||||
- destination: controller-manager
|
||||
branches:
|
||||
@ -1544,6 +1842,25 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/controller-manager
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/controller-manager
|
||||
library: true
|
||||
- destination: cloud-provider
|
||||
branches:
|
||||
@ -1661,6 +1978,29 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/cloud-provider
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: controller-manager
|
||||
branch: release-1.31
|
||||
- repository: component-helpers
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/cloud-provider
|
||||
library: true
|
||||
- destination: kube-controller-manager
|
||||
branches:
|
||||
@ -1788,6 +2128,31 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/kube-controller-manager
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: controller-manager
|
||||
branch: release-1.31
|
||||
- repository: cloud-provider
|
||||
branch: release-1.31
|
||||
- repository: component-helpers
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/kube-controller-manager
|
||||
library: true
|
||||
- destination: cluster-bootstrap
|
||||
branches:
|
||||
@ -1845,6 +2210,17 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/cluster-bootstrap
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/cluster-bootstrap
|
||||
library: true
|
||||
- destination: csi-translation-lib
|
||||
branches:
|
||||
@ -1902,6 +2278,17 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/csi-translation-lib
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/csi-translation-lib
|
||||
library: true
|
||||
- destination: mount-utils
|
||||
branches:
|
||||
@ -1934,6 +2321,12 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/mount-utils
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/mount-utils
|
||||
library: true
|
||||
- destination: legacy-cloud-providers
|
||||
branches:
|
||||
@ -2154,6 +2547,29 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/kubectl
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: cli-runtime
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: code-generator
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: component-helpers
|
||||
branch: release-1.31
|
||||
- repository: metrics
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/kubectl
|
||||
library: true
|
||||
- destination: pod-security-admission
|
||||
branches:
|
||||
@ -2251,6 +2667,25 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/pod-security-admission
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/pod-security-admission
|
||||
library: true
|
||||
- destination: dynamic-resource-allocation
|
||||
branches:
|
||||
@ -2360,6 +2795,31 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/dynamic-resource-allocation
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: apiserver
|
||||
branch: release-1.31
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: cri-api
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
- repository: component-helpers
|
||||
branch: release-1.31
|
||||
- repository: kms
|
||||
branch: release-1.31
|
||||
- repository: kubelet
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/dynamic-resource-allocation
|
||||
- destination: endpointslice
|
||||
branches:
|
||||
- name: master
|
||||
@ -2421,6 +2881,21 @@ rules:
|
||||
branch: release-1.30
|
||||
dirs:
|
||||
- staging/src/k8s.io/endpointslice
|
||||
- name: release-1.31
|
||||
go: 1.22.5
|
||||
dependencies:
|
||||
- repository: api
|
||||
branch: release-1.31
|
||||
- repository: apimachinery
|
||||
branch: release-1.31
|
||||
- repository: client-go
|
||||
branch: release-1.31
|
||||
- repository: component-base
|
||||
branch: release-1.31
|
||||
source:
|
||||
branch: release-1.31
|
||||
dirs:
|
||||
- staging/src/k8s.io/endpointslice
|
||||
recursive-delete-patterns:
|
||||
- '*/.gitattributes'
|
||||
default-go-version: 1.22.5
|
||||
|
@ -101,6 +101,11 @@ const (
|
||||
// Allows authorization to use field and label selectors.
|
||||
AuthorizeWithSelectors featuregate.Feature = "AuthorizeWithSelectors"
|
||||
|
||||
// owner: @serathius
|
||||
// beta: v1.31
|
||||
// Enables concurrent watch object decoding to avoid starving watch cache when conversion webhook is installed.
|
||||
ConcurrentWatchObjectDecode featuregate.Feature = "ConcurrentWatchObjectDecode"
|
||||
|
||||
// owner: @cici37 @jpbetz
|
||||
// kep: http://kep.k8s.io/3488
|
||||
// alpha: v1.26
|
||||
@ -365,6 +370,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
||||
|
||||
AuthorizeWithSelectors: {Default: false, PreRelease: featuregate.Alpha},
|
||||
|
||||
ConcurrentWatchObjectDecode: {Default: false, PreRelease: featuregate.Beta},
|
||||
|
||||
ValidatingAdmissionPolicy: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
|
||||
|
||||
CoordinatedLeaderElection: {Default: false, PreRelease: featuregate.Alpha},
|
||||
|
@ -46,8 +46,9 @@ import (
|
||||
|
||||
const (
|
||||
// We have set a buffer in order to reduce times of context switches.
|
||||
incomingBufSize = 100
|
||||
outgoingBufSize = 100
|
||||
incomingBufSize = 100
|
||||
outgoingBufSize = 100
|
||||
processEventConcurrency = 10
|
||||
)
|
||||
|
||||
// defaultWatcherMaxLimit is used to facilitate construction tests
|
||||
@ -230,8 +231,7 @@ func (wc *watchChan) run(initialEventsEndBookmarkRequired, forceInitialEvents bo
|
||||
go wc.startWatching(watchClosedCh, initialEventsEndBookmarkRequired, forceInitialEvents)
|
||||
|
||||
var resultChanWG sync.WaitGroup
|
||||
resultChanWG.Add(1)
|
||||
go wc.processEvent(&resultChanWG)
|
||||
wc.processEvents(&resultChanWG)
|
||||
|
||||
select {
|
||||
case err := <-wc.errChan:
|
||||
@ -424,10 +424,17 @@ func (wc *watchChan) startWatching(watchClosedCh chan struct{}, initialEventsEnd
|
||||
close(watchClosedCh)
|
||||
}
|
||||
|
||||
// processEvent processes events from etcd watcher and sends results to resultChan.
|
||||
func (wc *watchChan) processEvent(wg *sync.WaitGroup) {
|
||||
// processEvents processes events from etcd watcher and sends results to resultChan.
|
||||
func (wc *watchChan) processEvents(wg *sync.WaitGroup) {
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.ConcurrentWatchObjectDecode) {
|
||||
wc.concurrentProcessEvents(wg)
|
||||
} else {
|
||||
wg.Add(1)
|
||||
go wc.serialProcessEvents(wg)
|
||||
}
|
||||
}
|
||||
func (wc *watchChan) serialProcessEvents(wg *sync.WaitGroup) {
|
||||
defer wg.Done()
|
||||
|
||||
for {
|
||||
select {
|
||||
case e := <-wc.incomingEventChan:
|
||||
@ -435,7 +442,7 @@ func (wc *watchChan) processEvent(wg *sync.WaitGroup) {
|
||||
if res == nil {
|
||||
continue
|
||||
}
|
||||
if len(wc.resultChan) == outgoingBufSize {
|
||||
if len(wc.resultChan) == cap(wc.resultChan) {
|
||||
klog.V(3).InfoS("Fast watcher, slow processing. Probably caused by slow dispatching events to watchers", "outgoingEvents", outgoingBufSize, "objectType", wc.watcher.objectType, "groupResource", wc.watcher.groupResource)
|
||||
}
|
||||
// If user couldn't receive results fast enough, we also block incoming events from watcher.
|
||||
@ -452,6 +459,95 @@ func (wc *watchChan) processEvent(wg *sync.WaitGroup) {
|
||||
}
|
||||
}
|
||||
|
||||
func (wc *watchChan) concurrentProcessEvents(wg *sync.WaitGroup) {
|
||||
p := concurrentOrderedEventProcessing{
|
||||
input: wc.incomingEventChan,
|
||||
processFunc: wc.transform,
|
||||
output: wc.resultChan,
|
||||
processingQueue: make(chan chan *watch.Event, processEventConcurrency-1),
|
||||
|
||||
objectType: wc.watcher.objectType,
|
||||
groupResource: wc.watcher.groupResource,
|
||||
}
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
p.scheduleEventProcessing(wc.ctx, wg)
|
||||
}()
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
p.collectEventProcessing(wc.ctx)
|
||||
}()
|
||||
}
|
||||
|
||||
type concurrentOrderedEventProcessing struct {
|
||||
input chan *event
|
||||
processFunc func(*event) *watch.Event
|
||||
output chan watch.Event
|
||||
|
||||
processingQueue chan chan *watch.Event
|
||||
// Metadata for logging
|
||||
objectType string
|
||||
groupResource schema.GroupResource
|
||||
}
|
||||
|
||||
func (p *concurrentOrderedEventProcessing) scheduleEventProcessing(ctx context.Context, wg *sync.WaitGroup) {
|
||||
var e *event
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case e = <-p.input:
|
||||
}
|
||||
processingResponse := make(chan *watch.Event, 1)
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case p.processingQueue <- processingResponse:
|
||||
}
|
||||
wg.Add(1)
|
||||
go func(e *event, response chan<- *watch.Event) {
|
||||
defer wg.Done()
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
case response <- p.processFunc(e):
|
||||
}
|
||||
}(e, processingResponse)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *concurrentOrderedEventProcessing) collectEventProcessing(ctx context.Context) {
|
||||
var processingResponse chan *watch.Event
|
||||
var e *watch.Event
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case processingResponse = <-p.processingQueue:
|
||||
}
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case e = <-processingResponse:
|
||||
}
|
||||
if e == nil {
|
||||
continue
|
||||
}
|
||||
if len(p.output) == cap(p.output) {
|
||||
klog.V(3).InfoS("Fast watcher, slow processing. Probably caused by slow dispatching events to watchers", "outgoingEvents", outgoingBufSize, "objectType", p.objectType, "groupResource", p.groupResource)
|
||||
}
|
||||
// If user couldn't receive results fast enough, we also block incoming events from watcher.
|
||||
// Because storing events in local will cause more memory usage.
|
||||
// The worst case would be closing the fast watcher.
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case p.output <- *e:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (wc *watchChan) filter(obj runtime.Object) bool {
|
||||
if wc.internalPred.Empty() {
|
||||
return true
|
||||
|
@ -133,6 +133,12 @@ func TestEtcdWatchSemantics(t *testing.T) {
|
||||
storagetesting.RunWatchSemantics(ctx, t, store)
|
||||
}
|
||||
|
||||
func TestEtcdWatchSemanticsWithConcurrentDecode(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConcurrentWatchObjectDecode, true)
|
||||
ctx, store, _ := testSetup(t)
|
||||
storagetesting.RunWatchSemantics(ctx, t, store)
|
||||
}
|
||||
|
||||
func TestEtcdWatchSemanticInitialEventsExtended(t *testing.T) {
|
||||
ctx, store, _ := testSetup(t)
|
||||
storagetesting.RunWatchSemanticInitialEventsExtended(ctx, t, store)
|
||||
|
Loading…
Reference in New Issue
Block a user