github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edge/pkg/metamanager/client/metaclient.go (about) 1 package client 2 3 import ( 4 "time" 5 6 "k8s.io/apimachinery/pkg/util/wait" 7 "k8s.io/klog" 8 9 beehiveContext "github.com/kubeedge/beehive/pkg/core/context" 10 "github.com/kubeedge/beehive/pkg/core/model" 11 "github.com/kubeedge/kubeedge/edge/pkg/metamanager" 12 ) 13 14 const ( 15 syncPeriod = 10 * time.Millisecond 16 syncMsgRespTimeout = 1 * time.Minute 17 ) 18 19 //CoreInterface is interface of mataclient 20 type CoreInterface interface { 21 PodsGetter 22 PodStatusGetter 23 ConfigMapsGetter 24 NodesGetter 25 NodeStatusGetter 26 SecretsGetter 27 EndpointsGetter 28 ServiceGetter 29 PersistentVolumesGetter 30 PersistentVolumeClaimsGetter 31 VolumeAttachmentsGetter 32 ListenerGetter 33 } 34 35 type metaClient struct { 36 send SendInterface 37 } 38 39 func (m *metaClient) Pods(namespace string) PodsInterface { 40 return newPods(namespace, m.send) 41 } 42 43 func (m *metaClient) ConfigMaps(namespace string) ConfigMapsInterface { 44 return newConfigMaps(namespace, m.send) 45 } 46 47 func (m *metaClient) Nodes(namespace string) NodesInterface { 48 return newNodes(namespace, m.send) 49 } 50 51 func (m *metaClient) NodeStatus(namespace string) NodeStatusInterface { 52 return newNodeStatus(namespace, m.send) 53 } 54 55 func (m *metaClient) Secrets(namespace string) SecretsInterface { 56 return newSecrets(namespace, m.send) 57 } 58 59 func (m *metaClient) PodStatus(namespace string) PodStatusInterface { 60 return newPodStatus(namespace, m.send) 61 } 62 63 //New creates a new metaclient 64 func (m *metaClient) Endpoints(namespace string) EndpointsInterface { 65 return newEndpoints(namespace, m.send) 66 } 67 68 // New Services metaClient 69 func (m *metaClient) Services(namespace string) ServiceInterface { 70 return newServices(namespace, m.send) 71 } 72 73 // New PersistentVolumes metaClient 74 func (m *metaClient) PersistentVolumes(namespace string) PersistentVolumesInterface { 75 return newPersistentVolumes(namespace, m.send) 76 } 77 78 // New PersistentVolumeClaims metaClient 79 func (m *metaClient) PersistentVolumeClaims(namespace string) PersistentVolumeClaimsInterface { 80 return newPersistentVolumeClaims(namespace, m.send) 81 } 82 83 // New VolumeAttachments metaClient 84 func (m *metaClient) VolumeAttachments(namespace string) VolumeAttachmentsInterface { 85 return newVolumeAttachments(namespace, m.send) 86 } 87 88 // New Listener metaClient 89 func (m *metaClient) Listener() ListenInterface { 90 return newListener(m.send) 91 } 92 93 // New creates new metaclient 94 func New() CoreInterface { 95 return &metaClient{ 96 send: newSend(), 97 } 98 } 99 100 //SendInterface is to sync interface 101 type SendInterface interface { 102 SendSync(message *model.Message) (*model.Message, error) 103 } 104 105 type send struct { 106 } 107 108 func newSend() SendInterface { 109 return &send{} 110 } 111 112 func (s *send) SendSync(message *model.Message) (*model.Message, error) { 113 var err error 114 var resp model.Message 115 retries := 0 116 err = wait.Poll(syncPeriod, syncMsgRespTimeout, func() (bool, error) { 117 resp, err = beehiveContext.SendSync(metamanager.MetaManagerModuleName, *message, syncMsgRespTimeout) 118 retries++ 119 if err == nil { 120 klog.Infof("send sync message %s successed and response: %v", message.GetResource(), resp) 121 return true, nil 122 } 123 if retries < 3 { 124 klog.Errorf("send sync message %s failed, error:%v, retries: %d", message.GetResource(), err, retries) 125 return false, nil 126 } 127 return true, err 128 129 }) 130 return &resp, err 131 }