Unverified Commit b87a392b authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #63216 from liggitt/collapse-patch-convertor

Automatic merge from submit-queue (batch tested with PRs 59735, 63216). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Use single convertor in patch handler the request scope convertors are used to convert the object for output after the patch handler is finished with it (and were used internally by the patch handler already). they are required to be correct for the type being handled. ```release-note NONE ```
parents 6b64c07b 2c1a6899
...@@ -236,7 +236,7 @@ func (r *crdHandler) serveResource(w http.ResponseWriter, req *http.Request, req ...@@ -236,7 +236,7 @@ func (r *crdHandler) serveResource(w http.ResponseWriter, req *http.Request, req
case "update": case "update":
return handlers.UpdateResource(storage, requestScope, r.admission) return handlers.UpdateResource(storage, requestScope, r.admission)
case "patch": case "patch":
return handlers.PatchResource(storage, requestScope, r.admission, unstructured.UnstructuredObjectConverter{}, supportedTypes) return handlers.PatchResource(storage, requestScope, r.admission, supportedTypes)
case "delete": case "delete":
allowsOptions := true allowsOptions := true
return handlers.DeleteResource(storage, allowsOptions, requestScope, r.admission) return handlers.DeleteResource(storage, allowsOptions, requestScope, r.admission)
...@@ -259,7 +259,7 @@ func (r *crdHandler) serveStatus(w http.ResponseWriter, req *http.Request, reque ...@@ -259,7 +259,7 @@ func (r *crdHandler) serveStatus(w http.ResponseWriter, req *http.Request, reque
case "update": case "update":
return handlers.UpdateResource(storage, requestScope, r.admission) return handlers.UpdateResource(storage, requestScope, r.admission)
case "patch": case "patch":
return handlers.PatchResource(storage, requestScope, r.admission, unstructured.UnstructuredObjectConverter{}, supportedTypes) return handlers.PatchResource(storage, requestScope, r.admission, supportedTypes)
default: default:
http.Error(w, fmt.Sprintf("unhandled verb %q", requestInfo.Verb), http.StatusMethodNotAllowed) http.Error(w, fmt.Sprintf("unhandled verb %q", requestInfo.Verb), http.StatusMethodNotAllowed)
return nil return nil
...@@ -276,7 +276,7 @@ func (r *crdHandler) serveScale(w http.ResponseWriter, req *http.Request, reques ...@@ -276,7 +276,7 @@ func (r *crdHandler) serveScale(w http.ResponseWriter, req *http.Request, reques
case "update": case "update":
return handlers.UpdateResource(storage, requestScope, r.admission) return handlers.UpdateResource(storage, requestScope, r.admission)
case "patch": case "patch":
return handlers.PatchResource(storage, requestScope, r.admission, unstructured.UnstructuredObjectConverter{}, supportedTypes) return handlers.PatchResource(storage, requestScope, r.admission, supportedTypes)
default: default:
http.Error(w, fmt.Sprintf("unhandled verb %q", requestInfo.Verb), http.StatusMethodNotAllowed) http.Error(w, fmt.Sprintf("unhandled verb %q", requestInfo.Verb), http.StatusMethodNotAllowed)
return nil return nil
......
...@@ -245,6 +245,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission. ...@@ -245,6 +245,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
Creater: scheme, Creater: scheme,
Convertor: scheme, Convertor: scheme,
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
Defaulter: scheme, Defaulter: scheme,
Typer: scheme, Typer: scheme,
Linker: selfLinker, Linker: selfLinker,
...@@ -3170,6 +3171,7 @@ func TestParentResourceIsRequired(t *testing.T) { ...@@ -3170,6 +3171,7 @@ func TestParentResourceIsRequired(t *testing.T) {
Root: "/" + prefix, Root: "/" + prefix,
Creater: scheme, Creater: scheme,
Convertor: scheme, Convertor: scheme,
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
Defaulter: scheme, Defaulter: scheme,
Typer: scheme, Typer: scheme,
Linker: selfLinker, Linker: selfLinker,
...@@ -3197,12 +3199,13 @@ func TestParentResourceIsRequired(t *testing.T) { ...@@ -3197,12 +3199,13 @@ func TestParentResourceIsRequired(t *testing.T) {
"simple": &SimpleRESTStorage{}, "simple": &SimpleRESTStorage{},
"simple/sub": storage, "simple/sub": storage,
}, },
Root: "/" + prefix, Root: "/" + prefix,
Creater: scheme, Creater: scheme,
Convertor: scheme, Convertor: scheme,
Defaulter: scheme, UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
Typer: scheme, Defaulter: scheme,
Linker: selfLinker, Typer: scheme,
Linker: selfLinker,
Admit: admissionControl, Admit: admissionControl,
...@@ -3822,11 +3825,12 @@ func TestXGSubresource(t *testing.T) { ...@@ -3822,11 +3825,12 @@ func TestXGSubresource(t *testing.T) {
group := APIGroupVersion{ group := APIGroupVersion{
Storage: storage, Storage: storage,
Creater: scheme, Creater: scheme,
Convertor: scheme, Convertor: scheme,
Defaulter: scheme, UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
Typer: scheme, Defaulter: scheme,
Linker: selfLinker, Typer: scheme,
Linker: selfLinker,
ParameterCodec: parameterCodec, ParameterCodec: parameterCodec,
......
...@@ -42,7 +42,7 @@ import ( ...@@ -42,7 +42,7 @@ import (
) )
// PatchResource returns a function that will handle a resource patch. // PatchResource returns a function that will handle a resource patch.
func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface, converter runtime.ObjectConvertor, patchTypes []string) http.HandlerFunc { func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface, patchTypes []string) http.HandlerFunc {
return func(w http.ResponseWriter, req *http.Request) { return func(w http.ResponseWriter, req *http.Request) {
// For performance tracking purposes. // For performance tracking purposes.
trace := utiltrace.New("Patch " + req.URL.Path) trace := utiltrace.New("Patch " + req.URL.Path)
...@@ -77,14 +77,7 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface ...@@ -77,14 +77,7 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface
ctx := req.Context() ctx := req.Context()
ctx = request.WithNamespace(ctx, namespace) ctx = request.WithNamespace(ctx, namespace)
// TODO: this is NOT using the scope's convertor [sic]. Figure schemaReferenceObj, err := scope.UnsafeConvertor.ConvertToVersion(r.New(), scope.Kind.GroupVersion())
// out if this is intentional or not. Perhaps it matters on
// subresources? Rename this parameter if this is purposful and
// delete it (using scope.Convertor instead) otherwise.
//
// Already some tests set this converter but apparently not the
// scope's unsafeConvertor.
schemaReferenceObj, err := converter.ConvertToVersion(r.New(), scope.Kind.GroupVersion())
if err != nil { if err != nil {
scope.err(err, w, req) scope.err(err, w, req)
return return
......
...@@ -419,7 +419,7 @@ func (tc *patchTestCase) Run(t *testing.T) { ...@@ -419,7 +419,7 @@ func (tc *patchTestCase) Run(t *testing.T) {
if tc.expectedTries > 0 { if tc.expectedTries > 0 {
if tc.expectedTries != testPatcher.numUpdates { if tc.expectedTries != testPatcher.numUpdates {
t.Errorf("%s: expected %d tries, got %d", tc.expectedTries, testPatcher.numUpdates) t.Errorf("%s: expected %d tries, got %d", tc.name, tc.expectedTries, testPatcher.numUpdates)
} }
} }
......
...@@ -629,7 +629,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag ...@@ -629,7 +629,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
string(types.MergePatchType), string(types.MergePatchType),
string(types.StrategicMergePatchType), string(types.StrategicMergePatchType),
} }
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulPatchResource(patcher, reqScope, admit, a.group.Convertor, supportedTypes)) handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulPatchResource(patcher, reqScope, admit, supportedTypes))
route := ws.PATCH(action.Path).To(handler). route := ws.PATCH(action.Path).To(handler).
Doc(doc). Doc(doc).
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
...@@ -1005,9 +1005,9 @@ func restfulUpdateResource(r rest.Updater, scope handlers.RequestScope, admit ad ...@@ -1005,9 +1005,9 @@ func restfulUpdateResource(r rest.Updater, scope handlers.RequestScope, admit ad
} }
} }
func restfulPatchResource(r rest.Patcher, scope handlers.RequestScope, admit admission.Interface, converter runtime.ObjectConvertor, supportedTypes []string) restful.RouteFunction { func restfulPatchResource(r rest.Patcher, scope handlers.RequestScope, admit admission.Interface, supportedTypes []string) restful.RouteFunction {
return func(req *restful.Request, res *restful.Response) { return func(req *restful.Request, res *restful.Response) {
handlers.PatchResource(r, scope, admit, converter, supportedTypes)(res.ResponseWriter, req.Request) handlers.PatchResource(r, scope, admit, supportedTypes)(res.ResponseWriter, req.Request)
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment