Merge pull request #57854 from mengqiy/fix_SMP
Automatic merge from submit-queue. 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>. fix bug of swallowing missing merge key error The bug is caused by variable shadowing. Fixes #57834 ```release-note NONE ``` /assign @liggitt
This commit is contained in:
		@@ -1322,23 +1322,23 @@ func mergeMap(original, patch map[string]interface{}, schema LookupPatchMeta, me
 | 
				
			|||||||
		// If they're both maps or lists, recurse into the value.
 | 
							// If they're both maps or lists, recurse into the value.
 | 
				
			||||||
		switch originalType.Kind() {
 | 
							switch originalType.Kind() {
 | 
				
			||||||
		case reflect.Map:
 | 
							case reflect.Map:
 | 
				
			||||||
			subschema, patchMeta, err := schema.LookupPatchMetadataForStruct(k)
 | 
								subschema, patchMeta, err2 := schema.LookupPatchMetadataForStruct(k)
 | 
				
			||||||
			if err != nil {
 | 
								if err2 != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err2
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, patchStrategy, err := extractRetainKeysPatchStrategy(patchMeta.GetPatchStrategies())
 | 
								_, patchStrategy, err2 := extractRetainKeysPatchStrategy(patchMeta.GetPatchStrategies())
 | 
				
			||||||
			if err != nil {
 | 
								if err2 != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err2
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			original[k], err = mergeMapHandler(original[k], patchV, subschema, patchStrategy, mergeOptions)
 | 
								original[k], err = mergeMapHandler(original[k], patchV, subschema, patchStrategy, mergeOptions)
 | 
				
			||||||
		case reflect.Slice:
 | 
							case reflect.Slice:
 | 
				
			||||||
			subschema, patchMeta, err := schema.LookupPatchMetadataForSlice(k)
 | 
								subschema, patchMeta, err2 := schema.LookupPatchMetadataForSlice(k)
 | 
				
			||||||
			if err != nil {
 | 
								if err2 != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err2
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, patchStrategy, err := extractRetainKeysPatchStrategy(patchMeta.GetPatchStrategies())
 | 
								_, patchStrategy, err2 := extractRetainKeysPatchStrategy(patchMeta.GetPatchStrategies())
 | 
				
			||||||
			if err != nil {
 | 
								if err2 != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err2
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			original[k], err = mergeSliceHandler(original[k], patchV, subschema, patchStrategy, patchMeta.GetPatchMergeKey(), isDeleteList, mergeOptions)
 | 
								original[k], err = mergeSliceHandler(original[k], patchV, subschema, patchStrategy, patchMeta.GetPatchMergeKey(), isDeleteList, mergeOptions)
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -654,6 +654,21 @@ mergingIntList:
 | 
				
			|||||||
			ExpectedError: "doesn't match",
 | 
								ExpectedError: "doesn't match",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Description: "missing merge key should error out",
 | 
				
			||||||
 | 
							StrategicMergePatchRawTestCaseData: StrategicMergePatchRawTestCaseData{
 | 
				
			||||||
 | 
								Original: []byte(`
 | 
				
			||||||
 | 
					mergingList:
 | 
				
			||||||
 | 
					  - name: 1
 | 
				
			||||||
 | 
					    value: a
 | 
				
			||||||
 | 
					`),
 | 
				
			||||||
 | 
								TwoWay: []byte(`
 | 
				
			||||||
 | 
					mergingList:
 | 
				
			||||||
 | 
					  - value: b
 | 
				
			||||||
 | 
					`),
 | 
				
			||||||
 | 
								ExpectedError: "does not contain declared merge key",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestCustomStrategicMergePatch(t *testing.T) {
 | 
					func TestCustomStrategicMergePatch(t *testing.T) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user