mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #99199 from deads2k/a-crd
delay serving CRD creates for a few seconds for HA consistency
This commit is contained in:
commit
9defef74ba
@ -366,7 +366,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
|||||||
case subresource == "scale" && subresources != nil && subresources.Scale != nil:
|
case subresource == "scale" && subresources != nil && subresources.Scale != nil:
|
||||||
handlerFunc = r.serveScale(w, req, requestInfo, crdInfo, terminating, supportedTypes)
|
handlerFunc = r.serveScale(w, req, requestInfo, crdInfo, terminating, supportedTypes)
|
||||||
case len(subresource) == 0:
|
case len(subresource) == 0:
|
||||||
handlerFunc = r.serveResource(w, req, requestInfo, crdInfo, terminating, supportedTypes)
|
handlerFunc = r.serveResource(w, req, requestInfo, crdInfo, crd, terminating, supportedTypes)
|
||||||
default:
|
default:
|
||||||
responsewriters.ErrorNegotiated(
|
responsewriters.ErrorNegotiated(
|
||||||
apierrors.NewNotFound(schema.GroupResource{Group: requestInfo.APIGroup, Resource: requestInfo.Resource}, requestInfo.Name),
|
apierrors.NewNotFound(schema.GroupResource{Group: requestInfo.APIGroup, Resource: requestInfo.Resource}, requestInfo.Name),
|
||||||
@ -382,7 +382,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *crdHandler) serveResource(w http.ResponseWriter, req *http.Request, requestInfo *apirequest.RequestInfo, crdInfo *crdInfo, terminating bool, supportedTypes []string) http.HandlerFunc {
|
func (r *crdHandler) serveResource(w http.ResponseWriter, req *http.Request, requestInfo *apirequest.RequestInfo, crdInfo *crdInfo, crd *apiextensionsv1.CustomResourceDefinition, terminating bool, supportedTypes []string) http.HandlerFunc {
|
||||||
requestScope := crdInfo.requestScopes[requestInfo.APIVersion]
|
requestScope := crdInfo.requestScopes[requestInfo.APIVersion]
|
||||||
storage := crdInfo.storages[requestInfo.APIVersion].CustomResource
|
storage := crdInfo.storages[requestInfo.APIVersion].CustomResource
|
||||||
|
|
||||||
@ -396,6 +396,13 @@ func (r *crdHandler) serveResource(w http.ResponseWriter, req *http.Request, req
|
|||||||
forceWatch := true
|
forceWatch := true
|
||||||
return handlers.ListResource(storage, storage, requestScope, forceWatch, r.minRequestTimeout)
|
return handlers.ListResource(storage, storage, requestScope, forceWatch, r.minRequestTimeout)
|
||||||
case "create":
|
case "create":
|
||||||
|
// we want to track recently created CRDs so that in HA environments we don't have server A allow a create and server B
|
||||||
|
// not have observed the established, so a followup get,update,delete results in a 404. We've observed about 800ms
|
||||||
|
// delay in some CI environments. Two seconds looks long enough and reasonably short for hot retriers.
|
||||||
|
justCreated := time.Since(apiextensionshelpers.FindCRDCondition(crd, apiextensionsv1.Established).LastTransitionTime.Time) < 2*time.Second
|
||||||
|
if justCreated {
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
}
|
||||||
if terminating {
|
if terminating {
|
||||||
err := apierrors.NewMethodNotSupported(schema.GroupResource{Group: requestInfo.APIGroup, Resource: requestInfo.Resource}, requestInfo.Verb)
|
err := apierrors.NewMethodNotSupported(schema.GroupResource{Group: requestInfo.APIGroup, Resource: requestInfo.Resource}, requestInfo.Verb)
|
||||||
err.ErrStatus.Message = fmt.Sprintf("%v not allowed while custom resource definition is terminating", requestInfo.Verb)
|
err.ErrStatus.Message = fmt.Sprintf("%v not allowed while custom resource definition is terminating", requestInfo.Verb)
|
||||||
|
Loading…
Reference in New Issue
Block a user