| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #!/usr/bin/env python3
- # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
- import argparse
- import random
- import subprocess
- import sys
- import time
- def generate_runtimes(total_runtime):
- # combination of short runtimes and long runtimes, with heavier
- # weight on short runtimes
- possible_runtimes_sec = list(range(1, 10)) + list(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)
- ) # noqa: E999 T25377293 Grandfathered in
- 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)
|