@@ -12,39 +12,35 @@ import (
1212 "golang.org/x/net/context"
1313
1414 "github.com/asynkron/protoactor-go/cluster"
15- "github.com/labstack/echo"
15+ "github.com/labstack/echo/v4 "
1616 "golang.org/x/sync/errgroup"
1717)
1818
19- // TODO: needs to be attached to the provider instance
20- var (
21- clusterTTLErrorMutex = new (sync.Mutex )
22- clusterMonitorErrorMutex = new (sync.Mutex )
23- shutdownMutex = new (sync.Mutex )
24- deregisteredMutex = new (sync.Mutex )
25- activeProviderMutex = new (sync.Mutex )
26- activeProviderRunningMutex = new (sync.Mutex )
27- )
28-
2919type AutoManagedProvider struct {
30- deregistered bool
31- shutdown bool
32- activeProvider * echo.Echo
33- activeProviderRunning bool
34- activeProviderTesting bool
35- httpClient * http.Client
36- monitoringStatus bool
37- clusterName string
38- address string
39- autoManagePort int
40- memberPort int
41- knownKinds []string
42- knownNodes []* NodeModel
43- hosts []string
44- refreshTTL time.Duration
45- clusterTTLError error
46- clusterMonitorError error
47- cluster * cluster.Cluster
20+ deregistered bool
21+ shutdown bool
22+ activeProvider * echo.Echo
23+ activeProviderRunning bool
24+ activeProviderTesting bool
25+ httpClient * http.Client
26+ monitoringStatus bool
27+ clusterName string
28+ address string
29+ autoManagePort int
30+ memberPort int
31+ knownKinds []string
32+ knownNodes []* NodeModel
33+ hosts []string
34+ refreshTTL time.Duration
35+ clusterTTLError error
36+ clusterMonitorError error
37+ cluster * cluster.Cluster
38+ clusterTTLErrorMutex sync.Mutex
39+ clusterMonitorErrorMutex sync.Mutex
40+ shutdownMutex sync.Mutex
41+ deregisteredMutex sync.Mutex
42+ activeProviderMutex sync.Mutex
43+ activeProviderRunningMutex sync.Mutex
4844}
4945
5046// New creates a AutoManagedProvider that connects locally
@@ -131,17 +127,17 @@ func (p *AutoManagedProvider) StartClient(cluster *cluster.Cluster) error {
131127
132128// DeregisterMember set the shutdown to true preventing anymore TTL updates
133129func (p * AutoManagedProvider ) DeregisterMember () error {
134- deregisteredMutex .Lock ()
135- defer deregisteredMutex .Unlock ()
130+ p . deregisteredMutex .Lock ()
131+ defer p . deregisteredMutex .Unlock ()
136132
137133 p .deregistered = true
138134 return nil
139135}
140136
141137// Shutdown set the shutdown to true preventing anymore TTL updates
142138func (p * AutoManagedProvider ) Shutdown (graceful bool ) error {
143- shutdownMutex .Lock ()
144- defer shutdownMutex .Unlock ()
139+ p . shutdownMutex .Lock ()
140+ defer p . shutdownMutex .Unlock ()
145141
146142 p .shutdown = true
147143 p .activeProvider .Close ()
@@ -150,9 +146,9 @@ func (p *AutoManagedProvider) Shutdown(graceful bool) error {
150146
151147// UpdateTTL sets up an endpoint to respond to other members
152148func (p * AutoManagedProvider ) UpdateTTL () {
153- activeProviderRunningMutex .Lock ()
149+ p . activeProviderRunningMutex .Lock ()
154150 running := p .activeProviderRunning
155- activeProviderRunningMutex .Unlock ()
151+ p . activeProviderRunningMutex .Unlock ()
156152
157153 if (p .isShutdown () || p .isDeregistered ()) && running {
158154 p .activeProvider .Close ()
@@ -174,16 +170,16 @@ func (p *AutoManagedProvider) UpdateTTL() {
174170 })
175171 }
176172 go func () {
177- activeProviderRunningMutex .Lock ()
173+ p . activeProviderRunningMutex .Lock ()
178174 p .activeProviderRunning = true
179- activeProviderRunningMutex .Unlock ()
175+ p . activeProviderRunningMutex .Unlock ()
180176
181177 appURI := fmt .Sprintf ("0.0.0.0:%d" , p .autoManagePort )
182178 p .cluster .Logger ().Error ("Automanaged server stopping..!" , slog .Any ("error" , p .activeProvider .Start (appURI )))
183179
184- activeProviderRunningMutex .Lock ()
180+ p . activeProviderRunningMutex .Lock ()
185181 p .activeProviderRunning = false
186- activeProviderRunningMutex .Unlock ()
182+ p . activeProviderRunningMutex .Unlock ()
187183 }()
188184}
189185
@@ -202,10 +198,10 @@ func (p *AutoManagedProvider) monitorMemberStatusChanges() {
202198// GetHealthStatus returns an error if the cluster health status has problems
203199func (p * AutoManagedProvider ) GetHealthStatus () error {
204200 var err error
205- clusterTTLErrorMutex .Lock ()
206- clusterMonitorErrorMutex .Lock ()
207- defer clusterMonitorErrorMutex .Unlock ()
208- defer clusterTTLErrorMutex .Unlock ()
201+ p . clusterTTLErrorMutex .Lock ()
202+ p . clusterMonitorErrorMutex .Lock ()
203+ defer p . clusterMonitorErrorMutex .Unlock ()
204+ defer p . clusterTTLErrorMutex .Unlock ()
209205
210206 if p .clusterTTLError != nil {
211207 err = fmt .Errorf ("TTL: %s" , p .clusterTTLError .Error ())
@@ -228,8 +224,8 @@ func (p *AutoManagedProvider) GetHealthStatus() error {
228224
229225// monitorStatuses checks for node changes in the cluster
230226func (p * AutoManagedProvider ) monitorStatuses () {
231- clusterMonitorErrorMutex .Lock ()
232- defer clusterMonitorErrorMutex .Unlock ()
227+ p . clusterMonitorErrorMutex .Lock ()
228+ defer p . clusterMonitorErrorMutex .Unlock ()
233229
234230 autoManagedNodes , err := p .checkNodes ()
235231 if err != nil && len (autoManagedNodes ) == 0 {
@@ -321,16 +317,16 @@ func (p *AutoManagedProvider) checkNodes() ([]*NodeModel, error) {
321317}
322318
323319func (p * AutoManagedProvider ) deregisterService () {
324- deregisteredMutex .Lock ()
325- defer deregisteredMutex .Unlock ()
320+ p . deregisteredMutex .Lock ()
321+ defer p . deregisteredMutex .Unlock ()
326322
327323 p .deregistered = true
328324}
329325
330326func (p * AutoManagedProvider ) startActiveProvider () {
331- activeProviderRunningMutex .Lock ()
327+ p . activeProviderRunningMutex .Lock ()
332328 running := p .activeProviderRunning
333- activeProviderRunningMutex .Unlock ()
329+ p . activeProviderRunningMutex .Unlock ()
334330
335331 if ! running {
336332 if ! p .activeProviderTesting {
@@ -344,15 +340,15 @@ func (p *AutoManagedProvider) startActiveProvider() {
344340 appURI := fmt .Sprintf ("0.0.0.0:%d" , p .autoManagePort )
345341
346342 go func () {
347- activeProviderRunningMutex .Lock ()
343+ p . activeProviderRunningMutex .Lock ()
348344 p .activeProviderRunning = true
349- activeProviderRunningMutex .Unlock ()
345+ p . activeProviderRunningMutex .Unlock ()
350346 err := p .activeProvider .Start (appURI )
351347 p .cluster .Logger ().Error ("Automanaged server stopping..!" , slog .Any ("error" , err ))
352348
353- activeProviderRunningMutex .Lock ()
349+ p . activeProviderRunningMutex .Lock ()
354350 p .activeProviderRunning = false
355- activeProviderRunningMutex .Unlock ()
351+ p . activeProviderRunningMutex .Unlock ()
356352 }()
357353 }
358354}
@@ -362,20 +358,20 @@ func (p *AutoManagedProvider) stopActiveProvider() {
362358}
363359
364360func (p * AutoManagedProvider ) isShutdown () bool {
365- shutdownMutex .Lock ()
366- defer shutdownMutex .Unlock ()
361+ p . shutdownMutex .Lock ()
362+ defer p . shutdownMutex .Unlock ()
367363 return p .shutdown
368364}
369365
370366func (p * AutoManagedProvider ) isDeregistered () bool {
371- deregisteredMutex .Lock ()
372- defer deregisteredMutex .Unlock ()
367+ p . deregisteredMutex .Lock ()
368+ defer p . deregisteredMutex .Unlock ()
373369 return p .deregistered
374370}
375371
376372func (p * AutoManagedProvider ) isActiveProviderRunning () bool {
377- activeProviderRunningMutex .Lock ()
378- defer activeProviderRunningMutex .Unlock ()
373+ p . activeProviderRunningMutex .Lock ()
374+ defer p . activeProviderRunningMutex .Unlock ()
379375 return p .activeProviderRunning
380376}
381377
0 commit comments