Skip to content

Commit 4ba7663

Browse files
[add] Enabled Enabled specifying dataset_load_timeout_secs property. Added --logfile option to log to file instead of stdout. (#135)
1 parent c4b785b commit 4ba7663

File tree

10 files changed

+135
-40
lines changed

10 files changed

+135
-40
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.2.6"
3+
version = "0.2.7"
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/cli.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import argparse
88
import logging
9+
import os
910
import sys
1011

1112
import toml
@@ -17,12 +18,19 @@
1718
from redisbench_admin.extract.extract import extract_command_logic
1819
from redisbench_admin.run_local.args import create_run_local_arguments
1920
from redisbench_admin.run_local.run_local import run_local_command_logic
20-
from redisbench_admin.run_remote.args import create_run_remote_arguments, LOG_LEVEL
21+
from redisbench_admin.run_remote.args import create_run_remote_arguments
2122
from redisbench_admin.run_remote.run_remote import run_remote_command_logic
2223
from redisbench_admin.watchdog.args import create_watchdog_arguments
2324
from redisbench_admin.watchdog.watchdog import watchdog_command_logic
2425

2526

27+
LOG_LEVEL = logging.INFO
28+
if os.getenv("VERBOSE", "1") == "0":
29+
LOG_LEVEL = logging.WARN
30+
LOG_FORMAT = "%(asctime)s %(levelname)-4s %(message)s"
31+
LOG_DATEFMT = "%Y-%m-%d %H:%M:%S"
32+
33+
2634
def populate_with_poetry_data():
2735
project_name = "redisbench-admin"
2836
project_version = __version__
@@ -38,14 +46,6 @@ def populate_with_poetry_data():
3846
return project_name, project_description, project_version
3947

4048

41-
# logging settings
42-
logging.basicConfig(
43-
format="%(asctime)s %(levelname)-4s %(message)s",
44-
level=LOG_LEVEL,
45-
datefmt="%Y-%m-%d %H:%M:%S",
46-
)
47-
48-
4949
def main():
5050
if len(sys.argv) < 2:
5151
print(
@@ -66,6 +66,9 @@ def main():
6666
parser.add_argument(
6767
"--local-dir", type=str, default="./", help="local dir to use as storage"
6868
)
69+
parser.add_argument(
70+
"--logname", type=str, default=None, help="logname to write the logs to"
71+
)
6972

7073
if requested_tool == "run-remote":
7174
parser = create_run_remote_arguments(parser)
@@ -96,6 +99,24 @@ def main():
9699

97100
argv = sys.argv[2:]
98101
args = parser.parse_args(args=argv)
102+
103+
if args.logname is not None:
104+
print("Writting log to {}".format(args.logname))
105+
logging.basicConfig(
106+
filename=args.logname,
107+
filemode="a",
108+
format=LOG_FORMAT,
109+
datefmt=LOG_DATEFMT,
110+
level=LOG_LEVEL,
111+
)
112+
else:
113+
# logging settings
114+
logging.basicConfig(
115+
format=LOG_FORMAT,
116+
level=LOG_LEVEL,
117+
datefmt=LOG_DATEFMT,
118+
)
119+
99120
if requested_tool == "run-local":
100121
run_local_command_logic(args)
101122
if requested_tool == "run-remote":

redisbench_admin/run_local/run_local.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
extract_benchmark_tool_settings,
3232
check_required_modules,
3333
results_dict_kpi_check,
34-
extract_redis_configuration_parameters,
34+
extract_redis_dbconfig_parameters,
3535
)
3636
from redisbench_admin.run.redis_benchmark.redis_benchmark import (
3737
redis_benchmark_ensure_min_version_local,
@@ -134,7 +134,7 @@ def run_local_command_logic(args):
134134
)
135135
check_dataset_local_requirements(benchmark_config, temporary_dir, dirname)
136136

137-
redis_configuration_parameters = extract_redis_configuration_parameters(
137+
redis_configuration_parameters, _ = extract_redis_dbconfig_parameters(
138138
benchmark_config, "dbconfig"
139139
)
140140

@@ -158,7 +158,17 @@ def run_local_command_logic(args):
158158
check_required_modules(module_names, required_modules)
159159

160160
# run initialization commands before benchmark starts
161+
logging.info("Running initialization commands before benchmark starts.")
162+
execute_init_commands_start_time = datetime.datetime.now()
161163
execute_init_commands(benchmark_config, r)
164+
execute_init_commands_duration_seconds = (
165+
datetime.datetime.now() - execute_init_commands_start_time
166+
).seconds
167+
logging.info(
168+
"Running initialization commands took {} secs.".format(
169+
execute_init_commands_duration_seconds
170+
)
171+
)
162172

163173
# setup the benchmark
164174
start_time, start_time_ms, start_time_str = get_start_time_vars()

redisbench_admin/run_remote/args.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
# Copyright (c) 2021., Redis Labs Modules
44
# All rights reserved.
55
#
6-
import logging
76
import os
87
import socket
98

@@ -16,9 +15,6 @@
1615
PERFORMANCE_RTS_PUSH,
1716
)
1817

19-
LOG_LEVEL = logging.INFO
20-
if os.getenv("VERBOSE", "1") == "0":
21-
LOG_LEVEL = logging.WARN
2218

2319
DEFAULT_TRIGGERING_ENV = socket.gethostname()
2420
TRIGGERING_ENV = os.getenv("TRIGGERING_ENV", DEFAULT_TRIGGERING_ENV)

redisbench_admin/run_remote/run_remote.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
prepare_benchmark_definitions,
3535
check_required_modules,
3636
results_dict_kpi_check,
37-
extract_redis_configuration_parameters,
37+
extract_redis_dbconfig_parameters,
3838
)
3939
from redisbench_admin.utils.redisgraph_benchmark_go import (
4040
spin_up_standalone_remote_redis,
@@ -359,11 +359,10 @@ def run_remote_command_logic(args):
359359
# in case of some unexpected error we fail the test
360360
try:
361361

362-
redis_configuration_parameters = (
363-
extract_redis_configuration_parameters(
364-
benchmark_config, "dbconfig"
365-
)
366-
)
362+
(
363+
redis_configuration_parameters,
364+
dataset_load_timeout_secs,
365+
) = extract_redis_dbconfig_parameters(benchmark_config, "dbconfig")
367366
# setup Redis
368367
spin_up_standalone_remote_redis(
369368
benchmark_config,
@@ -383,7 +382,7 @@ def run_remote_command_logic(args):
383382
server_public_ip,
384383
username,
385384
)
386-
result = wait_for_conn(local_redis_conn)
385+
result = wait_for_conn(local_redis_conn, dataset_load_timeout_secs)
387386
dataset_load_end_time = datetime.datetime.now()
388387
if result is True:
389388
logging.info("Redis available")
@@ -409,7 +408,19 @@ def run_remote_command_logic(args):
409408
check_required_modules(module_names, required_modules)
410409

411410
# run initialization commands before benchmark starts
411+
logging.info(
412+
"Running initialization commands before benchmark starts."
413+
)
414+
execute_init_commands_start_time = datetime.datetime.now()
412415
execute_init_commands(benchmark_config, local_redis_conn)
416+
execute_init_commands_duration_seconds = (
417+
datetime.datetime.now() - execute_init_commands_start_time
418+
).seconds
419+
logging.info(
420+
"Running initialization commands took {} secs.".format(
421+
execute_init_commands_duration_seconds
422+
)
423+
)
413424

414425
ssh_tunnel.close() # Close the tunnel
415426

redisbench_admin/utils/benchmark_config.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,20 @@ def merge_default_and_specific_properties_dict_type(
123123
)
124124

125125

126-
def extract_redis_configuration_parameters(benchmark_config, dbconfig_keyname):
126+
def extract_redis_dbconfig_parameters(benchmark_config, dbconfig_keyname):
127127
redis_configuration_parameters = {}
128+
dataset_load_timeout_secs = 120
128129
if dbconfig_keyname in benchmark_config:
129130
for k in benchmark_config[dbconfig_keyname]:
130131
if "configuration-parameters" in k:
131132
cp = k["configuration-parameters"]
132133
for item in cp:
133134
for k, v in item.items():
134135
redis_configuration_parameters[k] = v
136+
if "dataset_load_timeout_secs" in k:
137+
dataset_load_timeout_secs = k["dataset_load_timeout_secs"]
135138

136-
return redis_configuration_parameters
139+
return redis_configuration_parameters, dataset_load_timeout_secs
137140

138141

139142
def process_default_yaml_properties_file(

redisbench_admin/utils/utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,4 +244,8 @@ def wait_for_conn(conn, retries=120, command="PING", should_be=True):
244244
time.sleep(1)
245245
retries -= 1
246246
logging.debug("Waiting for Redis")
247+
if retries == 0:
248+
logging.debug(
249+
"Redis busy loading time surpassed the timeout of {} secs".format(retries)
250+
)
247251
return result

redisbench_admin/watchdog/watchdog.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import time
1111

1212
import boto3
13+
import redis
1314
from redistimeseries.client import Client
1415

1516
from redisbench_admin.run.common import get_start_time_vars
@@ -125,14 +126,17 @@ def watchdog_command_logic(args):
125126
running_count, _ = get_ci_ec2_instances_by_state(
126127
ec2_client, ci_machines_prefix, "running"
127128
)
128-
129-
rts.add(
130-
tsname_overall_running,
131-
start_time_ms,
132-
running_count,
133-
labels={"cloud": cloud, "region": EC2_REGION},
134-
)
135-
129+
try:
130+
rts.add(
131+
tsname_overall_running,
132+
start_time_ms,
133+
running_count,
134+
labels={"cloud": cloud, "region": EC2_REGION},
135+
)
136+
except redis.exceptions.ConnectionError as e:
137+
logging.error(
138+
"Detected an error while writing data to rts: {}".format(e.__str__())
139+
)
136140
sleep_time_secs = float(update_interval) - (
137141
(datetime.datetime.now() - starttime).total_seconds()
138142
% float(update_interval)

tests/test_benchmark_config.py

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from redisbench_admin.utils.benchmark_config import (
66
results_dict_kpi_check,
77
check_required_modules,
8-
extract_redis_configuration_parameters,
8+
extract_redis_dbconfig_parameters,
99
)
1010

1111

@@ -51,19 +51,44 @@ def test_extract_redis_configuration_parameters():
5151
"./tests/test_data/redisgraph-benchmark-go-defaults.yml", "r"
5252
) as config_fd:
5353
benchmark_config = yaml.safe_load(config_fd)
54-
redis_configuration_parameters = extract_redis_configuration_parameters(
55-
benchmark_config, "dbconfig"
56-
)
54+
(
55+
redis_configuration_parameters,
56+
dataset_load_timeout_secs,
57+
) = extract_redis_dbconfig_parameters(benchmark_config, "dbconfig")
5758
assert redis_configuration_parameters == {}
59+
assert dataset_load_timeout_secs == 120
5860

5961
with open(
6062
"./tests/test_data/tsbs-devops-ingestion-scale100-4days-keyspace.yml", "r"
6163
) as config_fd:
6264
benchmark_config = yaml.safe_load(config_fd)
63-
redis_configuration_parameters = extract_redis_configuration_parameters(
64-
benchmark_config, "dbconfig"
65-
)
65+
(
66+
redis_configuration_parameters,
67+
dataset_load_timeout_secs,
68+
) = extract_redis_dbconfig_parameters(benchmark_config, "dbconfig")
69+
assert dataset_load_timeout_secs == 120
6670
assert redis_configuration_parameters == {
6771
"notify-keyspace-events": "KEA",
6872
"timeout": 0,
6973
}
74+
75+
with open(
76+
"./tests/test_data/redisgraph-benchmark-go-defaults.yml", "r"
77+
) as config_fd:
78+
benchmark_config = yaml.safe_load(config_fd)
79+
(
80+
redis_configuration_parameters,
81+
dataset_load_timeout_secs,
82+
) = extract_redis_dbconfig_parameters(benchmark_config, "dbconfig")
83+
assert redis_configuration_parameters == {}
84+
assert dataset_load_timeout_secs == 120
85+
86+
with open(
87+
"./tests/test_data/redisgraph-benchmark-go-dataset-timeout.yml", "r"
88+
) as config_fd:
89+
benchmark_config = yaml.safe_load(config_fd)
90+
(
91+
redis_configuration_parameters,
92+
dataset_load_timeout_secs,
93+
) = extract_redis_dbconfig_parameters(benchmark_config, "dbconfig")
94+
assert dataset_load_timeout_secs == 1200
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: "UPDATE-BASELINE"
2+
remote:
3+
- setup: redisgraph-r5
4+
- type: oss-standalone
5+
dbconfig:
6+
- dataset: "datasets/single_node.rdb"
7+
- dataset_load_timeout_secs: 1200
8+
clientconfig:
9+
- tool: redisgraph-benchmark-go
10+
- parameters:
11+
- graph: "g"
12+
- rps: 0
13+
- clients: 32
14+
- threads: 4
15+
- connections: 32
16+
- requests: 1000000
17+
- queries:
18+
- { q: "MATCH (n) WHERE ID(n) = 0 SET n.v = n.v + 1", ratio: 1 }
19+
kpis:
20+
- le: { $.OverallClientLatencies.Total.q50: 2.0 }
21+
- ge: { $.OverallQueryRates.Total: 18000 }

0 commit comments

Comments
 (0)