Skip to content

Commit 0b8789c

Browse files
authored
Merge pull request #150 from nokia/fix147
fix consul loader behaviour with multiple services
2 parents e28021d + 5c213db commit 0b8789c

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

loaders/consul_loader/consul_loader.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func init() {
4545
return &consulLoader{
4646
cfg: &cfg{},
4747
m: new(sync.Mutex),
48-
lastTargets: make(map[string]*types.TargetConfig),
48+
lastTargets: make(map[string]map[string]*types.TargetConfig),
4949
logger: log.New(io.Discard, loggingPrefix, utils.DefaultLoggingFlags),
5050
}
5151
})
@@ -54,9 +54,10 @@ func init() {
5454
type consulLoader struct {
5555
cfg *cfg
5656
// decoder *consulstructure.Decoder
57-
client *api.Client
58-
m *sync.Mutex
59-
lastTargets map[string]*types.TargetConfig
57+
client *api.Client
58+
m *sync.Mutex
59+
// map of targets per service
60+
lastTargets map[string]map[string]*types.TargetConfig
6061
targetConfigFn func(*types.TargetConfig) error
6162
logger *log.Logger
6263
//
@@ -177,14 +178,18 @@ CLIENT:
177178
return
178179
}
179180
tcs := make(map[string]*types.TargetConfig)
181+
srvName := ""
180182
for _, se := range ses {
183+
srvName = se.Service.Service
181184
tc, err := c.serviceEntryToTargetConfig(se)
182185
if err != nil {
183186
c.logger.Printf("Failed to convert service entry %+v to a target config: %v", se, err)
187+
continue
184188
}
185189
tcs[tc.Name] = tc
186190
}
187-
c.updateTargets(ctx, tcs, opChan)
191+
192+
c.updateTargets(ctx, srvName, tcs, opChan)
188193
}
189194
}
190195
}()
@@ -376,14 +381,18 @@ func (c *consulLoader) serviceEntryToTargetConfig(se *api.ServiceEntry) (*types.
376381
return nil, nil
377382
}
378383

379-
func (c *consulLoader) updateTargets(ctx context.Context, tcs map[string]*types.TargetConfig, opChan chan *loaders.TargetOperation) {
380-
targetOp, err := c.runActions(ctx, tcs, loaders.Diff(c.lastTargets, tcs))
384+
func (c *consulLoader) updateTargets(ctx context.Context, srvName string, tcs map[string]*types.TargetConfig, opChan chan *loaders.TargetOperation) {
385+
targetOp, err := c.runActions(ctx, tcs, loaders.Diff(c.lastTargets[srvName], tcs))
381386
if err != nil {
382387
c.logger.Printf("failed to run actions: %v", err)
383388
return
384389
}
385390
numAdds := len(targetOp.Add)
386391
numDels := len(targetOp.Del)
392+
if c.cfg.Debug {
393+
c.logger.Printf("updating service %s with targets=%v", srvName, tcs)
394+
c.logger.Printf("updating service %s with op=%v", srvName, targetOp)
395+
}
387396
defer func() {
388397
consulLoaderLoadedTargets.WithLabelValues(loaderType).Set(float64(numAdds))
389398
consulLoaderDeletedTargets.WithLabelValues(loaderType).Set(float64(numDels))
@@ -393,13 +402,17 @@ func (c *consulLoader) updateTargets(ctx context.Context, tcs map[string]*types.
393402
return
394403
}
395404
c.m.Lock()
405+
if _, ok := c.lastTargets[srvName]; !ok {
406+
c.lastTargets[srvName] = make(map[string]*types.TargetConfig)
407+
}
396408
for _, add := range targetOp.Add {
397-
c.lastTargets[add.Name] = add
409+
c.lastTargets[srvName][add.Name] = add
398410
}
399411
for _, del := range targetOp.Del {
400-
delete(c.lastTargets, del)
412+
delete(c.lastTargets[srvName], del)
401413
}
402414
c.m.Unlock()
415+
403416
opChan <- targetOp
404417
}
405418

0 commit comments

Comments
 (0)