-
Notifications
You must be signed in to change notification settings - Fork 2
/
proxymulticlient.go
71 lines (59 loc) · 1.56 KB
/
proxymulticlient.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package client
import (
"sync"
"github.com/symcn/api"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/klog/v2"
)
type proxyMultiClient struct {
ccm api.ClusterConfigurationManager
scheme *runtime.Scheme
cache map[string]api.MingleProxyClient
sync.Mutex
}
func NewMingleProxyClient(ccm api.ClusterConfigurationManager, scheme *runtime.Scheme) api.MultiProxyClient {
return &proxyMultiClient{
ccm: ccm,
scheme: scheme,
cache: make(map[string]api.MingleProxyClient),
}
}
func (pm *proxyMultiClient) GetAll() []api.MingleProxyClient {
clsList, err := pm.ccm.GetAll()
if err != nil {
klog.Warningf("Not found proxy client config")
return nil
}
cliList := make([]api.MingleProxyClient, 0, len(clsList))
for _, cls := range clsList {
cli, ok := pm.GetProxyClientFromCache(cls.GetName())
if !ok {
cli, err = NewProxyGatewayMingleClient(cls, pm.scheme)
if err != nil {
klog.Errorf("Build proxy client error: %+v, ignore.", err.Error())
continue
}
pm.PutProxyClientToCache(cls.GetName(), cli)
}
cliList = append(cliList, cli)
}
return cliList
}
func (pm *proxyMultiClient) GetProxyClientFromCache(clsName string) (api.MingleProxyClient, bool) {
pm.Lock()
defer pm.Unlock()
cli, ok := pm.cache[clsName]
return cli, ok
}
func (pm *proxyMultiClient) PutProxyClientToCache(clsName string, cli api.MingleProxyClient) {
pm.Lock()
defer pm.Unlock()
if len(pm.cache) == 0 {
pm.cache = make(map[string]api.MingleProxyClient)
}
// // TODO: close old client
// oldCli, ok := pm.cache[clsName]
// if ok {
// }
pm.cache[clsName] = cli
}