80 lines
2.6 KiB
Python
Executable File
80 lines
2.6 KiB
Python
Executable File
#!/bin/env python2
|
|
|
|
import argparse
|
|
import sys
|
|
import os
|
|
import random
|
|
|
|
parser = argparse.ArgumentParser("Run multithreaded client tests")
|
|
|
|
parser.add_argument(
|
|
"cluster_file", nargs="+", help="List of fdb.cluster files to connect to"
|
|
)
|
|
parser.add_argument(
|
|
"--skip-so-files", default=False, action="store_true", help="Do not load .so files"
|
|
)
|
|
parser.add_argument(
|
|
"--threads",
|
|
metavar="N",
|
|
type=int,
|
|
default=3,
|
|
help="Number of threads to use. Zero implies local client",
|
|
)
|
|
parser.add_argument(
|
|
"--build-dir",
|
|
metavar="DIR",
|
|
default=".",
|
|
help="Path to root directory of FDB build output",
|
|
)
|
|
parser.add_argument(
|
|
"--client-log-dir",
|
|
metavar="DIR",
|
|
default="client-logs",
|
|
help="Path to write client logs to. The directory will be created if it does not exist.",
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
sys.path.append(args.build_dir + "/bindings/python")
|
|
import fdb
|
|
|
|
### sample usage (from inside your FDB build output directory):
|
|
|
|
## These should pass:
|
|
# ../tests/loopback_cluster/run_cluster.sh . 3 '../tests/python_tests/multithreaded_client.py loopback-cluster-*/fdb.cluster'
|
|
# ../tests/loopback_cluster/run_cluster.sh . 3 '../tests/python_tests/multithreaded_client.py loopback-cluster-*/fdb.cluster --threads 1'
|
|
# ../tests/loopback_cluster/run_cluster.sh . 3 '../tests/python_tests/multithreaded_client.py loopback-cluster-*/fdb.cluster --threads 1 --skip-so-files'
|
|
# ../tests/loopback_cluster/run_cluster.sh . 3 '../tests/python_tests/multithreaded_client.py loopback-cluster-*/fdb.cluster --threads 0'
|
|
# ../tests/loopback_cluster/run_cluster.sh . 3 '../tests/python_tests/multithreaded_client.py loopback-cluster-*/fdb.cluster --threads 0 --skip-so-files'
|
|
|
|
## This fails (unsupported configuration):
|
|
# ../tests/loopback_cluster/run_cluster.sh . 3 '../tests/python_tests/multithreaded_client.py loopback-cluster-*/fdb.cluster --threads 2 --skip-so-files'
|
|
|
|
fdb.api_version(630)
|
|
|
|
if not os.path.exists(args.client_log_dir):
|
|
os.mkdir(args.client_log_dir)
|
|
|
|
fdb.options.set_trace_enable(args.client_log_dir)
|
|
fdb.options.set_knob("min_trace_severity=5")
|
|
|
|
if not args.skip_so_files:
|
|
print("Loading .so files")
|
|
fdb.options.set_external_client_directory(args.build_dir + "/lib")
|
|
|
|
if args.threads > 0:
|
|
fdb.options.set_client_threads_per_version(args.threads)
|
|
|
|
dbs = []
|
|
for v in args.cluster_file:
|
|
dbs.append(fdb.open(cluster_file=v))
|
|
|
|
counter = 0
|
|
for i in range(100):
|
|
key = b"test_%d" % random.randrange(0, 100000000)
|
|
val = b"value_%d" % random.randrange(0, 10000000)
|
|
db = dbs[i % len(dbs)]
|
|
print("Writing: ", key, val, db)
|
|
db[key] = val
|
|
assert val == db[key]
|