Skip to content

Commit 040f495

Browse files
ivanmatmatioktalz
authored andcommitted
BUG: pprof handler should be run once
1 parent 1d92751 commit 040f495

File tree

4 files changed

+43
-6
lines changed

4 files changed

+43
-6
lines changed

pkg/controller/handler.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ func (c *HAProxyController) initHandlers() {
5252
&handler.PatternFiles{},
5353
&handler.BackendCfgSnippet{},
5454
}
55-
if c.osArgs.PprofEnabled {
56-
c.updateHandlers = append(c.updateHandlers, handler.Pprof{})
57-
}
55+
5856
c.updateHandlers = append(c.updateHandlers, handler.Refresh{})
5957
}
6058

@@ -72,6 +70,9 @@ func (c *HAProxyController) startupHandlers() error {
7270
IPv6Addr: c.osArgs.IPV6BindAddr,
7371
},
7472
}
73+
if c.osArgs.PprofEnabled {
74+
handlers = append(handlers, handler.Pprof{})
75+
}
7576
for _, handler := range handlers {
7677
_, err := handler.Update(c.store, c.haproxy, c.annotations)
7778
if err != nil {

pkg/handler/pprof.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func (handler Pprof) Update(k store.K8s, h haproxy.HAProxy, a annotations.Annota
3030

3131
_, err = h.BackendGet(pprofBackend)
3232
if err != nil {
33-
err = h.BackendCreate(models.Backend{
33+
err = h.BackendCreatePermanently(models.Backend{
3434
Name: pprofBackend,
3535
Mode: "http",
3636
})

pkg/haproxy/api/api.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ type HAProxyClient interface { //nolint:interfacebloat
2222
BackendsGet() (models.Backends, error)
2323
BackendGet(backendName string) (*models.Backend, error)
2424
BackendCreate(backend models.Backend) error
25+
BackendCreatePermanently(backend models.Backend) error
26+
BackendCreateIfNotExist(backend models.Backend) error
2527
BackendEdit(backend models.Backend) error
2628
BackendDelete(backendName string) error
2729
BackendCfgSnippetSet(backendName string, value []string) error
@@ -75,6 +77,7 @@ type HAProxyClient interface { //nolint:interfacebloat
7577
type clientNative struct {
7678
nativeAPI clientnative.HAProxyClient
7779
activeBackends map[string]struct{}
80+
permanentBackends map[string]struct{}
7881
activeTransaction string
7982
activeTransactionHasChanges bool
8083
}
@@ -110,8 +113,9 @@ func New(transactionDir, configFile, programPath, runtimeSocket string) (client
110113
}
111114

112115
cn := clientNative{
113-
nativeAPI: cnHAProxyClient,
114-
activeBackends: make(map[string]struct{}),
116+
nativeAPI: cnHAProxyClient,
117+
activeBackends: make(map[string]struct{}),
118+
permanentBackends: make(map[string]struct{}),
115119
}
116120
return &cn, nil
117121
}

pkg/haproxy/api/backend.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,35 @@ func (c *clientNative) BackendCreate(backend models.Backend) error {
4444
return nil
4545
}
4646

47+
func (c *clientNative) BackendCreatePermanently(backend models.Backend) error {
48+
err := c.BackendCreate(backend)
49+
if err != nil {
50+
return err
51+
}
52+
c.permanentBackends[backend.Name] = struct{}{}
53+
return nil
54+
}
55+
56+
func (c *clientNative) BackendCreateIfNotExist(backend models.Backend) (err error) {
57+
configuration, err := c.nativeAPI.Configuration()
58+
if err != nil {
59+
return
60+
}
61+
c.activeTransactionHasChanges = true
62+
defer func() {
63+
if err == nil {
64+
c.activeBackends[backend.Name] = struct{}{}
65+
}
66+
}()
67+
68+
_, _, err = configuration.GetBackend(backend.Name, c.activeTransaction)
69+
if err == nil {
70+
return
71+
}
72+
73+
return configuration.CreateBackend(&backend, c.activeTransaction, 0)
74+
}
75+
4776
func (c *clientNative) BackendEdit(backend models.Backend) error {
4877
configuration, err := c.nativeAPI.Configuration()
4978
if err != nil {
@@ -207,6 +236,9 @@ func (c *clientNative) RefreshBackends() (deleted []string, err error) {
207236
return
208237
}
209238
for _, backend := range backends {
239+
if _, ok := c.permanentBackends[backend.Name]; ok {
240+
continue
241+
}
210242
if _, ok := c.activeBackends[backend.Name]; !ok {
211243
if err = c.BackendDelete(backend.Name); err != nil {
212244
return

0 commit comments

Comments
 (0)