Add HasOpenAPISchemaChanged to DiscoveryInterface

Kubernetes-commit: 235a57a29e5d232f411a23148643533140e646d1
This commit is contained in:
Kevin Delgado
2021-07-16 22:53:39 +00:00
committed by Kubernetes Publisher
parent 5d4570c9e0
commit 4389b4f36a
4 changed files with 43 additions and 32 deletions

View File

@@ -1,8 +1,6 @@
package v1
import (
"crypto/sha512"
"encoding/json"
"fmt"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -32,40 +30,25 @@ type objectTypeCache interface {
type nonCachingObjectTypeCache struct {
// TODO: lock this?
discoveryClient discovery.DiscoveryInterface
docHash [sha512.Size]uint8
gvkParser *fieldmanager.GvkParser
typeForGVK map[schema.GroupVersionKind]*typed.ParseableType
}
// objectTypeForGVK retrieves the typed.ParseableType for a given gvk from the cache
func (c *nonCachingObjectTypeCache) objectTypeForGVK(gvk schema.GroupVersionKind) (*typed.ParseableType, error) {
doc, err := c.discoveryClient.OpenAPISchema()
if err != nil {
return nil, err
}
docBytes, err := json.Marshal(doc)
if err != nil {
return nil, err
}
docHash := sha512.Sum512(docBytes)
// cache hit
if c.docHash == docHash {
if !c.discoveryClient.HasOpenAPISchemaChanged() && c.gvkParser != nil {
// cache hit
fmt.Println("cache hit")
fmt.Printf("docHash = %+v\n", docHash)
objType, ok := c.typeForGVK[gvk]
if ok {
fmt.Println("gvk recognized")
fmt.Printf("gvk = %+v\n", gvk)
return objType, nil
}
objType = c.gvkParser.Type(gvk)
c.typeForGVK[gvk] = objType
return objType, nil
fmt.Printf("gvk = %+v\n", gvk)
return c.gvkParser.Type(gvk), nil
} else {
fmt.Println("cache miss")
// cache miss
fmt.Println("cache miss")
fmt.Printf("gvk = %+v\n", gvk)
doc, err := c.discoveryClient.OpenAPISchema()
if err != nil {
return nil, err
}
models, err := proto.NewOpenAPIData(doc)
if err != nil {
return nil, err
@@ -77,11 +60,7 @@ func (c *nonCachingObjectTypeCache) objectTypeForGVK(gvk schema.GroupVersionKind
}
objType := gvkParser.Type(gvk)
c.docHash = docHash
c.gvkParser = gvkParser
c.typeForGVK = map[schema.GroupVersionKind]*typed.ParseableType{
gvk: objType,
}
return objType, nil
}