| #! /usr/bin/env python |
| import subprocess |
| import argparse |
| import random |
| import time |
| import sys |
| |
| |
| def generate_runtimes(total_runtime): |
| # combination of short runtimes and long runtimes, with heavier |
| # weight on short runtimes |
| possible_runtimes_sec = range(1, 10) + range(1, 20) + [100, 1000] |
| runtimes = [] |
| while total_runtime > 0: |
| chosen = random.choice(possible_runtimes_sec) |
| chosen = min(chosen, total_runtime) |
| runtimes.append(chosen) |
| total_runtime -= chosen |
| return runtimes |
| |
| |
| def main(args): |
| runtimes = generate_runtimes(int(args.runtime_sec)) |
| print "Going to execute write stress for " + str(runtimes) |
| first_time = True |
| |
| for runtime in runtimes: |
| kill = random.choice([False, True]) |
| |
| cmd = './write_stress --runtime_sec=' + \ |
| ("-1" if kill else str(runtime)) |
| |
| if len(args.db) > 0: |
| cmd = cmd + ' --db=' + args.db |
| |
| if first_time: |
| first_time = False |
| else: |
| # use current db |
| cmd = cmd + ' --destroy_db=false' |
| if random.choice([False, True]): |
| cmd = cmd + ' --delete_obsolete_files_with_fullscan=true' |
| if random.choice([False, True]): |
| cmd = cmd + ' --low_open_files_mode=true' |
| |
| print("Running write_stress for %d seconds (%s): %s" % |
| (runtime, ("kill-mode" if kill else "clean-shutdown-mode"), |
| cmd)) |
| |
| child = subprocess.Popen([cmd], shell=True) |
| killtime = time.time() + runtime |
| while not kill or time.time() < killtime: |
| time.sleep(1) |
| if child.poll() is not None: |
| if child.returncode == 0: |
| break |
| else: |
| print("ERROR: write_stress died with exitcode=%d\n" |
| % child.returncode) |
| sys.exit(1) |
| if kill: |
| child.kill() |
| # breathe |
| time.sleep(3) |
| |
| if __name__ == '__main__': |
| random.seed(time.time()) |
| parser = argparse.ArgumentParser(description="This script runs and kills \ |
| write_stress multiple times") |
| parser.add_argument("--runtime_sec", default='1000') |
| parser.add_argument("--db", default='') |
| args = parser.parse_args() |
| main(args) |