Skip to content

Commit 264a368

Browse files
committed
Simplified starter by removing the 2-instance limit
1 parent 466d3a7 commit 264a368

File tree

5 files changed

+113
-22
lines changed

5 files changed

+113
-22
lines changed

service/cluster_config.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -154,18 +154,6 @@ func (p ClusterConfig) HaveEnoughAgents() bool {
154154
return count >= p.AgencySize
155155
}
156156

157-
// HaveEnoughResilientSingles returns true when the number of peers that have an resilient single server
158-
// is equal to 2.
159-
func (p ClusterConfig) HaveEnoughResilientSingles() bool {
160-
count := 0
161-
for _, x := range p.AllPeers {
162-
if x.HasResilientSingle() {
163-
count++
164-
}
165-
}
166-
return count >= 2
167-
}
168-
169157
// IsSecure returns true if any of the peers is secure.
170158
func (p ClusterConfig) IsSecure() bool {
171159
for _, x := range p.AllPeers {

service/local_slaves.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,14 @@ func (s *Service) startLocalSlaves(wg *sync.WaitGroup, config Config, bsCfg Boot
5858
masterAddr = "127.0.0.1"
5959
}
6060
masterAddr = net.JoinHostPort(masterAddr, strconv.Itoa(s.announcePort))
61-
for idx, p := range peers {
61+
for _, p := range peers {
6262
if p.ID == s.id {
6363
continue
6464
}
6565
slaveLog := s.mustCreateIDLogger(p.ID)
6666
slaveBsCfg := bsCfg
6767
slaveBsCfg.ID = p.ID
6868
slaveBsCfg.StartLocalSlaves = false
69-
if bsCfg.Mode.IsResilientSingleMode() && idx > 1 {
70-
// Since resilientsingle mode only works with 2 servers, we have to prevent a third one.
71-
slaveBsCfg.StartResilientSingle = boolRef(false)
72-
}
7369
os.MkdirAll(p.DataDir, 0755)
7470

7571
// Read existing setup.json (if any)

service/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ func (s *Service) HandleHello(ownAddress, remoteAddress string, req *HelloReques
663663
if req.Coordinator != nil {
664664
hasCoordinator = *req.Coordinator
665665
}
666-
hasResilientSingle := !s.myPeers.HaveEnoughResilientSingles()
666+
hasResilientSingle := true
667667
if req.ResilientSingle != nil {
668668
hasResilientSingle = *req.ResilientSingle
669669
}

test/docker_resilientsingle_default_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,113 @@ func TestDockerResilientSingleDefault(t *testing.T) {
103103
defer dockerRun2.Close()
104104
defer removeDockerContainer(t, cID2)
105105

106+
cID3 := createDockerID("starter-test-resilientsingle-default3-")
107+
dockerRun3 := Spawn(t, strings.Join([]string{
108+
"docker run -i",
109+
"--label starter-test=true",
110+
"--name=" + cID3,
111+
"--rm",
112+
fmt.Sprintf("-p %d:%d", basePort+10, basePort),
113+
fmt.Sprintf("-v %s:/data", volID3),
114+
"-v /var/run/docker.sock:/var/run/docker.sock",
115+
"arangodb/arangodb-starter",
116+
"--docker.container=" + cID3,
117+
"--starter.address=$IP",
118+
"--starter.mode=resilientsingle",
119+
createEnvironmentStarterOptions(),
120+
fmt.Sprintf("--starter.join=$IP:%d", basePort),
121+
}, " "))
122+
defer dockerRun3.Close()
123+
defer removeDockerContainer(t, cID3)
124+
125+
if ok := WaitUntilStarterReady(t, whatResilientSingle, dockerRun1, dockerRun2, docker3); ok {
126+
t.Logf("ResilientSingle start took %s", time.Since(start))
127+
testResilientSingle(t, insecureStarterEndpoint(0), false, false)
128+
testResilientSingle(t, insecureStarterEndpoint(5), false, false)
129+
testResilientSingle(t, insecureStarterEndpoint(10), false, false)
130+
}
131+
132+
if isVerbose {
133+
t.Log("Waiting for termination")
134+
}
135+
ShutdownStarter(t, insecureStarterEndpoint(0))
136+
ShutdownStarter(t, insecureStarterEndpoint(5))
137+
ShutdownStarter(t, insecureStarterEndpoint(10))
138+
}
139+
140+
// TestDockerResilientSingle2Instance runs 3 arangodb starters in docker with mode=resilientsingle
141+
// and only 2 servers should start a single server instance.
142+
func TestDockerResilientSingle2Instance(t *testing.T) {
143+
needTestMode(t, testModeDocker)
144+
needStarterMode(t, starterModeResilientSingle)
145+
if os.Getenv("IP") == "" {
146+
t.Fatal("IP envvar must be set to IP address of this machine")
147+
}
148+
/*
149+
docker volume create arangodb1
150+
docker run -i --name=adb1 --rm -p 8528:8528 \
151+
-v arangodb1:/data \
152+
-v /var/run/docker.sock:/var/run/docker.sock \
153+
arangodb/arangodb-starter \
154+
--docker.container=adb1 \
155+
--starter.address=$IP \
156+
--starter.mode=resilientsingle
157+
*/
158+
volID1 := createDockerID("vol-starter-test-resilientsingle-default1-")
159+
createDockerVolume(t, volID1)
160+
defer removeDockerVolume(t, volID1)
161+
162+
volID2 := createDockerID("vol-starter-test-resilientsingle-default2-")
163+
createDockerVolume(t, volID2)
164+
defer removeDockerVolume(t, volID2)
165+
166+
volID3 := createDockerID("vol-starter-test-resilientsingle-default3-")
167+
createDockerVolume(t, volID3)
168+
defer removeDockerVolume(t, volID3)
169+
170+
// Cleanup of left over tests
171+
removeDockerContainersByLabel(t, "starter-test=true")
172+
removeStarterCreatedDockerContainers(t)
173+
174+
start := time.Now()
175+
176+
cID1 := createDockerID("starter-test-resilientsingle-default1-")
177+
dockerRun1 := Spawn(t, strings.Join([]string{
178+
"docker run -i",
179+
"--label starter-test=true",
180+
"--name=" + cID1,
181+
"--rm",
182+
fmt.Sprintf("-p %d:%d", basePort, basePort),
183+
fmt.Sprintf("-v %s:/data", volID1),
184+
"-v /var/run/docker.sock:/var/run/docker.sock",
185+
"arangodb/arangodb-starter",
186+
"--docker.container=" + cID1,
187+
"--starter.address=$IP",
188+
"--starter.mode=resilientsingle",
189+
createEnvironmentStarterOptions(),
190+
}, " "))
191+
defer dockerRun1.Close()
192+
defer removeDockerContainer(t, cID1)
193+
194+
cID2 := createDockerID("starter-test-resilientsingle-default2-")
195+
dockerRun2 := Spawn(t, strings.Join([]string{
196+
"docker run -i",
197+
"--label starter-test=true",
198+
"--name=" + cID2,
199+
"--rm",
200+
fmt.Sprintf("-p %d:%d", basePort+5, basePort),
201+
fmt.Sprintf("-v %s:/data", volID2),
202+
"-v /var/run/docker.sock:/var/run/docker.sock",
203+
"arangodb/arangodb-starter",
204+
"--docker.container=" + cID2,
205+
"--starter.address=$IP",
206+
"--starter.mode=resilientsingle",
207+
createEnvironmentStarterOptions(),
208+
fmt.Sprintf("--starter.join=$IP:%d", basePort),
209+
}, " "))
210+
defer dockerRun2.Close()
211+
defer removeDockerContainer(t, cID2)
212+
106213
cID3 := createDockerID("starter-test-resilientsingle-default3-")
107214
dockerRun3 := Spawn(t, strings.Join([]string{
108215
"docker run -i",

test/process_resilientsingle_default_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestProcessResilientSingleDefault(t *testing.T) {
5656
t.Logf("ResilientSingle start took %s", time.Since(start))
5757
testResilientSingle(t, insecureStarterEndpoint(0), false, false)
5858
testResilientSingle(t, insecureStarterEndpoint(5), false, false)
59-
testResilientSingle(t, insecureStarterEndpoint(10), false, true)
59+
testResilientSingle(t, insecureStarterEndpoint(10), false, true) // due to --cluster.start-single=false
6060
}
6161

6262
if isVerbose {
@@ -86,14 +86,14 @@ func TestProcessResilientSingleDefaultShutdownViaAPI(t *testing.T) {
8686

8787
dataDirSlave2 := SetUniqueDataDir(t)
8888
defer os.RemoveAll(dataDirSlave2)
89-
slave2 := Spawn(t, "${STARTER} --starter.port=8538 --starter.mode=resilientsingle --cluster.start-single=false --starter.join 127.0.0.1 "+createEnvironmentStarterOptions())
89+
slave2 := Spawn(t, "${STARTER} --starter.port=8538 --starter.mode=resilientsingle --starter.join 127.0.0.1 "+createEnvironmentStarterOptions())
9090
defer slave2.Close()
9191

92-
if ok := WaitUntilStarterReady(t, whatResilientSingle, master, slave1 /*not slave2*/); ok {
92+
if ok := WaitUntilStarterReady(t, whatResilientSingle, master, slave1, slave2); ok {
9393
t.Logf("ResilientSingle start took %s", time.Since(start))
9494
testResilientSingle(t, insecureStarterEndpoint(0), false, false)
9595
testResilientSingle(t, insecureStarterEndpoint(5), false, false)
96-
testResilientSingle(t, insecureStarterEndpoint(10), false, true)
96+
testResilientSingle(t, insecureStarterEndpoint(10), false, false)
9797
}
9898

9999
if isVerbose {

0 commit comments

Comments
 (0)