diff --git a/applyconfigurations/meta/v1/unstructured.go b/applyconfigurations/meta/v1/unstructured.go index 67f95026..222772ad 100644 --- a/applyconfigurations/meta/v1/unstructured.go +++ b/applyconfigurations/meta/v1/unstructured.go @@ -19,22 +19,22 @@ type UnstructuredExtractor interface { ExtractUnstructuredStatus(object *unstructured.Unstructured, fieldManager string) (*unstructured.Unstructured, error) } -// objectTypeCache is a cache of typed.ParseableTypes -type objectTypeCache interface { - objectTypeForGVK(gvk schema.GroupVersionKind) (*typed.ParseableType, error) -} +//// objectTypeCache is a cache of typed.ParseableTypes +//type objectTypeCache interface { +// objectTypeForGVK(gvk schema.GroupVersionKind) (*typed.ParseableType, error) +//} -// nonCachingObjectTypeCache is a objectTypeCache that does no caching +// objectTypeCache is a objectTypeCache that does no caching // (i.e. it downloads the OpenAPISchema every time) // Useful during the proof-of-concept stage until we agree on a caching solution. -type nonCachingObjectTypeCache struct { +type objectTypeCache struct { // TODO: lock this? discoveryClient discovery.DiscoveryInterface gvkParser *fieldmanager.GvkParser } // objectTypeForGVK retrieves the typed.ParseableType for a given gvk from the cache -func (c *nonCachingObjectTypeCache) objectTypeForGVK(gvk schema.GroupVersionKind) (*typed.ParseableType, error) { +func (c *objectTypeCache) objectTypeForGVK(gvk schema.GroupVersionKind) (*typed.ParseableType, error) { if !c.discoveryClient.HasOpenAPISchemaChanged() && c.gvkParser != nil { // cache hit @@ -67,14 +67,14 @@ func (c *nonCachingObjectTypeCache) objectTypeForGVK(gvk schema.GroupVersionKind } type extractor struct { - cache objectTypeCache + cache *objectTypeCache } // NewUnstructuredExtractor creates the extractor with which you can extract the applied configuration // for a given manager from an unstructured object. func NewUnstructuredExtractor(dc discovery.DiscoveryInterface) UnstructuredExtractor { return &extractor{ - cache: &nonCachingObjectTypeCache{ + cache: &objectTypeCache{ discoveryClient: dc, }, } diff --git a/discovery/cached/memory/memcache.go b/discovery/cached/memory/memcache.go index 9de389fa..5d54092f 100644 --- a/discovery/cached/memory/memcache.go +++ b/discovery/cached/memory/memcache.go @@ -149,6 +149,10 @@ func (d *memCacheClient) OpenAPISchema() (*openapi_v2.Document, error) { return d.delegate.OpenAPISchema() } +func (d *memCacheClient) HasOpenAPISchemaChanged() bool { + return d.delegate.HasOpenAPISchemaChanged() +} + func (d *memCacheClient) Fresh() bool { d.lock.RLock() defer d.lock.RUnlock() diff --git a/discovery/fake/discovery.go b/discovery/fake/discovery.go index f0cc2dbf..fc89bed0 100644 --- a/discovery/fake/discovery.go +++ b/discovery/fake/discovery.go @@ -153,6 +153,10 @@ func (c *FakeDiscovery) OpenAPISchema() (*openapi_v2.Document, error) { return &openapi_v2.Document{}, nil } +func (c *FakeDiscovery) HasOpenAPISchemaChanged() bool { + return true +} + // RESTClient returns a RESTClient that is used to communicate with API server // by this client implementation. func (c *FakeDiscovery) RESTClient() restclient.Interface {