Skip to content

Commit 0c3d58a

Browse files
[add] Enabled specifying dbconfig configuration-parameters (#110)
1 parent 9a6a6f7 commit 0c3d58a

File tree

10 files changed

+170
-32
lines changed

10 files changed

+170
-32
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "redisbench-admin"
3-
version = "0.1.77"
3+
version = "0.1.78"
44
description = "Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... )."
55
authors = ["filipecosta90 <[email protected]>"]
66
readme = "README.md"

redisbench_admin/run_local/run_local.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
extract_benchmark_tool_settings,
1919
check_required_modules,
2020
results_dict_kpi_check,
21+
extract_redis_configuration_parameters,
2122
)
2223
from redisbench_admin.run.redis_benchmark.redis_benchmark import (
2324
redis_benchmark_ensure_min_version_local,
@@ -79,8 +80,15 @@ def run_local_command_logic(args):
7980
)
8081
check_dataset_local_requirements(benchmark_config, temporary_dir, dirname)
8182

83+
redis_configuration_parameters = extract_redis_configuration_parameters(
84+
benchmark_config, "dbconfig"
85+
)
86+
8287
redis_process = spin_up_local_redis(
83-
temporary_dir, args.port, local_module_file
88+
temporary_dir,
89+
args.port,
90+
local_module_file,
91+
redis_configuration_parameters,
8492
)
8593
if is_process_alive(redis_process) is False:
8694
raise Exception("Redis process is not alive. Failing test.")

