Skip to content

Commit 9c93871

Browse files
authored
Merge branch 'dev' into dev
2 parents 80203e8 + f559507 commit 9c93871

File tree

93 files changed

+1936
-884
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+1936
-884
lines changed

.github/workflows/checks.yml

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
name: checks
2-
on: [
3-
pull_request,
4-
workflow_dispatch,
5-
]
2+
on:
3+
- pull_request
4+
- workflow_dispatch
65
env:
76

87
TERM: xterm
@@ -14,25 +13,18 @@ jobs:
1413
runs-on: ubuntu-latest
1514
strategy:
1615
matrix:
17-
go_version: ['1.21']
16+
go_version: ['1.23.8']
1817
# services:
1918
# redis:
2019
# image: redis:5.0-alpine
2120
# ports:
2221
# - 6379:6379
2322
steps:
24-
- uses: actions/checkout@v3
25-
- uses: actions/setup-go@v3
23+
- uses: actions/checkout@v4
24+
- uses: actions/setup-go@v4
2625
with:
2726
go-version: ${{ matrix.go_version }}
28-
- uses: actions/cache@v3
29-
with:
30-
path: |
31-
~/.cache/go-build
32-
~/go/pkg/mod
33-
key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }}
34-
restore-keys: |
35-
${{ runner.os }}-go-
27+
cache: true
3628
- name: start services
3729
run: docker compose up -d
3830
- name: run testcases

.github/workflows/github_sponsors.yml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@ jobs:
88
deploy:
99
runs-on: ubuntu-latest
1010
steps:
11-
- name: Checkout 🛎️
12-
uses: actions/checkout@v2
11+
- name: Checkout repository
12+
uses: actions/checkout@v4
13+
with:
14+
fetch-depth: 0
1315

1416
- name: Generate Sponsors 💖
1517
uses: JamesIves/[email protected]
1618
with:
1719
token: ${{ secrets.PAT }}
1820
file: "README.md"
1921

20-
- name: Deploy to GitHub Pages 🚀
21-
uses: JamesIves/github-pages-deploy-action@4.1.1
22+
- name: Commit updated README
23+
uses: stefanzweifel/git-auto-commit-action@v5
2224
with:
23-
branch: dev
24-
folder: "."
25+
commit_message: "docs: update sponsors list"
26+
file_pattern: README.md

cluster/clusterproviders/automanaged/automanaged.go

Lines changed: 55 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
2919
type 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
133129
func (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
142138
func (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
152148
func (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
203199
func (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
230226
func (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

323319
func (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

330326
func (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

364360
func (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

370366
func (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

376372
func (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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package etcd
2+
3+
import (
4+
clientv3 "go.etcd.io/etcd/client/v3"
5+
)
6+
7+
type RoleChangedListener interface {
8+
OnRoleChanged(RoleType)
9+
}
10+
11+
type Option func(*config)
12+
13+
func WithBaseKey(baseKey string) Option {
14+
return func(o *config) {
15+
o.BaseKey = baseKey
16+
}
17+
}
18+
19+
func WithEtcdConfig(cfg clientv3.Config) Option {
20+
return func(o *config) {
21+
o.cfg = cfg
22+
}
23+
}
24+
25+
func WithRoleChangedListener(l RoleChangedListener) Option {
26+
return func(o *config) {
27+
o.RoleChanged = l
28+
}
29+
}
30+
31+
type config struct {
32+
BaseKey string
33+
cfg clientv3.Config
34+
RoleChanged RoleChangedListener
35+
}
36+
37+
func defaultConfig() *config {
38+
return &config{}
39+
}

0 commit comments

Comments
 (0)