Skip to content

Commit 93bfd54

Browse files
authored
Refactor client interface for service structs (#46)
1 parent 64c6cb1 commit 93bfd54

File tree

7 files changed

+398
-99
lines changed

7 files changed

+398
-99
lines changed

pkg/cloudmap/client.go

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@ type ServiceDiscoveryClient interface {
2626
// ListServices returns all services and their endpoints for a given namespace.
2727
ListServices(ctx context.Context, namespaceName string) ([]*model.Service, error)
2828

29-
// CreateService creates a Cloud Map service resource and returns the created service struct.
30-
CreateService(ctx context.Context, service *model.Service) error
29+
// CreateService creates a Cloud Map service resource, and namespace if necessary.
30+
CreateService(ctx context.Context, namespaceName string, serviceName string) error
3131

3232
// GetService returns a service resource fetched from AWS Cloud Map or nil if not found.
3333
GetService(ctx context.Context, namespaceName string, serviceName string) (*model.Service, error)
3434

3535
// RegisterEndpoints registers all endpoints for given service.
36-
RegisterEndpoints(ctx context.Context, service *model.Service) error
36+
RegisterEndpoints(ctx context.Context, namespaceName string, serviceName string, endpoints []*model.Endpoint) error
3737

3838
// DeleteEndpoints de-registers all endpoints for given service.
39-
DeleteEndpoints(ctx context.Context, service *model.Service) error
39+
DeleteEndpoints(ctx context.Context, namespaceName string, serviceName string, endpoints []*model.Endpoint) error
4040
}
4141

4242
type serviceDiscoveryClient struct {
@@ -59,8 +59,6 @@ func NewServiceDiscoveryClient(cfg *aws.Config) ServiceDiscoveryClient {
5959
}
6060

6161
func (sdc *serviceDiscoveryClient) ListServices(ctx context.Context, nsName string) (svcs []*model.Service, err error) {
62-
svcs = make([]*model.Service, 0)
63-
6462
nsId, err := sdc.getNamespaceId(ctx, nsName)
6563
if err != nil || nsId == "" {
6664
return svcs, err
@@ -73,14 +71,14 @@ func (sdc *serviceDiscoveryClient) ListServices(ctx context.Context, nsName stri
7371
}
7472

7573
for _, svcSum := range svcSums {
76-
endpts, endptsErr := sdc.ListEndpoints(ctx, svcSum.Id)
74+
sdc.cacheServiceId(nsName, svcSum.Name, svcSum.Id)
75+
76+
endpts, endptsErr := sdc.listEndpoints(ctx, svcSum.Id)
7777

78-
if err != nil {
78+
if endptsErr != nil {
7979
return svcs, endptsErr
8080
}
8181

82-
sdc.cacheServiceId(nsName, svcSum.Name, svcSum.Id)
83-
8482
svcs = append(svcs, &model.Service{
8583
Namespace: nsName,
8684
Name: svcSum.Name,
@@ -91,45 +89,31 @@ func (sdc *serviceDiscoveryClient) ListServices(ctx context.Context, nsName stri
9189
return svcs, nil
9290
}
9391

94-
func (sdc *serviceDiscoveryClient) ListEndpoints(ctx context.Context, serviceId string) (endpts []*model.Endpoint, err error) {
95-
96-
if cachedValue, exists := sdc.endpointCache.Get(serviceId); exists {
97-
return cachedValue.([]*model.Endpoint), nil
98-
}
99-
100-
endpts, err = sdc.sdApi.ListInstances(ctx, serviceId)
101-
102-
if err != nil {
103-
return nil, err
104-
}
105-
106-
sdc.cacheEndpoints(serviceId, endpts)
107-
108-
return endpts, nil
109-
}
110-
111-
func (sdc *serviceDiscoveryClient) CreateService(ctx context.Context, service *model.Service) (err error) {
112-
sdc.log.Info("creating a new service", "namespace", service.Namespace, "name", service.Name)
92+
func (sdc *serviceDiscoveryClient) CreateService(ctx context.Context, nsName string, svcName string) (err error) {
93+
sdc.log.Info("creating a new service", "namespace", nsName, "name", svcName)
11394

114-
nsId, err := sdc.getNamespaceId(ctx, service.Namespace)
95+
nsId, err := sdc.getNamespaceId(ctx, nsName)
11596
if err != nil {
11697
return err
11798
}
11899

119100
if nsId == "" {
120-
nsId, err = sdc.createNamespace(ctx, service.Namespace)
101+
nsId, err = sdc.createNamespace(ctx, nsName)
102+
}
103+
if err != nil {
104+
return err
121105
}
122106

123107
//TODO: Handle non-http namespaces
124-
svcId, err := sdc.sdApi.CreateService(ctx, nsId, service.Name)
108+
svcId, err := sdc.sdApi.CreateService(ctx, nsId, svcName)
125109

126110
if err != nil {
127111
return err
128112
}
129113

130-
sdc.cacheServiceId(service.Namespace, service.Name, svcId)
114+
sdc.cacheServiceId(nsName, svcName, svcId)
131115

132-
return sdc.RegisterEndpoints(ctx, service)
116+
return nil
133117
}
134118

135119
func (sdc *serviceDiscoveryClient) GetService(ctx context.Context, nsName string, svcName string) (svc *model.Service, err error) {
@@ -145,7 +129,7 @@ func (sdc *serviceDiscoveryClient) GetService(ctx context.Context, nsName string
145129
return nil, nil
146130
}
147131

148-
endpts, err := sdc.ListEndpoints(ctx, svcId)
132+
endpts, err := sdc.listEndpoints(ctx, svcId)
149133

150134
if err != nil {
151135
return nil, err
@@ -160,23 +144,22 @@ func (sdc *serviceDiscoveryClient) GetService(ctx context.Context, nsName string
160144
return svc, nil
161145
}
162146

163-
func (sdc *serviceDiscoveryClient) RegisterEndpoints(ctx context.Context, service *model.Service) (err error) {
164-
if len(service.Endpoints) == 0 {
165-
sdc.log.Info("skipping endpoint registration for empty endpoint list", "serviceName", service.Name)
147+
func (sdc *serviceDiscoveryClient) RegisterEndpoints(ctx context.Context, nsName string, svcName string, endpts []*model.Endpoint) (err error) {
148+
if len(endpts) == 0 {
149+
sdc.log.Info("skipping endpoint registration for empty endpoint list", "serviceName", svcName)
166150
return nil
167151
}
168152

169-
sdc.log.Info("registering endpoints", "namespaceName", service.Namespace,
170-
"serviceName", service.Name, "endpoints", service.Endpoints)
153+
sdc.log.Info("registering endpoints", "namespaceName", nsName, "serviceName", svcName, "endpoints", endpts)
171154

172-
svcId, err := sdc.getServiceId(ctx, service.Namespace, service.Name)
155+
svcId, err := sdc.getServiceId(ctx, nsName, svcName)
173156
if err != nil {
174157
return err
175158
}
176159

177160
opCollector := NewOperationCollector()
178161

179-
for _, endpt := range service.Endpoints {
162+
for _, endpt := range endpts {
180163
opCollector.Add(func() (opId string, err error) {
181164
return sdc.sdApi.RegisterInstance(ctx, svcId, endpt.Id, endpt.GetCloudMapAttributes())
182165
})
@@ -198,23 +181,23 @@ func (sdc *serviceDiscoveryClient) RegisterEndpoints(ctx context.Context, servic
198181
return nil
199182
}
200183

201-
func (sdc *serviceDiscoveryClient) DeleteEndpoints(ctx context.Context, service *model.Service) (err error) {
202-
if len(service.Endpoints) == 0 {
203-
sdc.log.Info("skipping endpoint deletion for empty endpoint list", "serviceName", service.Name)
184+
func (sdc *serviceDiscoveryClient) DeleteEndpoints(ctx context.Context, nsName string, svcName string, endpts []*model.Endpoint) (err error) {
185+
if len(endpts) == 0 {
186+
sdc.log.Info("skipping endpoint deletion for empty endpoint list", "serviceName", svcName)
204187
return nil
205188
}
206189

207-
sdc.log.Info("deleting endpoints", "namespaceName", service.Namespace,
208-
"serviceName", service.Name, "endpoints", service.Endpoints)
190+
sdc.log.Info("deleting endpoints", "namespaceName", nsName,
191+
"serviceName", svcName, "endpoints", endpts)
209192

210-
svcId, err := sdc.getServiceId(ctx, service.Namespace, service.Name)
193+
svcId, err := sdc.getServiceId(ctx, nsName, svcName)
211194
if err != nil {
212195
return err
213196
}
214197

215198
opCollector := NewOperationCollector()
216199

217-
for _, endpt := range service.Endpoints {
200+
for _, endpt := range endpts {
218201
opCollector.Add(func() (opId string, err error) {
219202
return sdc.sdApi.DeregisterInstance(ctx, svcId, endpt.Id)
220203
})
@@ -236,6 +219,23 @@ func (sdc *serviceDiscoveryClient) DeleteEndpoints(ctx context.Context, service
236219
return nil
237220
}
238221

222+
func (sdc *serviceDiscoveryClient) listEndpoints(ctx context.Context, serviceId string) (endpts []*model.Endpoint, err error) {
223+
224+
if cachedValue, exists := sdc.endpointCache.Get(serviceId); exists {
225+
return cachedValue.([]*model.Endpoint), nil
226+
}
227+
228+
endpts, err = sdc.sdApi.ListInstances(ctx, serviceId)
229+
230+
if err != nil {
231+
return nil, err
232+
}
233+
234+
sdc.cacheEndpoints(serviceId, endpts)
235+
236+
return endpts, nil
237+
}
238+
239239
func (sdc *serviceDiscoveryClient) getNamespaceId(ctx context.Context, nsName string) (nsId string, err error) {
240240
// We are assuming a unique namespace name per account
241241
if cachedValue, exists := sdc.namespaceIdCache.Get(nsName); exists {
@@ -307,10 +307,6 @@ func (sdc *serviceDiscoveryClient) createNamespace(ctx context.Context, nsName s
307307
return "", err
308308
}
309309

310-
if nsId == "" {
311-
return "", fmt.Errorf("failed to create namespace")
312-
}
313-
314310
sdc.cacheNamespaceId(nsName, nsId)
315311

316312
return nsId, nil

0 commit comments

Comments
 (0)