Collapse onto request scope convertor

parent f6b08d6d
...@@ -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
......
...@@ -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