mirror of
https://github.com/kubernetes/client-go.git
synced 2025-09-13 05:41:35 +00:00
Add HasOpenAPISchemaChanged to DiscoveryInterface
Kubernetes-commit: 235a57a29e5d232f411a23148643533140e646d1
This commit is contained in:
committed by
Kubernetes Publisher
parent
5d4570c9e0
commit
4389b4f36a
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user