signal.signal(num, killprocess)
def paxos_log(port):
- return "paxos-%d.log" % port
+ return "paxos-%d.log" % port
def die(*s):
print >>sys.stderr, ''.join(s)
try:
os.execv(p, [p] + sa)
except OSError, e:
- mydie("Cannot start new %s %s %s", (p, repr(sa), repr(e)))
+ mydie("Cannot start new %s %s %s" % (p, repr(sa), repr(e)))
def randports(num):
return sorted([random.randint(0, 54000/2)*2+10000 for i in xrange(num)])
# let there be extra views
continue
expected = vs[i]
- if tuple(expected) != tuple(view):
+ if set(expected) != set(view):
mydie("Failed: In log %s at view %s is (%s), but expected %s (%s)" %
(l, str(num), repr(view), str(i), repr(expected)))
i+=1
if i < len(vs):
mydie("Failed: In log %s, not enough views seen!" % (l,))
- if last_v is not None and tuple(last_v) != tuple(last_view):
+ if last_v is not None and set(last_v) != set(last_view):
mydie("Failed: In log %s last view didn't match, got view %s, but expected %s" %
(l, repr(last_view), repr(last_v)))
def waitpid_to(pid, to):
start = time.time()
- done_pid = -1
- while done_pid <= 0 and (time.time() - start) < to:
- usleep(100000)
- done_pid = os.waitpid(pid, os.WNOHANG)
+ done_pid = (0,0)
+ while done_pid == (0,0) and (time.time() - start) < to:
+ usleep(100000)
+ done_pid = os.waitpid(pid, os.WNOHANG)
if done_pid <= 0:
os.kill(pid, signal.SIGKILL)
if do_run[2]:
print "test2: start 3-process lock server, kill first server"
start_nodes(3,"ls")
- print "Kill first (PID: $pid[0]) on port $p[0]"
+ print "Kill first (PID: %d) on port %d" % (pid[0], p[0])
os.kill(pid[0], signal.SIGTERM)
usleep(500000)
# it should go through 4 views
if do_run[3]:
print "test3: start 3-process lock_server, kill a server, restart a server"
start_nodes(3,"ls")
- print "Kill server (PID: $pid[2]) on port $p[2]"
+ print "Kill server (PID: %s) on port %s" % (pid[2], p[2])
os.kill(pid[2], signal.SIGTERM)
usleep(500000)
v4 = (p[0], p[1])
wait_and_check_expected_view(v4)
- print "Restart killed server on port $p[2]"
+ print "Restart killed server on port %s" % (p[2],)
pid[2] = spawn_ls (p[0], p[2])
usleep(500000)
v5 = (p[0], p[1], p[2])
if do_run[4]:
print "test4: 3-process lock_server, kill third server, kill second server, restart third server, kill third server again, restart second server, re-restart third server, check logs"
start_nodes(3,"ls")
- print "Kill server (PID: $pid[2]) on port $p[2]"
+ print "Kill server (PID: %s) on port %s" % (pid[2], p[2])
os.kill(pid[2], signal.SIGTERM)
usleep(500000)
v4 = (p[0], p[1])
wait_and_check_expected_view(v4)
- print "Kill server (PID: $pid[1]) on port $p[1]"
+ print "Kill server (PID: %s) on port %s" % (pid[1], p[1])
os.kill(pid[1], signal.SIGTERM)
usleep(500000)
#no view change can happen because of a lack of majority
- print "Restarting server on port $p[2]"
+ print "Restarting server on port %s" % (p[2],)
pid[2] = spawn_ls(p[0], p[2])
usleep(500000)
#no view change can happen because of a lack of majority
for port in p[0:1+2]:
num_v = get_num_views(paxos_log(port), port)
if num_v != in_views[port]:
- die("$num_v views in ", paxos_log(port), " : no new views should be formed due to the lack of majority")
+ die("%s_v views in ", paxos_log(port), " : no new views should be formed due to the lack of majority" % (num,))
# kill node 3 again,
- print "Kill server (PID: $pid[2]) on port $p[2]"
+ print "Kill server (PID: %s) on port %s" % (pid[2], p[2])
os.kill(pid[2], signal.SIGTERM)
usleep(500000)
- print "Restarting server on port $p[1]"
+ print "Restarting server on port %s" % (p[1],)
pid[1] = spawn_ls(p[0], p[1])
usleep(700000)
for port in p[0:1+1]:
in_views[port] = get_num_views(paxos_log(port), port)
- print " Node $port is present in ", in_views[port], " views in ", paxos_log(port), ""
- print "Restarting server on port $p[2]"
+ print " Node %s is present in " % (port,), in_views[port], " views in ", paxos_log(port)
+ print "Restarting server on port %s" % (p[2],)
pid[2] = spawn_ls(p[0], p[2])
lastv = (p[0],p[1],p[2])
for port in lastv:
if do_run[5]:
print "test5: 3-process lock_server, send signal 1 to first server, kill third server, restart third server, check logs"
start_nodes(3,"ls")
- print "Sending paxos breakpoint 1 to first server on port $p[0]"
+ print "Sending paxos breakpoint 1 to first server on port %s" % (p[0],)
spawn("./rsm_tester", p[0]+1, "breakpoint", 3)
usleep(100000)
- print "Kill third server (PID: $pid[2]) on port $p[2]"
+ print "Kill third server (PID: %s) on port %s" % (pid[2], p[2])
os.kill(pid[2], signal.SIGTERM)
usleep(500000)
for port in p[0:1+2]:
num_v = get_num_views(paxos_log(port), port)
if num_v != in_views[port]:
- die("$num_v views in ", paxos_log(port), " : no new views should be formed due to the lack of majority")
- print "Restarting third server on port $p[2]"
+ die("%s_v views in ", paxos_log(port), " : no new views should be formed due to the lack of majority" % (num,))
+ print "Restarting third server on port %s" % (p[2],)
pid[2]= spawn_ls(p[0], p[2])
lastv = (p[1],p[2])
for port in lastv:
if do_run[6]:
print "test6: 4-process lock_server, send signal 2 to first server, kill fourth server, restart fourth server, check logs"
start_nodes(4,"ls")
- print "Sending paxos breakpoint 2 to first server on port $p[0]"
+ print "Sending paxos breakpoint 2 to first server on port %s" % (p[0],)
spawn("./rsm_tester", p[0]+1, "breakpoint", 4)
usleep(100000)
- print "Kill fourth server (PID: $pid[3]) on port $p[3]"
+ print "Kill fourth server (PID: %s) on port %s" % (pid[3], p[3])
os.kill(pid[3], signal.SIGTERM)
usleep(500000)
for port in (p[1],p[2]):
num_v = get_num_views(paxos_log(port), port)
if num_v != in_views[port]:
- die("$num_v views in ", paxos_log(port), " : no new views should be formed due to the lack of majority")
+ die("%s_v views in ", paxos_log(port), " : no new views should be formed due to the lack of majority" % (num,))
usleep(500000)
- print "Restarting fourth server on port $p[3]"
+ print "Restarting fourth server on port %s" % (p[3],)
pid[3] = spawn_ls(p[1], p[3])
usleep(500000)
v5 = (p[0],p[1],p[2])
if do_run[7]:
print "test7: 4-process lock_server, send signal 2 to first server, kill fourth server, kill other servers, restart other servers, restart fourth server, check logs"
start_nodes(4,"ls")
- print "Sending paxos breakpoint 2 to first server on port $p[0]"
+ print "Sending paxos breakpoint 2 to first server on port %s" % (p[0],)
spawn("./rsm_tester", p[0]+1, "breakpoint", 4)
usleep(300000)
- print "Kill fourth server (PID: $pid[3]) on port $p[3]"
+ print "Kill fourth server (PID: %s) on port %s" % (pid[3], p[3])
os.kill(pid[3], signal.SIGTERM)
usleep(500000)
- print "Kill third server (PID: $pid[2]) on port $p[2]"
+ print "Kill third server (PID: %s) on port %s" % (pid[2], p[2])
os.kill(pid[2], signal.SIGTERM)
- print "Kill second server (PID: $pid[1]) on port $p[1]"
+ print "Kill second server (PID: %s) on port %s" % (pid[1], p[1])
os.kill(pid[1], signal.SIGTERM)
usleep(500000)
- print "Restarting second server on port $p[1]"
+ print "Restarting second server on port %s" % (p[1],)
pid[1] = spawn_ls(p[0], p[1])
usleep(500000)
- print "Restarting third server on port $p[2]"
+ print "Restarting third server on port %s" % (p[2],)
pid[2] = spawn_ls(p[0], p[2])
usleep(500000)
#no view change is possible by now because there is no majority
for port in (p[1],p[2]):
num_v = get_num_views(paxos_log(port), port)
if num_v != in_views[port]:
- die("$num_v views in ", paxos_log(port), " : no new views should be formed due to the lack of majority")
- print "Restarting fourth server on port $p[3]"
+ die("%s_v views in ", paxos_log(port), " : no new views should be formed due to the lack of majority" % (num,))
+ print "Restarting fourth server on port %s" % (p[3],)
pid[3] = spawn_ls(p[1], p[3])
usleep(500000)
v5 = (p[0], p[1], p[2])
if do_run[8]:
print "test8: start 3-process lock service"
start_nodes(3,"ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 8")
cleanup()
usleep(200000)
if do_run[9]:
print "test9: start 3-process rsm, kill second slave while lock_tester is running"
start_nodes(3,"ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
usleep(random.randint(1,1000000))
- print "Kill slave (PID: $pid[2]) on port $p[2]"
+ print "Kill slave (PID: %s) on port %s" % (pid[2], p[2])
os.kill(pid[2], signal.SIGTERM)
usleep(300000)
# it should go through 4 views
v4 = (p[0], p[1])
wait_and_check_expected_view(v4)
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 9")
cleanup()
usleep(200000)
if do_run[10]:
print "test10: start 3-process rsm, kill second slave and restarts it later while lock_tester is running"
start_nodes(3,"ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
usleep(random.randint(1,1000000))
- print "Kill slave (PID: $pid[2]) on port $p[2]"
+ print "Kill slave (PID: %s) on port %s" % (pid[2], p[2])
os.kill(pid[2], signal.SIGTERM)
usleep(300000)
# it should go through 4 views
v4 = (p[0], p[1])
wait_and_check_expected_view(v4)
usleep(300000)
- print "Restarting killed lock_server on port $p[2]"
+ print "Restarting killed lock_server on port %s" % (p[2],)
pid[2] = spawn_ls(p[0], p[2])
v5 = (p[0],p[1],p[2])
wait_and_check_expected_view(v5)
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 10")
cleanup()
usleep(200000)
if do_run[11]:
print "test11: start 3-process rsm, kill primary while lock_tester is running"
start_nodes(3,"ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
usleep(random.randint(1,1000000))
- print "Kill primary (PID: $pid[0]) on port $p[0]"
+ print "Kill primary (PID: %s) on port %s" % (pid[0], p[0])
os.kill(pid[0], signal.SIGTERM)
usleep(300000)
# it should go through 4 views
v4 = (p[1], p[2])
wait_and_check_expected_view(v4)
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 11")
cleanup()
usleep(200000)
if do_run[12]:
print "test12: start 3-process rsm, kill master at break1 and restart it while lock_tester is running"
start_nodes(3, "ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
usleep(100000)
- print "Kill master (PID: $pid[0]) on port $p[0] at breakpoint 1"
+ print "Kill master (PID: %s) on port %s at breakpoint 1" % (pid[0], p[0])
spawn("./rsm_tester", p[0]+1, "breakpoint", 1)
usleep(100000)
# it should go through 5 views
v4 = (p[1], p[2])
wait_and_check_expected_view(v4)
- print "Restarting killed lock_server on port $p[0]"
+ print "Restarting killed lock_server on port %s" % (p[0],)
pid[0] = spawn_ls(p[1], p[0])
usleep(300000)
# the last view should include all nodes
wait_for_view_change(paxos_log(port), in_views[port]+1, port, 20)
for port in lastv:
check_views(paxos_log(port), views, lastv)
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 12")
cleanup()
usleep(200000)
if do_run[13]:
print "test13: start 3-process rsm, kill slave at break1 and restart it while lock_tester is running"
start_nodes(3, "ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
usleep(100000)
- print "Kill slave (PID: $pid[2]) on port $p[2] at breakpoint 1"
+ print "Kill slave (PID: %s) on port %s at breakpoint 1" % (pid[2], p[2])
spawn("./rsm_tester", p[2]+1, "breakpoint", 1)
usleep(100000)
# it should go through 4 views
v4 = (p[0], p[1])
wait_and_check_expected_view(v4)
- print "Restarting killed lock_server on port $p[2]"
+ print "Restarting killed lock_server on port %s" % (p[2],)
pid[2] = spawn_ls(p[0], p[2])
usleep(300000)
# the last view should include all nodes
wait_for_view_change(paxos_log(port), in_views[port]+1, port, 20)
for port in lastv:
check_views(paxos_log(port), views, lastv)
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 13")
cleanup()
usleep(200000)
if do_run[14]:
print "test14: start 5-process rsm, kill slave break1, kill slave break2"
start_nodes(5, "ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
usleep(100000)
- print "Kill slave (PID: $pid[4]) on port $p[4] at breakpoint 1"
+ print "Kill slave (PID: %s) on port %s at breakpoint 1" % (pid[4], p[4])
spawn("./rsm_tester", p[4]+1, "breakpoint", 1)
- print "Kill slave (PID: $pid[3]) on port $p[3] at breakpoint 2"
+ print "Kill slave (PID: %s) on port %s at breakpoint 2" % (pid[3], p[3])
spawn("./rsm_tester", p[3]+1, "breakpoint", 2)
usleep(100000)
# two view changes:
lastv = (p[0],p[1],p[2])
for port in lastv:
wait_for_view_change(paxos_log(port), in_views[port]+1, port, 20)
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 14")
cleanup()
usleep(200000)
if do_run[15]:
print "test15: start 5-process rsm, kill slave break1, kill primary break2"
start_nodes(5, "ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
usleep(100000)
- print "Kill slave (PID: $pid[4]) on port $p[4] at breakpoint 1"
+ print "Kill slave (PID: %s) on port %s at breakpoint 1" % (pid[4], p[4])
spawn("./rsm_tester", p[4]+1, "breakpoint", 1)
- print "Kill primary (PID: $pid[0]) on port $p[0] at breakpoint 2"
+ print "Kill primary (PID: %s) on port %s at breakpoint 2" % (pid[0], p[0])
spawn("./rsm_tester", p[0]+1, "breakpoint", 2)
usleep(100000)
# two view changes:
lastv = (p[1],p[2],p[3])
for port in lastv:
wait_for_view_change(paxos_log(port), in_views[port]+1, port, 20)
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 15")
cleanup()
usleep(200000)
if do_run[16]:
print "test16: start 3-process rsm, partition primary, heal it"
start_nodes(3, "ls")
- print "Start lock_tester $p[0]"
+ print "Start lock_tester %s" % (p[0],)
t = spawn("./lock_tester", p[0])
usleep(100000)
- print "Partition primary (PID: $pid[0]) on port $p[0] at breakpoint"
+ print "Partition primary (PID: %s) on port %s at breakpoint" % (pid[0], p[0])
spawn("./rsm_tester", p[0]+1, "partition", 0)
usleep(300000)
print "first view change wait"
for port in lastv:
wait_for_view_change(paxos_log(port), in_views[port]+1, port, 20)
usleep(100000)
- print "Heal partition primary (PID: $pid[0]) on port $p[0] at breakpoint"
+ print "Heal partition primary (PID: %s) on port %s at breakpoint" % (pid[0], p[0])
spawn("./rsm_tester", p[0]+1, "partition", 1)
usleep(100000)
# xxx it should test that this is the 5th view!
lastv = (p[0], p[1],p[2])
for port in lastv:
wait_for_view_change(paxos_log(port), in_views[port]+1, port, 20)
- print " Wait for lock_tester to finish (waitpid $t)"
+ print " Wait for lock_tester to finish (waitpid %s)" % (t,)
waitpid_to(t, 600)
- if os.system("grep \"passed all tests successfully\" lock_tester-$p[0].log"):
+ if os.system("grep \"passed all tests successfully\" lock_tester-%s.log" % (p[0],)):
mydie("Failed lock tester for test 16")
cleanup()
usleep(200000)