Skip to content

Commit 5fa83ea

Browse files
rmaticevicaiharos
authored andcommitted
BUG/MINOR: discovery: reload haproxy on changes
1 parent 0b1618e commit 5fa83ea

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

configure_data_plane.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,10 @@ func configureAPI(api *operations.DataPlaneAPI) http.Handler {
504504
})
505505

506506
// set up service discovery handlers
507-
discovery := service_discovery.NewServiceDiscoveries(client.Configuration)
507+
discovery := service_discovery.NewServiceDiscoveries(service_discovery.ServiceDiscoveriesParams{
508+
Client: client.Configuration,
509+
ReloadAgent: ra,
510+
})
508511
api.ServiceDiscoveryCreateConsulHandler = &handlers.CreateConsulHandlerImpl{Discovery: discovery, PersistCallback: cfg.SaveConsuls}
509512
api.ServiceDiscoveryDeleteConsulHandler = &handlers.DeleteConsulHandlerImpl{Discovery: discovery, PersistCallback: cfg.SaveConsuls}
510513
api.ServiceDiscoveryGetConsulHandler = &handlers.GetConsulHandlerImpl{Discovery: discovery}

discovery/consul_service_discovery.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,23 @@ import (
2222
"time"
2323

2424
"github.com/haproxytech/client-native/v2/configuration"
25+
"github.com/haproxytech/dataplaneapi/haproxy"
2526
"github.com/haproxytech/models/v2"
2627
)
2728

2829
type consulServiceDiscovery struct {
2930
consulServices map[string]*consulInstance
3031
client *configuration.Client
32+
reloadAgent haproxy.IReloadAgent
3133
mu sync.RWMutex
3234
}
3335

3436
//NewConsulDiscoveryService creates a new ServiceDiscovery that connects to consul
35-
func NewConsulDiscoveryService(client *configuration.Client) ServiceDiscovery {
37+
func NewConsulDiscoveryService(params ServiceDiscoveriesParams) ServiceDiscovery {
3638
return &consulServiceDiscovery{
3739
consulServices: make(map[string]*consulInstance),
38-
client: client,
40+
client: params.Client,
41+
reloadAgent: params.ReloadAgent,
3942
}
4043
}
4144

@@ -57,7 +60,7 @@ func (c *consulServiceDiscovery) AddNode(id string, params ServiceDiscoveryParam
5760
instance := &consulInstance{
5861
params: cParams,
5962
timeout: timeout,
60-
discoveryConfig: NewServiceDiscoveryInstance(c.client, discoveryInstanceParams{
63+
discoveryConfig: NewServiceDiscoveryInstance(c.client, c.reloadAgent, discoveryInstanceParams{
6164
Whitelist: cParams.ServiceWhitelist,
6265
Blacklist: cParams.ServiceBlacklist,
6366
ServerSlotsBase: int(*cParams.ServerSlotsBase),

discovery/service_discovery.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"sync"
2121

2222
"github.com/haproxytech/client-native/v2/configuration"
23+
"github.com/haproxytech/dataplaneapi/haproxy"
2324
)
2425

2526
//ServiceDiscoveryParams configuration for a specific service discovery
@@ -45,19 +46,23 @@ type ServiceDiscoveries interface {
4546
UpdateNode(serviceName string, id string, params ServiceDiscoveryParams) error
4647
}
4748

49+
// ServiceDiscoveriesParams contain the parameters for the service discovery initialization
50+
type ServiceDiscoveriesParams struct {
51+
Client *configuration.Client
52+
ReloadAgent haproxy.IReloadAgent
53+
}
54+
4855
//NewServiceDiscoveries creates a new ServiceDiscoveries instance
49-
func NewServiceDiscoveries(client *configuration.Client) ServiceDiscoveries {
56+
func NewServiceDiscoveries(params ServiceDiscoveriesParams) ServiceDiscoveries {
5057
sd := &serviceDiscoveryImpl{
5158
services: make(map[string]ServiceDiscovery),
52-
client: client,
5359
}
5460
//nolint
55-
sd.AddService("consul", NewConsulDiscoveryService(client))
61+
sd.AddService("consul", NewConsulDiscoveryService(params))
5662
return sd
5763
}
5864

5965
type serviceDiscoveryImpl struct {
60-
client *configuration.Client
6166
services map[string]ServiceDiscovery
6267
mu sync.RWMutex
6368
}

discovery/service_discovery_instance.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package discovery
1717

1818
import (
1919
"github.com/haproxytech/client-native/v2/configuration"
20+
"github.com/haproxytech/dataplaneapi/haproxy"
2021
)
2122

2223
//ServiceInstance specifies the needed information required from the service to provide for the ServiceDiscoveryInstance.
@@ -44,16 +45,18 @@ type discoveryInstanceParams struct {
4445
type ServiceDiscoveryInstance struct {
4546
services map[string]*confService
4647
client *configuration.Client
48+
reloadAgent haproxy.IReloadAgent
4749
params discoveryInstanceParams
4850
transactionID string
4951
}
5052

5153
//NewServiceDiscoveryInstance creates a new ServiceDiscoveryInstance.
52-
func NewServiceDiscoveryInstance(client *configuration.Client, params discoveryInstanceParams) *ServiceDiscoveryInstance {
54+
func NewServiceDiscoveryInstance(client *configuration.Client, reloadAgent haproxy.IReloadAgent, params discoveryInstanceParams) *ServiceDiscoveryInstance {
5355
return &ServiceDiscoveryInstance{
54-
client: client,
55-
params: params,
56-
services: make(map[string]*confService),
56+
client: client,
57+
reloadAgent: reloadAgent,
58+
params: params,
59+
services: make(map[string]*confService),
5760
}
5861
}
5962

@@ -104,7 +107,11 @@ func (s *ServiceDiscoveryInstance) UpdateServices(services []ServiceInstance) er
104107
}
105108
reload = reload || s.removeDeleted()
106109
if reload {
107-
return s.commitTransaction()
110+
if err := s.commitTransaction(); err != nil {
111+
return err
112+
}
113+
s.reloadAgent.Reload()
114+
return nil
108115
}
109116
s.deleteTransaction()
110117
return nil

0 commit comments

Comments
 (0)