forked from canonical/dqlite
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun-demo
executable file
·62 lines (50 loc) · 1.67 KB
/
run-demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/python3
import os
import sys
import shutil
import subprocess
import time
BUILD_DQLITE = "go build -tags libsqlite3 .".split(" ")
BUILD_DEMO = "go build -tags libsqlite3 testdata/demo.go".split(" ")
BASE_PORT = 9980
def spawnNode(n, purge=False):
data = "/tmp/dqlite-demo-%d" % n
port = BASE_PORT + n
if purge and os.path.exists(data):
shutil.rmtree(data)
if not os.path.exists(data):
os.mkdir(data)
args = ["./demo", "-data", data, "-addr", "127.0.0.1:%d" % port]
if n > 0:
args.extend(["-join", "127.0.0.1:%d" % BASE_PORT])
env = os.environ.copy()
env.update({
"LD_LIBRARY_PATH": os.path.join(os.getcwd(), ".sqlite"),
})
fd = open(os.path.join(data, "log"), "a+")
return subprocess.Popen(args, env=env, stdout=fd, stderr=fd)
def spawnTail():
args = ["tail", "-f"]
for i in range(3):
args.append("/tmp/dqlite-demo-%d/log" % i)
return subprocess.Popen(args, stderr=subprocess.STDOUT)
if __name__ == "__main__":
subprocess.check_call(BUILD_DQLITE)
subprocess.check_call(BUILD_DEMO)
processes = []
for i in range(3):
processes.append(spawnNode(i, purge=True))
spawnTail()
while True:
for i, process in enumerate(processes):
rc = process.poll()
if rc is not None:
if rc != 0:
print("ERROR node %d exited with return code %d" % (i, rc))
for j, process in enumerate(processes):
if j != i:
process.kill()
sys.exit(1)
# respawn
processes[i] = spawnNode(i)
time.sleep(0.5)