Skip to content

Commit 1620979

Browse files
Include keyspace range checks on flow tests (RedisLabs#208)
1 parent 82dba6a commit 1620979

File tree

2 files changed

+147
-3
lines changed

2 files changed

+147
-3
lines changed

tests/include.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,15 @@ def debugPrintMemtierOnError(config, env):
5959
env.debugPrint(line.rstrip(), True)
6060

6161

62-
def get_expected_request_count(config):
62+
def get_expected_request_count(config, key_minimum=0, key_maximum=1000000):
6363
result = -1
6464
if 'memtier_benchmark' in config:
6565
mt = config['memtier_benchmark']
6666
if 'threads' in mt and 'clients' in mt and 'requests' in mt:
67-
result = config['memtier_benchmark']['threads'] * config['memtier_benchmark']['clients'] * \
68-
config['memtier_benchmark']['requests']
67+
if mt['requests'] != 'allkeys':
68+
result = mt['threads'] * mt['clients'] * mt['requests']
69+
else:
70+
result = key_maximum - key_minimum + 1
6971
return result
7072

7173

@@ -112,3 +114,21 @@ def ensure_clean_benchmark_folder(dirname):
112114
os.removedirs(dirname)
113115
os.makedirs(dirname)
114116

117+
118+
def assert_keyspace_range(env, key_max, key_min, master_nodes_connections):
119+
expected_keyspace_range = key_max - key_min + 1
120+
overall_keyspace_range = agg_keyspace_range(master_nodes_connections)
121+
# assert we have the expected keyspace range
122+
env.assertEqual(expected_keyspace_range, overall_keyspace_range)
123+
124+
125+
def agg_keyspace_range(master_nodes_connections):
126+
overall_keyspace_range = 0
127+
for master_connection in master_nodes_connections:
128+
shard_reply = master_connection.execute_command("INFO", "KEYSPACE")
129+
shard_count = 0
130+
if 'db0' in shard_reply:
131+
if 'keys' in shard_reply['db0']:
132+
shard_count = int(shard_reply['db0']['keys'])
133+
overall_keyspace_range = overall_keyspace_range + shard_count
134+
return overall_keyspace_range

tests/tests_oss_simple_flow.py

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,130 @@
55
from mbdirector.runner import RunConfig
66

77

8+
def test_preload_and_set_get(env):
9+
key_max = 500000
10+
key_min = 1
11+
benchmark_specs = {"name": env.testName, "args": ['--pipeline=10','--ratio=1:0','--key-pattern=P:P','--key-minimum={}'.format(key_min),'--key-maximum={}'.format(key_max)]}
12+
addTLSArgs(benchmark_specs, env)
13+
config = get_default_memtier_config(threads=2, clients=10, requests='allkeys')
14+
master_nodes_list = env.getMasterNodesList()
15+
overall_expected_request_count = get_expected_request_count(config,key_min, key_max)
16+
17+
add_required_env_arguments(benchmark_specs, config, env, master_nodes_list)
18+
19+
# Create a temporary directory
20+
test_dir = tempfile.mkdtemp()
21+
22+
config = RunConfig(test_dir, env.testName, config, {})
23+
ensure_clean_benchmark_folder(config.results_dir)
24+
25+
benchmark = Benchmark.from_json(config, benchmark_specs)
26+
27+
# benchmark.run() returns True if the return code of memtier_benchmark was 0
28+
memtier_ok = benchmark.run()
29+
debugPrintMemtierOnError(config, env)
30+
31+
master_nodes_connections = env.getOSSMasterNodesConnectionList()
32+
merged_command_stats = {'cmdstat_set': {'calls': 0}, 'cmdstat_get': {'calls': 0}}
33+
assert_keyspace_range(env, key_max, key_min, master_nodes_connections)
34+
35+
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
36+
assert_minimum_memtier_outcomes(config, env, memtier_ok, overall_expected_request_count,
37+
overall_request_count)
38+
json_filename = '{0}/mb.json'.format(config.results_dir)
39+
40+
for master_connection in master_nodes_connections:
41+
master_connection.execute_command("CONFIG", "RESETSTAT")
42+
43+
benchmark_specs = {"name": env.testName, "args": ['--pipeline=10','--ratio=1:1','--key-pattern=R:R','--key-minimum={}'.format(key_min),'--key-maximum={}'.format(key_max)]}
44+
addTLSArgs(benchmark_specs, env)
45+
config = get_default_memtier_config(threads=2, clients=10, requests=200000)
46+
master_nodes_list = env.getMasterNodesList()
47+
overall_expected_request_count = get_expected_request_count(config,key_min, key_max)
48+
49+
add_required_env_arguments(benchmark_specs, config, env, master_nodes_list)
50+
51+
# Create a temporary directory
52+
test_dir = tempfile.mkdtemp()
53+
54+
config = RunConfig(test_dir, env.testName, config, {})
55+
ensure_clean_benchmark_folder(config.results_dir)
56+
57+
benchmark = Benchmark.from_json(config, benchmark_specs)
58+
59+
# benchmark.run() returns True if the return code of memtier_benchmark was 0
60+
memtier_ok = benchmark.run()
61+
debugPrintMemtierOnError(config, env)
62+
63+
merged_command_stats = {'cmdstat_set': {'calls': 0}, 'cmdstat_get': {'calls': 0}}
64+
assert_keyspace_range(env, key_max, key_min, master_nodes_connections)
65+
66+
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
67+
assert_minimum_memtier_outcomes(config, env, memtier_ok, overall_expected_request_count,
68+
overall_request_count)
69+
70+
71+
def test_default_set(env):
72+
key_max = 500000
73+
key_min = 1
74+
benchmark_specs = {"name": env.testName, "args": ['--pipeline=10','--ratio=1:0','--key-pattern=P:P','--key-minimum={}'.format(key_min),'--key-maximum={}'.format(key_max)]}
75+
addTLSArgs(benchmark_specs, env)
76+
config = get_default_memtier_config(threads=2, clients=10, requests='allkeys')
77+
master_nodes_list = env.getMasterNodesList()
78+
overall_expected_request_count = get_expected_request_count(config,key_min, key_max)
79+
80+
add_required_env_arguments(benchmark_specs, config, env, master_nodes_list)
81+
82+
# Create a temporary directory
83+
test_dir = tempfile.mkdtemp()
84+
85+
config = RunConfig(test_dir, env.testName, config, {})
86+
ensure_clean_benchmark_folder(config.results_dir)
87+
88+
benchmark = Benchmark.from_json(config, benchmark_specs)
89+
90+
# benchmark.run() returns True if the return code of memtier_benchmark was 0
91+
memtier_ok = benchmark.run()
92+
master_nodes_connections = env.getOSSMasterNodesConnectionList()
93+
94+
merged_command_stats = {'cmdstat_set': {'calls': 0}, 'cmdstat_get': {'calls': 0}}
95+
assert_keyspace_range(env, key_max, key_min, master_nodes_connections)
96+
97+
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
98+
assert_minimum_memtier_outcomes(config, env, memtier_ok, overall_expected_request_count,
99+
overall_request_count)
100+
101+
# ensure if we run again on a different key pattern the dataset doesn't grow
102+
for master_connection in master_nodes_connections:
103+
master_connection.execute_command("CONFIG", "RESETSTAT")
104+
105+
benchmark_specs = {"name": env.testName, "args": ['--pipeline=10','--ratio=1:0','--key-pattern=R:R','--key-minimum={}'.format(key_min),'--key-maximum={}'.format(key_max)]}
106+
addTLSArgs(benchmark_specs, env)
107+
config = get_default_memtier_config(threads=2, clients=10, requests=200000)
108+
master_nodes_list = env.getMasterNodesList()
109+
overall_expected_request_count = get_expected_request_count(config,key_min, key_max)
110+
111+
add_required_env_arguments(benchmark_specs, config, env, master_nodes_list)
112+
113+
# Create a temporary directory
114+
test_dir = tempfile.mkdtemp()
115+
116+
config = RunConfig(test_dir, env.testName, config, {})
117+
ensure_clean_benchmark_folder(config.results_dir)
118+
119+
benchmark = Benchmark.from_json(config, benchmark_specs)
120+
121+
# benchmark.run() returns True if the return code of memtier_benchmark was 0
122+
memtier_ok = benchmark.run()
123+
124+
master_nodes_connections = env.getOSSMasterNodesConnectionList()
125+
merged_command_stats = {'cmdstat_set': {'calls': 0}}
126+
assert_keyspace_range(env, key_max, key_min, master_nodes_connections)
127+
128+
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
129+
assert_minimum_memtier_outcomes(config, env, memtier_ok, overall_expected_request_count,
130+
overall_request_count)
131+
8132
def test_default_set_get(env):
9133
benchmark_specs = {"name": env.testName, "args": []}
10134
addTLSArgs(benchmark_specs, env)

0 commit comments

Comments
 (0)