redisbench_admin/run_remote/run_remote.py

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
prepare_benchmark_definitions,
2626
check_required_modules,
2727
results_dict_kpi_check,
28+
extract_redis_configuration_parameters,
2829
)
2930
from redisbench_admin.utils.redisgraph_benchmark_go import (
3031
spin_up_standalone_remote_redis,
@@ -354,6 +355,11 @@ def run_remote_command_logic(args):
354355
# after we've created the env, even on error we should always teardown
355356
# in case of some unexpected error we fail the test
356357
try:
358+
359+
redis_configuration_parameters = extract_redis_configuration_parameters(
360+
benchmark_config, "dbconfig"
361+
)
362+
357363
# setup Redis
358364
spin_up_standalone_remote_redis(
359365
benchmark_config,
@@ -364,6 +370,7 @@ def run_remote_command_logic(args):
364370
remote_module_file,
365371
remote_dataset_file,
366372
dirname,
373+
redis_configuration_parameters,
367374
)
368375
module_names, artifact_versions = extract_artifact_version_remote(
369376
server_public_ip, server_plaintext_port, username, private_key
@@ -390,20 +397,11 @@ def run_remote_command_logic(args):
390397
redisbenchmark_go_link,
391398
)
392399
if "tsbs_" in benchmark_tool:
393-
remote_tool_link = "/tmp/{}".format(benchmark_tool)
394-
tool_link = (
395-
"https://s3.amazonaws.com/benchmarks.redislabs/"
396-
+ "redistimeseries/tools/tsbs/{}_linux_amd64".format(
397-
benchmark_tool
398-
)
399-
)
400-
401-
queries_file_link = None
402-
for entry in benchmark_config["clientconfig"]:
403-
if "parameters" in entry:
404-
for parameter in entry["parameters"]:
405-
if "file" in parameter:
406-
queries_file_link = parameter["file"]
400+
(
401+
queries_file_link,
402+
remote_tool_link,
403+
tool_link,
404+
) = extract_tsbs_extra_links(benchmark_config, benchmark_tool)
407405

408406
setup_remote_benchmark_tool_requirements_tsbs(
409407
client_public_ip,
@@ -586,6 +584,21 @@ def run_remote_command_logic(args):
586584
exit(return_code)
587585

588586

587+
def extract_tsbs_extra_links(benchmark_config, benchmark_tool):
588+
remote_tool_link = "/tmp/{}".format(benchmark_tool)
589+
tool_link = (
590+
"https://s3.amazonaws.com/benchmarks.redislabs/"
591+
+ "redistimeseries/tools/tsbs/{}_linux_amd64".format(benchmark_tool)
592+
)
593+
queries_file_link = None
594+
for entry in benchmark_config["clientconfig"]:
595+
if "parameters" in entry:
596+
for parameter in entry["parameters"]:
597+
if "file" in parameter:
598+
queries_file_link = parameter["file"]
599+
return queries_file_link, remote_tool_link, tool_link
600+
601+
589602
def get_test_s3_bucket_path(s3_bucket_name, test_name, tf_github_org, tf_github_repo):
590603
s3_bucket_path = "{github_org}/{github_repo}/results/{test_name}/".format(
591604
github_org=tf_github_org,

redisbench_admin/utils/benchmark_config.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,19 @@ def merge_default_and_specific_properties_dict_type(
117117
)
118118

119119

120+
def extract_redis_configuration_parameters(benchmark_config, dbconfig_keyname):
121+
redis_configuration_parameters = {}
122+
if dbconfig_keyname in benchmark_config:
123+
for k in benchmark_config[dbconfig_keyname]:
124+
if "configuration-parameters" in k:
125+
cp = k["configuration-parameters"]
126+
for item in cp:
127+
for k, v in item.items():
128+
redis_configuration_parameters[k] = v
129+
130+
return redis_configuration_parameters
131+
132+
120133
def process_default_yaml_properties_file(
121134
default_kpis, default_metrics, defaults_filename, exporter_timemetric_path, stream
122135
):

redisbench_admin/utils/local.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,11 @@ def spin_up_local_redis(
8787
dbdir,
8888
port,
8989
local_module_file,
90+
configuration_parameters=None,
9091
):
91-
command = generate_standalone_redis_server_args(dbdir, local_module_file, port)
92+
command = generate_standalone_redis_server_args(
93+
dbdir, local_module_file, port, configuration_parameters
94+
)
9295

9396
logging.info(
9497
"Running local redis-server with the following args: {}".format(
@@ -102,7 +105,9 @@ def spin_up_local_redis(
102105
return redis_process
103106

104107

105-
def generate_standalone_redis_server_args(dbdir, local_module_file, port):
108+
def generate_standalone_redis_server_args(
109+
dbdir, local_module_file, port, configuration_parameters=None
110+
):
106111
# start redis-server
107112
command = [
108113
"redis-server",
@@ -113,6 +118,14 @@ def generate_standalone_redis_server_args(dbdir, local_module_file, port):
113118
"--dir",
114119
dbdir,
115120
]
121+
if configuration_parameters is not None:
122+
for parameter, parameter_value in configuration_parameters.items():
123+
command.extend(
124+
[
125+
"--{}".format(parameter),
126+
parameter_value,
127+
]
128+
)
116129
if local_module_file is not None:
117130
command.extend(
118131
[

redisbench_admin/utils/redisgraph_benchmark_go.py

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def spin_up_standalone_remote_redis(
1414
remote_module_file,
1515
remote_dataset_file,
1616
dirname=".",
17+
redis_configuration_parameters=None,
1718
):
1819
# copy the rdb to DB machine
1920
check_dataset_remote_requirements(
@@ -24,23 +25,36 @@ def spin_up_standalone_remote_redis(
2425
remote_dataset_file,
2526
dirname,
2627
)
28+
initial_redis_cmd = (
29+
'redis-server --save "" --dir /tmp/ --daemonize yes --protected-mode no'
30+
)
31+
if redis_configuration_parameters is not None:
32+
for (
33+
configuration_parameter,
34+
configuration_value,
35+
) in redis_configuration_parameters.items():
36+
initial_redis_cmd += " --{} {}".format(
37+
configuration_parameter, configuration_value
38+
)
2739

2840
# copy the module to the DB machine
29-
copy_file_to_remote_setup(
30-
server_public_ip, username, private_key, local_module_file, remote_module_file
31-
)
32-
execute_remote_commands(
33-
server_public_ip,
34-
username,
35-
private_key,
36-
["chmod 755 {}".format(remote_module_file)],
37-
)
38-
# start redis-server
39-
commands = [
40-
"redis-server --dir /tmp/ --daemonize yes --protected-mode no --loadmodule {}".format(
41-
remote_module_file
41+
if remote_module_file is not None:
42+
copy_file_to_remote_setup(
43+
server_public_ip,
44+
username,
45+
private_key,
46+
local_module_file,
47+
remote_module_file,
4248
)
43-
]
49+
execute_remote_commands(
50+
server_public_ip,
51+
username,
52+
private_key,
53+
["chmod 755 {}".format(remote_module_file)],
54+
)
55+
initial_redis_cmd += " --loadmodule {}".format(remote_module_file)
56+
# start redis-server
57+
commands = [initial_redis_cmd]
4458
execute_remote_commands(server_public_ip, username, private_key, commands)
4559

4660

tests/test_benchmark_config.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from redisbench_admin.utils.benchmark_config import (
66
results_dict_kpi_check,
77
check_required_modules,
8+
extract_redis_configuration_parameters,
89
)
910

1011

@@ -43,3 +44,26 @@ def test_check_required_modules():
4344
assert "Unable to detect required module" in e.__str__()
4445
check_required_modules(["search", "ReJSON", "TimeSeries"], ["search"])
4546
check_required_modules(["search", "ReJSON", "TimeSeries"], ["search", "TimeSeries"])
47+
48+
49+
def test_extract_redis_configuration_parameters():
50+
with open(
51+
"./tests/test_data/redisgraph-benchmark-go-defaults.yml", "r"
52+
) as config_fd:
53+
benchmark_config = yaml.safe_load(config_fd)
54+
redis_configuration_parameters = extract_redis_configuration_parameters(
55+
benchmark_config, "dbconfig"
56+
)
57+
assert redis_configuration_parameters == {}
58+
59+
with open(
60+
"./tests/test_data/tsbs-devops-ingestion-scale100-4days-keyspace.yml", "r"
61+
) as config_fd:
62+
benchmark_config = yaml.safe_load(config_fd)
63+
redis_configuration_parameters = extract_redis_configuration_parameters(
64+
benchmark_config, "dbconfig"
65+
)
66+
assert redis_configuration_parameters == {
67+
"notify-keyspace-events": "KEA",
68+
"timeout": 0,
69+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: "tsbs-devops-ingestion-scale100-4days-keyspace"
2+
remote:
3+
- type: oss-standalone
4+
- setup: redistimeseries-m5
5+
dbconfig:
6+
- configuration-parameters:
7+
- notify-keyspace-events: KEA
8+
- timeout: 0
9+
clientconfig:
10+
- tool: tsbs_load_redistimeseries
11+
- parameters:
12+
- workers: 64
13+
- reporting-period: 1s
14+
- file: "https://s3.amazonaws.com/benchmarks.redislabs/redistimeseries/tsbs/datasets/devops/scale100/data_redistimeseries_cpu-only_100.dat"
15+
exporter:
16+
redistimeseries:
17+
timemetric: "$.StartTime"
18+
metrics:
19+
- "$.Totals.metricRate"
20+
- "$.Totals.rowRate"

tests/test_local.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,20 @@ def test_generate_standalone_redis_server_args():
6262
"--loadmodule",
6363
os.path.abspath(local_module_file),
6464
]
65+
cmd = generate_standalone_redis_server_args(
66+
".", None, "9999", {"notify-keyspace-events": "KEA"}
67+
)
68+
assert cmd == [
69+
"redis-server",
70+
"--save",
71+
'""',
72+
"--port",
73+
"9999",
74+
"--dir",
75+
".",
76+
"--notify-keyspace-events",
77+
"KEA",
78+
]
6579

6680

6781
def test_spin_up_local_redis():

tests/test_run_remote.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
redistimeseries_results_logic,
66
merge_default_and_config_metrics,
77
get_test_s3_bucket_path,
8+
extract_tsbs_extra_links,
89
)
910
from redisbench_admin.utils.benchmark_config import process_default_yaml_properties_file
1011
from redisbench_admin.utils.remote import get_overall_dashboard_keynames
@@ -94,3 +95,21 @@ def test_get_overall_dashboard_keynames():
9495
"ci.benchmarks.redislabs/env/org/repo:total_failures"
9596
== tsname_project_total_failures
9697
)
98+
99+
100+
def test_extract_tsbs_extra_links():
101+
with open(
102+
"./tests/test_data/tsbs-devops-ingestion-scale100-4days-keyspace.yml", "r"
103+
) as yml_file:
104+
benchmark_config = yaml.safe_load(yml_file)
105+
queries_file_link, remote_tool_link, tool_link = extract_tsbs_extra_links(
106+
benchmark_config, "tsbs_load_redistimeseries"
107+
)
108+
assert (
109+
queries_file_link
110+
== "https://s3.amazonaws.com/benchmarks.redislabs/redistimeseries/tsbs/datasets/devops/scale100/data_redistimeseries_cpu-only_100.dat"
111+
)
112+
assert remote_tool_link == "/tmp/tsbs_load_redistimeseries"
113+
assert tool_link == (
114+
"https://s3.amazonaws.com/benchmarks.redislabs/redistimeseries/tools/tsbs/tsbs_load_redistimeseries_linux_amd64"
115+
)

0 commit comments

Comments
 (0)