Merge pull request #132004 from alvaroaleman/fix-fasf

ManagedFieldsObjectTracker: Reload scheme

Kubernetes-commit: c5c87bde8f0ff405f89ead5aff9f609b42e29b55
This commit is contained in:
Kubernetes Publisher 2025-05-29 16:54:17 -07:00
commit e9ca982cec
2 changed files with 32 additions and 7 deletions

View File

@ -631,7 +631,7 @@ type managedFieldObjectTracker struct {
ObjectTracker
scheme ObjectScheme
objectConverter runtime.ObjectConvertor
mapper meta.RESTMapper
mapper func() meta.RESTMapper
typeConverter managedfields.TypeConverter
}
@ -644,8 +644,10 @@ func NewFieldManagedObjectTracker(scheme *runtime.Scheme, decoder runtime.Decode
ObjectTracker: NewObjectTracker(scheme, decoder),
scheme: scheme,
objectConverter: scheme,
mapper: testrestmapper.TestOnlyStaticRESTMapper(scheme),
typeConverter: typeConverter,
mapper: func() meta.RESTMapper {
return testrestmapper.TestOnlyStaticRESTMapper(scheme)
},
typeConverter: typeConverter,
}
}
@ -654,7 +656,7 @@ func (t *managedFieldObjectTracker) Create(gvr schema.GroupVersionResource, obj
if err != nil {
return err
}
gvk, err := t.mapper.KindFor(gvr)
gvk, err := t.mapper().KindFor(gvr)
if err != nil {
return err
}
@ -698,8 +700,9 @@ func (t *managedFieldObjectTracker) Update(gvr schema.GroupVersionResource, obj
if err != nil {
return err
}
gvk, err := t.mapper.KindFor(gvr)
gvk, err := t.mapper().KindFor(gvr)
if err != nil {
println("kindfor")
return err
}
mgr, err := t.fieldManagerFor(gvk)
@ -728,7 +731,7 @@ func (t *managedFieldObjectTracker) Patch(gvr schema.GroupVersionResource, patch
if err != nil {
return err
}
gvk, err := t.mapper.KindFor(gvr)
gvk, err := t.mapper().KindFor(gvr)
if err != nil {
return err
}
@ -757,7 +760,7 @@ func (t *managedFieldObjectTracker) Apply(gvr schema.GroupVersionResource, apply
if err != nil {
return err
}
gvk, err := t.mapper.KindFor(gvr)
gvk, err := t.mapper().KindFor(gvr)
if err != nil {
return err
}

View File

@ -661,3 +661,25 @@ var configMapTypedSchema = typed.YAMLObject(`types:
namedType: __untyped_deduced_
elementRelationship: separable
`)
func TestManagedFieldsObjectTrackerReloadsScheme(t *testing.T) {
cmResource := schema.GroupVersionResource{Version: "v1", Resource: "configmaps"}
scheme := runtime.NewScheme()
codecs := serializer.NewCodecFactory(scheme)
// Create tracker without registered ConfigMap type
tracker := NewFieldManagedObjectTracker(scheme, codecs.UniversalDecoder(), configMapTypeConverter(scheme))
cm := &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "test-cm",
},
Data: map[string]string{"key": "value"},
}
// Register the type in scheme
scheme.AddKnownTypes(cmResource.GroupVersion(), &v1.ConfigMap{})
err := tracker.Create(cmResource, cm, "default", metav1.CreateOptions{FieldManager: "test-manager"})
assert.NoError(t, err, "Create should succeed after registering type")
}