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  }