@@ -21,6 +21,7 @@ import (
21
21
"path"
22
22
"sort"
23
23
"strings"
24
+ "sync"
24
25
25
26
"github.com/google/renameio"
26
27
"github.com/haproxytech/kubernetes-ingress/pkg/fs"
@@ -113,20 +114,28 @@ func (m mapFiles) CleanMaps() {
113
114
}
114
115
115
116
func (m mapFiles ) RefreshMaps (client api.HAProxyClient ) {
117
+ mapFilesToDelete := make ([]Name , 0 , len (m ))
118
+ var wgWriter sync.WaitGroup
119
+ var mapMutex sync.Mutex
120
+
116
121
for name , mapFile := range m {
117
122
content , hash := mapFile .getContent ()
118
123
if mapFile .hash == hash {
119
124
continue
120
125
}
126
+ wgWriter .Add (1 )
121
127
// parallelize writing of files
122
128
fs .Writer .Write (func () {
129
+ defer wgWriter .Done ()
123
130
var err error
124
131
filename := GetPath (name )
125
132
if len (content ) == 0 && ! mapFile .persistent {
126
133
fs .AddDelayedFunc (string (filename ), func () {
127
134
logger .Error (os .Remove (string (filename )))
128
135
})
129
- delete (m , name )
136
+ mapMutex .Lock ()
137
+ mapFilesToDelete = append (mapFilesToDelete , name )
138
+ mapMutex .Unlock ()
130
139
return
131
140
} else {
132
141
if _ , err = os .Stat (string (filename )); err != nil {
@@ -165,6 +174,11 @@ func (m mapFiles) RefreshMaps(client api.HAProxyClient) {
165
174
}
166
175
})
167
176
}
177
+
178
+ wgWriter .Wait ()
179
+ for _ , mapFileToDelete := range mapFilesToDelete {
180
+ delete (m , mapFileToDelete )
181
+ }
168
182
}
169
183
170
184
func GetPath (name Name ) Path {
0 commit comments