@@ -40,7 +40,7 @@ type serviceDiscoveryClient struct {
40
40
// from a given AWS client config.
41
41
func NewDefaultServiceDiscoveryClient (cfg * aws.Config , clusterUtils model.ClusterUtils ) ServiceDiscoveryClient {
42
42
return & serviceDiscoveryClient {
43
- log : common .NewLogger ("cloudmap" ),
43
+ log : common .NewLogger ("cloudmap" , "client" ),
44
44
sdApi : NewServiceDiscoveryApiFromConfig (cfg ),
45
45
cache : NewDefaultServiceDiscoveryClientCache (),
46
46
clusterUtils : clusterUtils ,
@@ -49,7 +49,7 @@ func NewDefaultServiceDiscoveryClient(cfg *aws.Config, clusterUtils model.Cluste
49
49
50
50
func NewServiceDiscoveryClientWithCustomCache (cfg * aws.Config , cacheConfig * SdCacheConfig , clusterUtils model.ClusterUtils ) ServiceDiscoveryClient {
51
51
return & serviceDiscoveryClient {
52
- log : common .NewLogger ("cloudmap" ),
52
+ log : common .NewLogger ("cloudmap" , "client" ),
53
53
sdApi : NewServiceDiscoveryApiFromConfig (cfg ),
54
54
cache : NewServiceDiscoveryClientCache (cacheConfig ),
55
55
clusterUtils : clusterUtils ,
@@ -59,6 +59,10 @@ func NewServiceDiscoveryClientWithCustomCache(cfg *aws.Config, cacheConfig *SdCa
59
59
func (sdc * serviceDiscoveryClient ) ListServices (ctx context.Context , nsName string ) (svcs []* model.Service , err error ) {
60
60
svcIdMap , err := sdc .getServiceIds (ctx , nsName )
61
61
if err != nil {
62
+ // Ignore resource not found error, as it will indicate deleted resources in CloudMap
63
+ if common .IsNotFound (err ) {
64
+ return svcs , nil
65
+ }
62
66
return svcs , err
63
67
}
64
68
@@ -81,13 +85,13 @@ func (sdc *serviceDiscoveryClient) ListServices(ctx context.Context, nsName stri
81
85
func (sdc * serviceDiscoveryClient ) CreateService (ctx context.Context , nsName string , svcName string ) error {
82
86
sdc .log .Info ("creating a new service" , "namespace" , nsName , "name" , svcName )
83
87
84
- nsMap , err := sdc .getNamespaces (ctx )
85
- if err != nil {
88
+ namespace , err := sdc .getNamespace (ctx , nsName )
89
+ if common . IsUnknown ( err ) {
86
90
return err
87
91
}
88
92
89
- namespace := nsMap [ nsName ]
90
- if namespace == nil {
93
+ if common . IsNotFound ( err ) {
94
+ sdc . log . Info ( "namespace not found for service" , " namespace" , nsName , "service" , svcName )
91
95
// Create HttpNamespace if the namespace is not present in CloudMap
92
96
namespace , err = sdc .createNamespace (ctx , nsName )
93
97
if err != nil {
@@ -107,27 +111,20 @@ func (sdc *serviceDiscoveryClient) CreateService(ctx context.Context, nsName str
107
111
108
112
func (sdc * serviceDiscoveryClient ) GetService (ctx context.Context , nsName string , svcName string ) (svc * model.Service , err error ) {
109
113
sdc .log .Info ("fetching a service" , "namespace" , nsName , "name" , svcName )
110
- endpts , cacheHit := sdc .cache .GetEndpoints (nsName , svcName )
111
-
112
- if cacheHit {
114
+ if endpts , found := sdc .cache .GetEndpoints (nsName , svcName ); found {
113
115
return & model.Service {
114
116
Namespace : nsName ,
115
117
Name : svcName ,
116
118
Endpoints : endpts ,
117
119
}, nil
118
120
}
119
121
120
- svcIdMap , err : = sdc .getServiceIds (ctx , nsName )
122
+ _ , err = sdc .getServiceId (ctx , nsName , svcName )
121
123
if err != nil {
122
124
return nil , err
123
125
}
124
- _ , found := svcIdMap [svcName ]
125
- if ! found {
126
- return nil , nil
127
- }
128
-
129
- endpts , err = sdc .getEndpoints (ctx , nsName , svcName )
130
126
127
+ endpts , err := sdc .getEndpoints (ctx , nsName , svcName )
131
128
if err != nil {
132
129
return nil , err
133
130
}
@@ -147,14 +144,10 @@ func (sdc *serviceDiscoveryClient) RegisterEndpoints(ctx context.Context, nsName
147
144
148
145
sdc .log .Info ("registering endpoints" , "namespaceName" , nsName , "serviceName" , svcName , "endpoints" , endpts )
149
146
150
- svcIdMap , err := sdc .getServiceIds (ctx , nsName )
147
+ svcId , err := sdc .getServiceId (ctx , nsName , svcName )
151
148
if err != nil {
152
149
return err
153
150
}
154
- svcId , found := svcIdMap [svcName ]
155
- if ! found {
156
- return fmt .Errorf ("service not found in Cloud Map: %s" , svcName )
157
- }
158
151
159
152
opCollector := NewOperationCollector ()
160
153
@@ -190,14 +183,10 @@ func (sdc *serviceDiscoveryClient) DeleteEndpoints(ctx context.Context, nsName s
190
183
191
184
sdc .log .Info ("deleting endpoints" , "namespaceName" , nsName , "serviceName" , svcName , "endpoints" , endpts )
192
185
193
- svcIdMap , err := sdc .getServiceIds (ctx , nsName )
186
+ svcId , err := sdc .getServiceId (ctx , nsName , svcName )
194
187
if err != nil {
195
188
return err
196
189
}
197
- svcId , found := svcIdMap [svcName ]
198
- if ! found {
199
- return fmt .Errorf ("service not found in Cloud Map: %s" , svcName )
200
- }
201
190
202
191
opCollector := NewOperationCollector ()
203
192
@@ -225,8 +214,8 @@ func (sdc *serviceDiscoveryClient) DeleteEndpoints(ctx context.Context, nsName s
225
214
}
226
215
227
216
func (sdc * serviceDiscoveryClient ) getEndpoints (ctx context.Context , nsName string , svcName string ) (endpts []* model.Endpoint , err error ) {
228
- endpts , cacheHit := sdc .cache .GetEndpoints (nsName , svcName )
229
- if cacheHit {
217
+ endpts , found := sdc .cache .GetEndpoints (nsName , svcName )
218
+ if found {
230
219
return endpts , nil
231
220
}
232
221
@@ -239,7 +228,7 @@ func (sdc *serviceDiscoveryClient) getEndpoints(ctx context.Context, nsName stri
239
228
queryParameters := map [string ]string {
240
229
model .ClusterSetIdAttr : clusterProperties .ClusterSetId (),
241
230
}
242
- insts , err := sdc .sdApi .DiscoverInstances (ctx , nsName , svcName , & queryParameters )
231
+ insts , err := sdc .sdApi .DiscoverInstances (ctx , nsName , svcName , queryParameters )
243
232
if err != nil {
244
233
return nil , err
245
234
}
@@ -257,10 +246,23 @@ func (sdc *serviceDiscoveryClient) getEndpoints(ctx context.Context, nsName stri
257
246
return endpts , nil
258
247
}
259
248
260
- func (sdc * serviceDiscoveryClient ) getNamespaces (ctx context.Context ) (namespace map [string ]* model.Namespace , err error ) {
249
+ func (sdc * serviceDiscoveryClient ) getNamespace (ctx context.Context , nsName string ) (namespace * model.Namespace , err error ) {
250
+ namespaces , err := sdc .getNamespaces (ctx )
251
+ if err != nil {
252
+ return nil , err
253
+ }
254
+
255
+ if namespace , ok := namespaces [nsName ]; ok {
256
+ return namespace , nil
257
+ }
258
+
259
+ return nil , common .NotFoundError (fmt .Sprintf ("namespace: %s" , nsName ))
260
+ }
261
+
262
+ func (sdc * serviceDiscoveryClient ) getNamespaces (ctx context.Context ) (namespaces map [string ]* model.Namespace , err error ) {
261
263
// We are assuming a unique namespace name per account
262
- namespaces , cacheHit := sdc .cache .GetNamespaceMap ()
263
- if cacheHit {
264
+ namespaces , found := sdc .cache .GetNamespaceMap ()
265
+ if found {
264
266
return namespaces , nil
265
267
}
266
268
@@ -273,15 +275,27 @@ func (sdc *serviceDiscoveryClient) getNamespaces(ctx context.Context) (namespace
273
275
return namespaces , nil
274
276
}
275
277
278
+ func (sdc * serviceDiscoveryClient ) getServiceId (ctx context.Context , nsName string , svcName string ) (svcId string , err error ) {
279
+ svcIdMap , err := sdc .getServiceIds (ctx , nsName )
280
+ if err != nil {
281
+ return "" , err
282
+ }
283
+
284
+ if svcId , ok := svcIdMap [svcName ]; ok {
285
+ return svcId , nil
286
+ }
287
+
288
+ return "" , common .NotFoundError (fmt .Sprintf ("service: %s" , svcName ))
289
+ }
290
+
276
291
func (sdc * serviceDiscoveryClient ) getServiceIds (ctx context.Context , nsName string ) (map [string ]string , error ) {
277
- serviceIdMap , cacheHit := sdc .cache .GetServiceIdMap (nsName )
278
- if cacheHit {
292
+ serviceIdMap , found := sdc .cache .GetServiceIdMap (nsName )
293
+ if found {
279
294
return serviceIdMap , nil
280
295
}
281
296
282
- nsMap , err := sdc .getNamespaces (ctx )
283
- namespace := nsMap [nsName ]
284
- if err != nil || namespace == nil {
297
+ namespace , err := sdc .getNamespace (ctx , nsName )
298
+ if err != nil {
285
299
return nil , err
286
300
}
287
301
0 commit comments