Graduate APIListChunking to GA
Kubernetes-commit: 6acfa3cb4ac876e46ead5ba4772ba18e480435ce
This commit is contained in:
		
							parent
							
								
									2538d7ca48
								
							
						
					
					
						commit
						3030f660a8
					
				|  | @ -54,6 +54,7 @@ const ( | |||
| 	// owner: @smarterclayton
 | ||||
| 	// alpha: v1.8
 | ||||
| 	// beta: v1.9
 | ||||
| 	// stable: 1.29
 | ||||
| 	//
 | ||||
| 	// Allow API clients to retrieve resource lists in chunks rather than
 | ||||
| 	// all at once.
 | ||||
|  | @ -238,7 +239,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS | |||
| 
 | ||||
| 	AdmissionWebhookMatchConditions: {Default: true, PreRelease: featuregate.Beta}, | ||||
| 
 | ||||
| 	APIListChunking: {Default: true, PreRelease: featuregate.Beta}, | ||||
| 	APIListChunking: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
 | ||||
| 
 | ||||
| 	APIPriorityAndFairness: {Default: true, PreRelease: featuregate.Beta}, | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,9 +25,7 @@ import ( | |||
| 	"k8s.io/apimachinery/pkg/runtime" | ||||
| 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||
| 	"k8s.io/apimachinery/pkg/util/sets" | ||||
| 	"k8s.io/apiserver/pkg/features" | ||||
| 	"k8s.io/apiserver/pkg/storage/storagebackend" | ||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||
| 	"k8s.io/klog/v2" | ||||
| ) | ||||
| 
 | ||||
|  | @ -156,7 +154,7 @@ func NewDefaultStorageFactory( | |||
| 	resourceConfig APIResourceConfigSource, | ||||
| 	specialDefaultResourcePrefixes map[schema.GroupResource]string, | ||||
| ) *DefaultStorageFactory { | ||||
| 	config.Paging = utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) | ||||
| 	config.Paging = true | ||||
| 	if len(defaultMediaType) == 0 { | ||||
| 		defaultMediaType = runtime.ContentTypeJSON | ||||
| 	} | ||||
|  | @ -185,14 +183,6 @@ func (s *DefaultStorageFactory) SetEtcdPrefix(groupResource schema.GroupResource | |||
| 	s.Overrides[groupResource] = overrides | ||||
| } | ||||
| 
 | ||||
| // SetDisableAPIListChunking allows a specific resource to disable paging at the storage layer, to prevent
 | ||||
| // exposure of key names in continuations. This may be overridden by feature gates.
 | ||||
| func (s *DefaultStorageFactory) SetDisableAPIListChunking(groupResource schema.GroupResource) { | ||||
| 	overrides := s.Overrides[groupResource] | ||||
| 	overrides.disablePaging = true | ||||
| 	s.Overrides[groupResource] = overrides | ||||
| } | ||||
| 
 | ||||
| // SetResourceEtcdPrefix sets the prefix for a resource, but not the base-dir.  You'll end up in `etcdPrefix/resourceEtcdPrefix`.
 | ||||
| func (s *DefaultStorageFactory) SetResourceEtcdPrefix(groupResource schema.GroupResource, prefix string) { | ||||
| 	overrides := s.Overrides[groupResource] | ||||
|  |  | |||
|  | @ -724,15 +724,14 @@ func shouldDelegateList(opts storage.ListOptions) bool { | |||
| 	resourceVersion := opts.ResourceVersion | ||||
| 	pred := opts.Predicate | ||||
| 	match := opts.ResourceVersionMatch | ||||
| 	pagingEnabled := utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) | ||||
| 	consistentListFromCacheEnabled := utilfeature.DefaultFeatureGate.Enabled(features.ConsistentListFromCache) | ||||
| 
 | ||||
| 	// Serve consistent reads from storage if ConsistentListFromCache is disabled
 | ||||
| 	consistentReadFromStorage := resourceVersion == "" && !consistentListFromCacheEnabled | ||||
| 	// Watch cache doesn't support continuations, so serve them from etcd.
 | ||||
| 	hasContinuation := pagingEnabled && len(pred.Continue) > 0 | ||||
| 	hasContinuation := len(pred.Continue) > 0 | ||||
| 	// Serve paginated requests about revision "0" from watch cache to avoid overwhelming etcd.
 | ||||
| 	hasLimit := pagingEnabled && pred.Limit > 0 && resourceVersion != "0" | ||||
| 	hasLimit := pred.Limit > 0 && resourceVersion != "0" | ||||
| 	// Watch cache only supports ResourceVersionMatchNotOlderThan (default).
 | ||||
| 	unsupportedMatch := match != "" && match != metav1.ResourceVersionMatchNotOlderThan | ||||
| 
 | ||||
|  |  | |||
|  | @ -117,8 +117,7 @@ func (e *listWorkEstimator) estimate(r *http.Request, flowSchemaName, priorityLe | |||
| 	} | ||||
| 
 | ||||
| 	limit := numStored | ||||
| 	if utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) && listOptions.Limit > 0 && | ||||
| 		listOptions.Limit < numStored { | ||||
| 	if listOptions.Limit > 0 && listOptions.Limit < numStored { | ||||
| 		limit = listOptions.Limit | ||||
| 	} | ||||
| 
 | ||||
|  | @ -165,15 +164,14 @@ func key(requestInfo *apirequest.RequestInfo) string { | |||
| func shouldListFromStorage(query url.Values, opts *metav1.ListOptions) bool { | ||||
| 	resourceVersion := opts.ResourceVersion | ||||
| 	match := opts.ResourceVersionMatch | ||||
| 	pagingEnabled := utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) | ||||
| 	consistentListFromCacheEnabled := utilfeature.DefaultFeatureGate.Enabled(features.ConsistentListFromCache) | ||||
| 
 | ||||
| 	// Serve consistent reads from storage if ConsistentListFromCache is disabled
 | ||||
| 	consistentReadFromStorage := resourceVersion == "" && !consistentListFromCacheEnabled | ||||
| 	// Watch cache doesn't support continuations, so serve them from etcd.
 | ||||
| 	hasContinuation := pagingEnabled && len(opts.Continue) > 0 | ||||
| 	hasContinuation := len(opts.Continue) > 0 | ||||
| 	// Serve paginated requests about revision "0" from watch cache to avoid overwhelming etcd.
 | ||||
| 	hasLimit := pagingEnabled && opts.Limit > 0 && resourceVersion != "0" | ||||
| 	hasLimit := opts.Limit > 0 && resourceVersion != "0" | ||||
| 	// Watch cache only supports ResourceVersionMatchNotOlderThan (default).
 | ||||
| 	unsupportedMatch := match != "" && match != metav1.ResourceVersionMatchNotOlderThan | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue