@@ -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() {
5454type 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