Commit a1eb0c57 authored by Dave Wells's avatar Dave Wells Committed by Yoni Fogel

add powerfail test

git-svn-id: file:///svn/toku/tokudb@18322 c7de825b-a66e-492c-adef-691d508d4ae1
parent 7e47d699
#!/usr/local/bin/python2.6
import sys
import os
import pexpect
import getpass
#
# remote_cmd
#
nameaddr='admn@192.168.1.254'
passwd='admn'
def IPM_cmd(cmds):
# password handling
ssh_newkey = 'Are you sure you want to continue connecting'
p=pexpect.spawn('ssh %s' % nameaddr, timeout=60)
i=p.expect([ssh_newkey,'Password:',pexpect.EOF])
if i==0:
p.sendline('yes')
i=p.expect([ssh_newkey,'Password:',pexpect.EOF])
if i==1:
p.sendline(passwd)
elif i==2:
print "I either got key or connection timeout"
pass
# run command(s)
i = p.expect('Sentry:')
for cmd in cmds:
if i==0:
p.sendline(cmd)
else:
print 'p.expect saw', p.before
i = p.expect('Sentry:')
print p.before
# close session
p.sendline('quit')
p.expect(pexpect.EOF)
return 0
def IPM_power_on():
IPM_cmd(['on all'])
def IPM_power_off():
IPM_cmd(['off all'])
def main(argv):
# passwd = getpass.getpass('password for %s:' % (nameaddr))
if argv[1] == 'on':
IPM_power_on()
elif argv[1] == 'off':
IPM_power_off()
else:
IPM_cmd(argv[1:])
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv))
#!/usr/local/bin/python2.6
#
# Copyright (C) 2009 Tokutek, Inc.
#
import sys
import os
import optparse
import getpass
import pexpect
import time
from multiprocessing import Process
# options
parser = optparse.OptionParser()
parser.add_option('--test', dest='test', type='string', default=None, help="name of stress test to run")
parser.add_option('--iterations', dest='iterations', type='int', default=1, help="Number of test iterations (default = 1)")
parser.add_option('--verbose', dest='verbose', action="store_true", default=False, help="Verbose printing (default = FALSE)")
parser.add_option('--client', dest='client', type='string', default='192.168.1.107', help='client machine being power failed (default=tick)')
parser.add_option('--sandbox_dir', dest='sbdir', type='string', default='/tpch/mysb/msb_3.0.2-beta_16948/', help='sandbox directory (default = None)')
options,remainder = parser.parse_args()
nameaddr='mysql@'+options.client
password='mytokudb'
ipm_nameaddr='admn@192.168.1.254'
ipm_passwd='admn'
def IPM_cmd(cmds):
# password handling
ssh_newkey = 'Are you sure you want to continue connecting'
p=pexpect.spawn('ssh %s' % ipm_nameaddr, timeout=60)
i=p.expect([ssh_newkey,'Password:',pexpect.EOF])
if i==0:
p.sendline('yes')
i=p.expect([ssh_newkey,'Password:',pexpect.EOF])
if i==1:
p.sendline(ipm_passwd)
elif i==2:
print "I either got key or connection timeout"
pass
# run command(s)
i = p.expect('Sentry:')
for cmd in cmds:
if i==0:
p.sendline(cmd)
else:
print 'p.expect saw', p.before
i = p.expect('Sentry:')
print p.before
# close session
p.sendline('quit')
p.expect(pexpect.EOF)
return 0
def IPM_power_on():
IPM_cmd(['on all'])
def IPM_power_off():
IPM_cmd(['off all'])
def ssh_cmd(cmd, verbose=True, timeout=30):
ssh_newkey = 'Are you sure you want to continue connecting'
p=pexpect.spawn('ssh %s %s' % (nameaddr, cmd), timeout=timeout)
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==0:
p.sendline('yes')
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==1:
if verbose:
print 'ssh %s %s' % (nameaddr, cmd)
p.sendline(password)
p.expect(pexpect.EOF)
elif i==2:
print "I either got key or connection timeout"
pass
if verbose:
print p.before
return p.before
def client_cmd(cmd, verbose=True, timeout=3600):
ssh_cmd(cmd, verbose, timeout)
def ping_server(name):
p=pexpect.spawn("ping -c 1 "+name)
i=p.expect(['1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms',
'1 packets transmitted, 1 received, 0% packet loss, time 0ms',
pexpect.EOF])
return i
def test_it():
cmd = "/home/wells/svn/iibench/py/iibench.py --db_config_file=%smy.sandbox.cnf --max_rows=1000000000 --engine=tokudb --outfile=/tmp/pf_%d" % (options.sbdir, options.iterations)
print "CMD = ", cmd
client_cmd(cmd, timeout=3600)
def run_test():
# cmd = options.test
# if ( options.verbose ): cmd += ' -v'
# for i in range(options.iterations):
t0 = Process(target=test_it, args=())
for iter in range(options.iterations + 1):
print "Turn On Power to Server"
IPM_power_on()
i = ping_server(options.client)
while ( i != 1 ):
i = ping_server(options.client)
print "Server rebooted, wait 30 seconds to restart MySQL"
time.sleep(30)
print "Start MySQL"
client_cmd(options.sbdir+'stop') # clears out flags from previous start
client_cmd(options.sbdir+'start')
if iter < options.iterations:
print "Run Test"
t0.start()
print "Sleep(%d)" % (300 + iter)
time.sleep(300 + iter)
print "Turn Off Power to Server"
IPM_power_off()
t0.terminate()
else:
# last loop through, just cleanup
client_cmd(options.sbdir+'stop')
def main(argv):
run_test()
return 0
if __name__ == '__main__':
usage = sys.modules["__main__"].__doc__
parser.set_usage(usage)
unused_flags, new_argv = parser.parse_args(args=sys.argv[1:], values=options)
sys.exit(main([sys.argv[0]] + new_argv))
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment