Skip to content

Commit

Permalink
consul: cleanup registration code
Browse files Browse the repository at this point in the history
Using a variable from different go routines without synchronization
looks fishy. Better to move it into the go routine.
  • Loading branch information
magiconair committed Nov 8, 2017
1 parent 1f9c9ff commit 4dbab1b
Showing 1 changed file with 14 additions and 14 deletions.
28 changes: 14 additions & 14 deletions registry/consul/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,8 @@ import (
// dereg <- true // trigger deregistration
// <-dereg // wait for completion
//
func register(c *api.Client, service *api.AgentServiceRegistration) (dereg chan bool) {
var serviceID string

registered := func() bool {
func register(c *api.Client, service *api.AgentServiceRegistration) chan bool {
registered := func(serviceID string) bool {
if serviceID == "" {
return false
}
Expand All @@ -38,38 +36,40 @@ func register(c *api.Client, service *api.AgentServiceRegistration) (dereg chan
return services[serviceID] != nil
}

register := func() {
register := func() string {
if err := c.Agent().ServiceRegister(service); err != nil {
log.Printf("[ERROR] consul: Cannot register fabio in consul. %s", err)
return
return ""
}

log.Printf("[INFO] consul: Registered fabio with id %q", service.ID)
log.Printf("[INFO] consul: Registered fabio with address %q", service.Address)
log.Printf("[INFO] consul: Registered fabio with tags %q", strings.Join(service.Tags, ","))
log.Printf("[INFO] consul: Registered fabio with health check to %q", service.Check.HTTP)

serviceID = service.ID
return service.ID
}

deregister := func() {
deregister := func(serviceID string) {
log.Printf("[INFO] consul: Deregistering fabio")
c.Agent().ServiceDeregister(serviceID)
}

dereg = make(chan bool)
dereg := make(chan bool)
go func() {
register()
var serviceID string
for {
if !registered(serviceID) {
serviceID = register()
}

select {
case <-dereg:
deregister()
deregister(serviceID)
dereg <- true
return
case <-time.After(time.Second):
if !registered() {
register()
}
// continue
}
}
}()
Expand Down

0 comments on commit 4dbab1b

Please sign in to comment.