Skip to content

Commit 93bfa0f

Browse files
kvapsclaude
andcommitted
fix(rest): drop DisallowUnknownFields on CRUD decoders
Java LINSTOR ignores unknown fields. golinstor stuffs GenericPropsModify fields (override_props, delete_props, ...) into bodies for many shared upstream types — including Node modify, RG modify, RD modify. Strict decoding turned every such call into a 400. Match Java's lenient behavior; we keep the decode in-flight but no longer reject by name. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
1 parent 77d53e7 commit 93bfa0f

4 files changed

Lines changed: 7 additions & 22 deletions

File tree

pkg/rest/nodes.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,7 @@ func (s *Server) handleNodeGet(w http.ResponseWriter, r *http.Request) {
7878
func (s *Server) handleNodeCreate(w http.ResponseWriter, r *http.Request) {
7979
var n apiv1.Node
8080

81-
dec := json.NewDecoder(r.Body)
82-
dec.DisallowUnknownFields()
83-
84-
err := dec.Decode(&n)
81+
err := json.NewDecoder(r.Body).Decode(&n)
8582
if err != nil {
8683
writeError(w, http.StatusBadRequest, err.Error())
8784

@@ -109,10 +106,7 @@ func (s *Server) handleNodeUpdate(w http.ResponseWriter, r *http.Request) {
109106

110107
var n apiv1.Node
111108

112-
dec := json.NewDecoder(r.Body)
113-
dec.DisallowUnknownFields()
114-
115-
err := dec.Decode(&n)
109+
err := json.NewDecoder(r.Body).Decode(&n)
116110
if err != nil {
117111
writeError(w, http.StatusBadRequest, err.Error())
118112

pkg/rest/resource_definitions.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,7 @@ func (s *Server) handleRDUpdate(w http.ResponseWriter, r *http.Request) {
9696

9797
var rd apiv1.ResourceDefinition
9898

99-
dec := json.NewDecoder(r.Body)
100-
dec.DisallowUnknownFields()
101-
102-
err := dec.Decode(&rd)
99+
err := json.NewDecoder(r.Body).Decode(&rd)
103100
if err != nil {
104101
writeError(w, http.StatusBadRequest, err.Error())
105102

pkg/rest/resource_groups.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,7 @@ func (s *Server) handleRGGet(w http.ResponseWriter, r *http.Request) {
6161
func (s *Server) handleRGCreate(w http.ResponseWriter, r *http.Request) {
6262
var rg apiv1.ResourceGroup
6363

64-
dec := json.NewDecoder(r.Body)
65-
dec.DisallowUnknownFields()
66-
67-
err := dec.Decode(&rg)
64+
err := json.NewDecoder(r.Body).Decode(&rg)
6865
if err != nil {
6966
writeError(w, http.StatusBadRequest, err.Error())
7067

@@ -92,10 +89,7 @@ func (s *Server) handleRGUpdate(w http.ResponseWriter, r *http.Request) {
9289

9390
var rg apiv1.ResourceGroup
9491

95-
dec := json.NewDecoder(r.Body)
96-
dec.DisallowUnknownFields()
97-
98-
err := dec.Decode(&rg)
92+
err := json.NewDecoder(r.Body).Decode(&rg)
9993
if err != nil {
10094
writeError(w, http.StatusBadRequest, err.Error())
10195

pkg/rest/spawn.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (s *Server) handleSpawn(w http.ResponseWriter, r *http.Request) {
6565
return
6666
}
6767

68-
rd := buildSpawnedRD(req, rgName, &rg)
68+
rd := buildSpawnedRD(&req, rgName, &rg)
6969

7070
err = s.Store.ResourceDefinitions().Create(r.Context(), &rd)
7171
if err != nil {
@@ -85,7 +85,7 @@ func (s *Server) handleSpawn(w http.ResponseWriter, r *http.Request) {
8585
writeJSON(w, http.StatusCreated, rd)
8686
}
8787

88-
func buildSpawnedRD(req apiv1.ResourceGroupSpawn, rgName string, rg *apiv1.ResourceGroup) apiv1.ResourceDefinition {
88+
func buildSpawnedRD(req *apiv1.ResourceGroupSpawn, rgName string, rg *apiv1.ResourceGroup) apiv1.ResourceDefinition {
8989
rd := apiv1.ResourceDefinition{
9090
Name: req.ResourceDefinitionName,
9191
ExternalName: req.ResourceDefinitionExternal,

0 commit comments

Comments
 (0)