Skip to content

Commit 7c56069

Browse files
committed
Support --cluster.agency-size=1 combined with --starter.local
1 parent d2c7e93 commit 7c56069

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

service/bootstrap_config.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,20 @@ func (bsCfg BootstrapConfig) CreateTLSConfig() (*tls.Config, error) {
6969
Certificates: []tls.Certificate{cert},
7070
}, nil
7171
}
72+
73+
// PeersNeeded returns the minimum number of peers needed for the given config.
74+
func (bsCfg BootstrapConfig) PeersNeeded() int {
75+
minServers := 1
76+
switch bsCfg.Mode {
77+
case ServiceModeCluster:
78+
minServers = 3
79+
case ServiceModeSingle:
80+
minServers = 1
81+
case ServiceModeResilientSingle:
82+
minServers = 2
83+
}
84+
if minServers < bsCfg.AgencySize {
85+
minServers = bsCfg.AgencySize
86+
}
87+
return minServers
88+
}

service/bootstrap_master.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,17 @@ func (s *Service) bootstrapMaster(ctx context.Context, runner Runner, config Con
6161
// Permanent loop:
6262
s.log.Infof("Serving as master with ID '%s' on %s:%d...", s.id, config.OwnAddress, s.announcePort)
6363

64-
if s.mode.IsSingleMode() || s.myPeers.HaveEnoughAgents() {
64+
// Can we start right away?
65+
needMorePeers := true
66+
if s.mode.IsSingleMode() {
67+
needMorePeers = false
68+
} else if !s.myPeers.HaveEnoughAgents() {
69+
needMorePeers = true
70+
} else if bsCfg.StartLocalSlaves {
71+
peersNeeded := bsCfg.PeersNeeded()
72+
needMorePeers = len(s.myPeers.AllPeers) < peersNeeded
73+
}
74+
if !needMorePeers {
6575
// We have all the agents that we need, start a single server/cluster right now
6676
s.saveSetup()
6777
s.log.Info("Starting service...")

service/local_slaves.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ import (
3333

3434
// createAndStartLocalSlaves creates additional peers for local slaves and starts services for them.
3535
func (s *Service) createAndStartLocalSlaves(wg *sync.WaitGroup, config Config, bsCfg BootstrapConfig) {
36-
peers := make([]Peer, 0, bsCfg.AgencySize)
37-
for index := 2; index <= bsCfg.AgencySize; index++ {
36+
peersNeeded := bsCfg.PeersNeeded()
37+
peers := make([]Peer, 0, peersNeeded)
38+
for index := 2; index <= peersNeeded; index++ {
3839
p := Peer{}
3940
var err error
4041
p.ID, err = createUniqueID()

0 commit comments

Comments
 (0)