redisbench-admin 0.11.50__py3-none-any.whl → 0.11.52__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- redisbench_admin/cli.py +13 -6
- redisbench_admin/compare/args.py +0 -20
- redisbench_admin/compare/compare.py +23 -165
- redisbench_admin/export/export.py +0 -1
- redisbench_admin/profilers/daemon.py +2 -2
- redisbench_admin/run/ann/pkg/.dockerignore +0 -0
- redisbench_admin/run/ann/pkg/.git +0 -0
- redisbench_admin/run/ann/pkg/.github/workflows/benchmarks.yml +0 -0
- redisbench_admin/run/ann/pkg/.gitignore +0 -0
- redisbench_admin/run/ann/pkg/LICENSE +0 -0
- redisbench_admin/run/ann/pkg/README.md +0 -0
- redisbench_admin/run/ann/pkg/algos.yaml +0 -0
- redisbench_admin/run/ann/pkg/algosP.yaml +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/__init__.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/__init__.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/annoy.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/balltree.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/base.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/bruteforce.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/ckdtree.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/datasketch.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/definitions.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/diskann.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/dolphinnpy.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/dummy_algo.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/elasticsearch.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/elastiknn.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/faiss.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/faiss_gpu.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/faiss_hnsw.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/flann.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/hnswlib.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/kdtree.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/kgraph.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/lshf.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/milvus.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/mrpt.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/n2.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/nearpy.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/nmslib.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/onng_ngt.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/opensearchknn.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/panng_ngt.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/pinecone.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/puffinn.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/pynndescent.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/qg_ngt.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/redisearch.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/rpforest.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/scann.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/sptag.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/subprocess.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/vald.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/vecsim-hnsw.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/vespa.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/constants.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/data.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/datasets.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/distance.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/main.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/plotting/__init__.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/plotting/metrics.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/plotting/plot_variants.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/plotting/utils.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/results.py +0 -0
- redisbench_admin/run/ann/pkg/ann_benchmarks/runner.py +0 -0
- redisbench_admin/run/ann/pkg/create_dataset.py +0 -0
- redisbench_admin/run/ann/pkg/create_hybrid_dataset.py +0 -0
- redisbench_admin/run/ann/pkg/create_text_to_image_ds.py +0 -0
- redisbench_admin/run/ann/pkg/create_website.py +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.annoy +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.datasketch +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.diskann +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.diskann_pq +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.dolphinn +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.elasticsearch +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.elastiknn +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.faiss +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.flann +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.hnswlib +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.kgraph +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.mih +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.milvus +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.mrpt +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.n2 +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.nearpy +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.ngt +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.nmslib +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.opensearchknn +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.puffinn +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.pynndescent +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.redisearch +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.rpforest +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.scann +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.scipy +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.sklearn +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.sptag +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.vald +0 -0
- redisbench_admin/run/ann/pkg/install/Dockerfile.vespa +0 -0
- redisbench_admin/run/ann/pkg/install.py +0 -0
- redisbench_admin/run/ann/pkg/logging.conf +0 -0
- redisbench_admin/run/ann/pkg/multirun.py +0 -0
- redisbench_admin/run/ann/pkg/plot.py +0 -0
- redisbench_admin/run/ann/pkg/protocol/bf-runner.py +0 -0
- redisbench_admin/run/ann/pkg/protocol/ext-add-query-metric.md +0 -0
- redisbench_admin/run/ann/pkg/protocol/ext-batch-queries.md +0 -0
- redisbench_admin/run/ann/pkg/protocol/ext-prepared-queries.md +0 -0
- redisbench_admin/run/ann/pkg/protocol/ext-query-parameters.md +0 -0
- redisbench_admin/run/ann/pkg/protocol/specification.md +0 -0
- redisbench_admin/run/ann/pkg/requirements.txt +0 -0
- redisbench_admin/run/ann/pkg/requirements_py38.txt +0 -0
- redisbench_admin/run/ann/pkg/results/lastfm-64-dot.png +0 -0
- redisbench_admin/run/ann/pkg/run.py +0 -0
- redisbench_admin/run/ann/pkg/run_algorithm.py +0 -0
- redisbench_admin/run/ann/pkg/templates/chartjs.template +0 -0
- redisbench_admin/run/ann/pkg/templates/detail_page.html +0 -0
- redisbench_admin/run/ann/pkg/templates/general.html +0 -0
- redisbench_admin/run/ann/pkg/templates/latex.template +0 -0
- redisbench_admin/run/ann/pkg/templates/summary.html +0 -0
- redisbench_admin/run/ann/pkg/test/__init__.py +0 -0
- redisbench_admin/run/ann/pkg/test/test-jaccard.py +0 -0
- redisbench_admin/run/ann/pkg/test/test-metrics.py +0 -0
- redisbench_admin/run/args.py +2 -1
- redisbench_admin/run/modules.py +0 -87
- redisbench_admin/run/run.py +9 -0
- redisbench_admin/run_async/benchmark.py +0 -1
- redisbench_admin/run_local/run_local.py +11 -3
- redisbench_admin/run_remote/args.py +1 -1
- redisbench_admin/run_remote/remote_db.py +0 -114
- redisbench_admin/run_remote/run_remote.py +1 -50
- redisbench_admin/run_remote/standalone.py +11 -139
- redisbench_admin/utils/benchmark_config.py +2 -74
- redisbench_admin/utils/remote.py +2 -40
- {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/METADATA +1 -1
- {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/RECORD +21 -21
- {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/LICENSE +0 -0
- {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/WHEEL +0 -0
- {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/entry_points.txt +0 -0
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
redisbench_admin/run/args.py
CHANGED
|
@@ -23,6 +23,7 @@ DEFAULT_TRIGGERING_ENV = socket.gethostname()
|
|
|
23
23
|
TRIGGERING_ENV = os.getenv("TRIGGERING_ENV", DEFAULT_TRIGGERING_ENV)
|
|
24
24
|
ENV = os.getenv("ENV", "oss-standalone,oss-cluster")
|
|
25
25
|
SETUP = os.getenv("SETUP", "")
|
|
26
|
+
BENCHMARK = os.getenv("BENCHMARK", "")
|
|
26
27
|
BENCHMARK_GLOB = os.getenv("BENCHMARK_GLOB", "*.yml")
|
|
27
28
|
BENCHMARK_REGEX = os.getenv("BENCHMARK_REGEX", ".*")
|
|
28
29
|
BENCHMARK_RUNNER_GROUP_TOTAL = int(os.getenv("BENCHMARK_RUNNER_GROUP_TOTAL", "1"))
|
|
@@ -94,7 +95,7 @@ def common_run_args(parser):
|
|
|
94
95
|
parser.add_argument(
|
|
95
96
|
"--test",
|
|
96
97
|
type=str,
|
|
97
|
-
default=
|
|
98
|
+
default=BENCHMARK,
|
|
98
99
|
help="specify a test to run. By default will run all of them.",
|
|
99
100
|
)
|
|
100
101
|
parser.add_argument(
|
redisbench_admin/run/modules.py
CHANGED
|
@@ -48,90 +48,3 @@ def exists_check(error_message, local_module_file, status):
|
|
|
48
48
|
"Confirmed that module artifact: '{}' exists!".format(local_module_file)
|
|
49
49
|
)
|
|
50
50
|
return error_message, status
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def redis_files_check(redis_server_binary_path, redis_conf_path):
|
|
54
|
-
"""
|
|
55
|
-
Check if custom Redis server binary and config file paths exist.
|
|
56
|
-
|
|
57
|
-
Args:
|
|
58
|
-
redis_server_binary_path: Path to custom redis-server binary (can be None)
|
|
59
|
-
redis_conf_path: Path to custom redis.conf file (can be None)
|
|
60
|
-
|
|
61
|
-
Returns:
|
|
62
|
-
tuple: (status, error_message) where status is True if all files exist
|
|
63
|
-
"""
|
|
64
|
-
status = True
|
|
65
|
-
error_message = ""
|
|
66
|
-
|
|
67
|
-
if redis_server_binary_path is not None:
|
|
68
|
-
# Convert relative paths to absolute paths
|
|
69
|
-
redis_server_binary_path = os.path.abspath(
|
|
70
|
-
os.path.expanduser(redis_server_binary_path)
|
|
71
|
-
)
|
|
72
|
-
logging.info(
|
|
73
|
-
"Checking if custom Redis server binary {} exists...".format(
|
|
74
|
-
redis_server_binary_path
|
|
75
|
-
)
|
|
76
|
-
)
|
|
77
|
-
if not os.path.exists(redis_server_binary_path):
|
|
78
|
-
error_message = "Specified Redis server binary does not exist: {}".format(
|
|
79
|
-
redis_server_binary_path
|
|
80
|
-
)
|
|
81
|
-
logging.error(error_message)
|
|
82
|
-
status = False
|
|
83
|
-
elif not os.path.isfile(redis_server_binary_path):
|
|
84
|
-
error_message = (
|
|
85
|
-
"Specified Redis server binary path is not a file: {}".format(
|
|
86
|
-
redis_server_binary_path
|
|
87
|
-
)
|
|
88
|
-
)
|
|
89
|
-
logging.error(error_message)
|
|
90
|
-
status = False
|
|
91
|
-
elif not os.access(redis_server_binary_path, os.X_OK):
|
|
92
|
-
error_message = (
|
|
93
|
-
"Specified Redis server binary is not executable: {}".format(
|
|
94
|
-
redis_server_binary_path
|
|
95
|
-
)
|
|
96
|
-
)
|
|
97
|
-
logging.error(error_message)
|
|
98
|
-
status = False
|
|
99
|
-
else:
|
|
100
|
-
logging.info(
|
|
101
|
-
"✅ Confirmed that Redis server binary: '{}' exists and is executable!".format(
|
|
102
|
-
redis_server_binary_path
|
|
103
|
-
)
|
|
104
|
-
)
|
|
105
|
-
|
|
106
|
-
if redis_conf_path is not None:
|
|
107
|
-
# Convert relative paths to absolute paths
|
|
108
|
-
redis_conf_path = os.path.abspath(os.path.expanduser(redis_conf_path))
|
|
109
|
-
logging.info(
|
|
110
|
-
"Checking if custom Redis config file {} exists...".format(redis_conf_path)
|
|
111
|
-
)
|
|
112
|
-
if not os.path.exists(redis_conf_path):
|
|
113
|
-
error_message = "Specified Redis config file does not exist: {}".format(
|
|
114
|
-
redis_conf_path
|
|
115
|
-
)
|
|
116
|
-
logging.error(error_message)
|
|
117
|
-
status = False
|
|
118
|
-
elif not os.path.isfile(redis_conf_path):
|
|
119
|
-
error_message = "Specified Redis config file path is not a file: {}".format(
|
|
120
|
-
redis_conf_path
|
|
121
|
-
)
|
|
122
|
-
logging.error(error_message)
|
|
123
|
-
status = False
|
|
124
|
-
elif not os.access(redis_conf_path, os.R_OK):
|
|
125
|
-
error_message = "Specified Redis config file is not readable: {}".format(
|
|
126
|
-
redis_conf_path
|
|
127
|
-
)
|
|
128
|
-
logging.error(error_message)
|
|
129
|
-
status = False
|
|
130
|
-
else:
|
|
131
|
-
logging.info(
|
|
132
|
-
"✅ Confirmed that Redis config file: '{}' exists and is readable!".format(
|
|
133
|
-
redis_conf_path
|
|
134
|
-
)
|
|
135
|
-
)
|
|
136
|
-
|
|
137
|
-
return status, error_message
|
redisbench_admin/run/run.py
CHANGED
|
@@ -117,6 +117,15 @@ def define_benchmark_plan(benchmark_definitions, default_specs):
|
|
|
117
117
|
test_benchmark_config["dbconfig"] = {}
|
|
118
118
|
setup_dbconfig = setup_settings["dbconfig"]
|
|
119
119
|
benchmark_dbconfig = test_benchmark_config["dbconfig"]
|
|
120
|
+
|
|
121
|
+
# Handle legacy list format - convert to dict by merging all entries
|
|
122
|
+
if isinstance(benchmark_dbconfig, list):
|
|
123
|
+
converted_dbconfig = {}
|
|
124
|
+
for entry in benchmark_dbconfig:
|
|
125
|
+
if isinstance(entry, dict):
|
|
126
|
+
converted_dbconfig.update(entry)
|
|
127
|
+
benchmark_dbconfig = converted_dbconfig
|
|
128
|
+
|
|
120
129
|
logging.info(
|
|
121
130
|
f"Merging setup dbconfig: {setup_dbconfig}, with benchmark dbconfig {test_benchmark_config}"
|
|
122
131
|
)
|
|
@@ -149,7 +149,6 @@ def run_local_command_logic(args, project_name, project_version):
|
|
|
149
149
|
exporter_timemetric_path,
|
|
150
150
|
default_specs,
|
|
151
151
|
clusterconfig,
|
|
152
|
-
_,
|
|
153
152
|
) = prepare_benchmark_definitions(args)
|
|
154
153
|
|
|
155
154
|
return_code = 0
|
|
@@ -308,9 +307,10 @@ def run_local_command_logic(args, project_name, project_version):
|
|
|
308
307
|
None,
|
|
309
308
|
args.password,
|
|
310
309
|
)
|
|
310
|
+
# get the pids
|
|
311
311
|
redis_pids = [
|
|
312
|
-
|
|
313
|
-
for
|
|
312
|
+
redis_conn.info("server")["process_id"]
|
|
313
|
+
for redis_conn in redis_conns
|
|
314
314
|
]
|
|
315
315
|
# start the profile
|
|
316
316
|
(
|
|
@@ -557,6 +557,14 @@ def run_local_command_logic(args, project_name, project_version):
|
|
|
557
557
|
"Keeping environment and topology active upon request."
|
|
558
558
|
)
|
|
559
559
|
|
|
560
|
+
except KeyboardInterrupt:
|
|
561
|
+
logging.critical(
|
|
562
|
+
"Detected Keyboard interrupt...Tearing down and exiting!"
|
|
563
|
+
)
|
|
564
|
+
teardown_local_setup(
|
|
565
|
+
redis_conns, redis_processes, setup_name
|
|
566
|
+
)
|
|
567
|
+
exit(1)
|
|
560
568
|
except:
|
|
561
569
|
return_code |= 1
|
|
562
570
|
logging.critical(
|
|
@@ -148,7 +148,7 @@ def create_run_remote_arguments(parser):
|
|
|
148
148
|
"--spin-test",
|
|
149
149
|
default=False,
|
|
150
150
|
action="store_true",
|
|
151
|
-
help="Setup standalone Redis server, run INFO SERVER, print output as markdown and exit
|
|
151
|
+
help="Setup standalone Redis server, run INFO SERVER, print output as markdown and exit",
|
|
152
152
|
)
|
|
153
153
|
|
|
154
154
|
return parser
|
|
@@ -105,8 +105,6 @@ def remote_db_spin(
|
|
|
105
105
|
continue_on_module_check_error=False,
|
|
106
106
|
keyspace_check_timeout=60,
|
|
107
107
|
architecture="x86_64",
|
|
108
|
-
custom_redis_server_path=None,
|
|
109
|
-
custom_redis_conf_path=None,
|
|
110
108
|
):
|
|
111
109
|
(
|
|
112
110
|
_,
|
|
@@ -116,116 +114,6 @@ def remote_db_spin(
|
|
|
116
114
|
modules_configuration_parameters_map,
|
|
117
115
|
) = extract_redis_dbconfig_parameters(benchmark_config, "dbconfig")
|
|
118
116
|
|
|
119
|
-
# Execute install_steps from dbconfig and clientconfig if present
|
|
120
|
-
from redisbench_admin.run_remote.standalone import execute_install_steps
|
|
121
|
-
|
|
122
|
-
if benchmark_config is not None:
|
|
123
|
-
execute_install_steps(
|
|
124
|
-
benchmark_config, server_public_ip, username, private_key, db_ssh_port
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
# Copy custom Redis files to remote host if provided
|
|
128
|
-
remote_redis_server_path = None
|
|
129
|
-
remote_redis_conf_path = None
|
|
130
|
-
|
|
131
|
-
if custom_redis_server_path or custom_redis_conf_path:
|
|
132
|
-
from redisbench_admin.utils.remote import copy_file_to_remote_setup
|
|
133
|
-
import os
|
|
134
|
-
|
|
135
|
-
if custom_redis_conf_path:
|
|
136
|
-
# Convert relative paths to absolute paths
|
|
137
|
-
custom_redis_conf_path = os.path.abspath(
|
|
138
|
-
os.path.expanduser(custom_redis_conf_path)
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
if not os.path.exists(custom_redis_conf_path):
|
|
142
|
-
logging.error(
|
|
143
|
-
f"❌ Custom redis.conf file not found: {custom_redis_conf_path}"
|
|
144
|
-
)
|
|
145
|
-
return_code = 1
|
|
146
|
-
return (None, None, None, [], [], return_code, None, None)
|
|
147
|
-
|
|
148
|
-
remote_redis_conf_path = "/tmp/redis.conf"
|
|
149
|
-
logging.info(
|
|
150
|
-
f"📁 Copying custom redis.conf from {custom_redis_conf_path} to {remote_redis_conf_path}"
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
copy_result = copy_file_to_remote_setup(
|
|
154
|
-
server_public_ip,
|
|
155
|
-
username,
|
|
156
|
-
private_key,
|
|
157
|
-
custom_redis_conf_path,
|
|
158
|
-
remote_redis_conf_path,
|
|
159
|
-
None,
|
|
160
|
-
db_ssh_port,
|
|
161
|
-
False, # don't continue on error
|
|
162
|
-
)
|
|
163
|
-
|
|
164
|
-
if not copy_result:
|
|
165
|
-
logging.error("❌ Failed to copy redis.conf to remote host")
|
|
166
|
-
return_code = 1
|
|
167
|
-
return (None, None, None, [], [], return_code, None, None)
|
|
168
|
-
else:
|
|
169
|
-
logging.info(
|
|
170
|
-
f"✅ Successfully copied redis.conf to {remote_redis_conf_path}"
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
if custom_redis_server_path:
|
|
174
|
-
# Convert relative paths to absolute paths
|
|
175
|
-
custom_redis_server_path = os.path.abspath(
|
|
176
|
-
os.path.expanduser(custom_redis_server_path)
|
|
177
|
-
)
|
|
178
|
-
|
|
179
|
-
if not os.path.exists(custom_redis_server_path):
|
|
180
|
-
logging.error(
|
|
181
|
-
f"❌ Custom redis-server binary not found: {custom_redis_server_path}"
|
|
182
|
-
)
|
|
183
|
-
return_code = 1
|
|
184
|
-
return (None, None, None, [], [], return_code, None, None)
|
|
185
|
-
|
|
186
|
-
remote_redis_server_path = "/tmp/redis-server"
|
|
187
|
-
logging.info(
|
|
188
|
-
f"📁 Copying custom redis-server binary from {custom_redis_server_path} to {remote_redis_server_path}"
|
|
189
|
-
)
|
|
190
|
-
|
|
191
|
-
copy_result = copy_file_to_remote_setup(
|
|
192
|
-
server_public_ip,
|
|
193
|
-
username,
|
|
194
|
-
private_key,
|
|
195
|
-
custom_redis_server_path,
|
|
196
|
-
remote_redis_server_path,
|
|
197
|
-
None,
|
|
198
|
-
db_ssh_port,
|
|
199
|
-
False, # don't continue on error
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
if not copy_result:
|
|
203
|
-
logging.error("❌ Failed to copy redis-server binary to remote host")
|
|
204
|
-
return_code = 1
|
|
205
|
-
return (None, None, None, [], [], return_code, None, None)
|
|
206
|
-
|
|
207
|
-
# Make the binary executable
|
|
208
|
-
chmod_commands = [f"chmod +x {remote_redis_server_path}"]
|
|
209
|
-
chmod_results = execute_remote_commands(
|
|
210
|
-
server_public_ip, username, private_key, chmod_commands, db_ssh_port
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
recv_exit_status, stdout, stderr = chmod_results[0]
|
|
214
|
-
if recv_exit_status != 0:
|
|
215
|
-
logging.warning(
|
|
216
|
-
f"⚠️ Failed to make redis-server binary executable: {stderr}"
|
|
217
|
-
)
|
|
218
|
-
else:
|
|
219
|
-
logging.info(
|
|
220
|
-
f"✅ Successfully copied and made executable: {remote_redis_server_path}"
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
# Update the custom paths to use the remote paths
|
|
224
|
-
if remote_redis_server_path:
|
|
225
|
-
custom_redis_server_path = remote_redis_server_path
|
|
226
|
-
if remote_redis_conf_path:
|
|
227
|
-
custom_redis_conf_path = remote_redis_conf_path
|
|
228
|
-
|
|
229
117
|
full_logfiles = []
|
|
230
118
|
cluster_enabled = False
|
|
231
119
|
if setup_type == "oss-cluster":
|
|
@@ -319,8 +207,6 @@ def remote_db_spin(
|
|
|
319
207
|
db_ssh_port,
|
|
320
208
|
modules_configuration_parameters_map,
|
|
321
209
|
redis_7,
|
|
322
|
-
custom_redis_server_path,
|
|
323
|
-
custom_redis_conf_path,
|
|
324
210
|
)
|
|
325
211
|
full_logfiles.append(full_logfile)
|
|
326
212
|
local_redis_conn, ssh_tunnel = ssh_tunnel_redisconn(
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
# All rights reserved.
|
|
5
5
|
#
|
|
6
6
|
import logging
|
|
7
|
-
import os
|
|
8
7
|
import random
|
|
9
8
|
import string
|
|
10
9
|
import sys
|
|
@@ -35,7 +34,7 @@ from redisbench_admin.run.common import (
|
|
|
35
34
|
)
|
|
36
35
|
from redisbench_admin.run.git import git_vars_crosscheck
|
|
37
36
|
from redisbench_admin.run.grafana import generate_artifacts_table_grafana_redis
|
|
38
|
-
from redisbench_admin.run.modules import redis_modules_check
|
|
37
|
+
from redisbench_admin.run.modules import redis_modules_check
|
|
39
38
|
from redisbench_admin.run.redistimeseries import (
|
|
40
39
|
timeseries_test_sucess_flow,
|
|
41
40
|
timeseries_test_failure_flow,
|
|
@@ -229,25 +228,6 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
229
228
|
)
|
|
230
229
|
)
|
|
231
230
|
|
|
232
|
-
# Validate Redis server binary and config file paths early
|
|
233
|
-
redis_files_check_status, redis_error_message = redis_files_check(
|
|
234
|
-
args.redis_server_binary, args.redis_conf
|
|
235
|
-
)
|
|
236
|
-
if redis_files_check_status is False:
|
|
237
|
-
if webhook_notifications_active:
|
|
238
|
-
failure_reason = redis_error_message
|
|
239
|
-
generate_failure_notification(
|
|
240
|
-
webhook_client_slack,
|
|
241
|
-
ci_job_name,
|
|
242
|
-
ci_job_link,
|
|
243
|
-
failure_reason,
|
|
244
|
-
tf_github_org,
|
|
245
|
-
tf_github_repo,
|
|
246
|
-
tf_github_branch,
|
|
247
|
-
None,
|
|
248
|
-
)
|
|
249
|
-
exit(1)
|
|
250
|
-
|
|
251
231
|
common_properties_log(
|
|
252
232
|
tf_bin_path,
|
|
253
233
|
tf_github_actor,
|
|
@@ -290,31 +270,6 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
290
270
|
logging.error("❌ --spin-test requires server_public_ip in --inventory")
|
|
291
271
|
exit(1)
|
|
292
272
|
|
|
293
|
-
# Load benchmark config from defaults.yml
|
|
294
|
-
benchmark_config = None
|
|
295
|
-
|
|
296
|
-
# Try to load defaults.yml
|
|
297
|
-
defaults_file = (
|
|
298
|
-
args.defaults_filename
|
|
299
|
-
if hasattr(args, "defaults_filename")
|
|
300
|
-
else "defaults.yml"
|
|
301
|
-
)
|
|
302
|
-
if os.path.exists(defaults_file):
|
|
303
|
-
try:
|
|
304
|
-
import yaml
|
|
305
|
-
|
|
306
|
-
with open(defaults_file, "r") as config_file:
|
|
307
|
-
defaults_config = yaml.safe_load(config_file)
|
|
308
|
-
if defaults_config:
|
|
309
|
-
benchmark_config = defaults_config
|
|
310
|
-
logging.info(f"📋 Loaded configuration from {defaults_file}")
|
|
311
|
-
except Exception as e:
|
|
312
|
-
logging.warning(f"⚠️ Failed to load defaults config: {e}")
|
|
313
|
-
else:
|
|
314
|
-
logging.info(
|
|
315
|
-
f"📋 No {defaults_file} found - proceeding without install_steps"
|
|
316
|
-
)
|
|
317
|
-
|
|
318
273
|
# Run spin test
|
|
319
274
|
success = spin_test_standalone_redis(
|
|
320
275
|
server_public_ip=server_public_ip,
|
|
@@ -327,7 +282,6 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
327
282
|
modules_configuration_parameters_map=None,
|
|
328
283
|
custom_redis_conf_path=args.redis_conf,
|
|
329
284
|
custom_redis_server_path=args.redis_server_binary,
|
|
330
|
-
benchmark_config=benchmark_config,
|
|
331
285
|
)
|
|
332
286
|
|
|
333
287
|
exit(0 if success else 1)
|
|
@@ -339,7 +293,6 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
339
293
|
exporter_timemetric_path,
|
|
340
294
|
default_specs,
|
|
341
295
|
clusterconfig,
|
|
342
|
-
_,
|
|
343
296
|
) = prepare_benchmark_definitions(args)
|
|
344
297
|
|
|
345
298
|
return_code = 0
|
|
@@ -685,8 +638,6 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
685
638
|
continue_on_module_check_error,
|
|
686
639
|
60,
|
|
687
640
|
architecture,
|
|
688
|
-
args.redis_server_binary,
|
|
689
|
-
args.redis_conf,
|
|
690
641
|
)
|
|
691
642
|
if benchmark_type == "read-only":
|
|
692
643
|
ro_benchmark_set(
|
|
@@ -13,6 +13,7 @@ from redisbench_admin.utils.remote import (
|
|
|
13
13
|
)
|
|
14
14
|
from redisbench_admin.utils.ssh import SSHSession
|
|
15
15
|
from redisbench_admin.utils.utils import redis_server_config_module_part
|
|
16
|
+
import tempfile
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
def ensure_redis_server_available(server_public_ip, username, private_key, port=22):
|
|
@@ -276,22 +277,9 @@ def spin_up_standalone_remote_redis(
|
|
|
276
277
|
port=22,
|
|
277
278
|
modules_configuration_parameters_map={},
|
|
278
279
|
redis_7=True,
|
|
279
|
-
custom_redis_server_path=None,
|
|
280
|
-
custom_redis_conf_path=None,
|
|
281
280
|
):
|
|
282
|
-
# Ensure redis-server is available before trying to start it
|
|
283
|
-
|
|
284
|
-
ensure_redis_server_available(server_public_ip, username, private_key, port)
|
|
285
|
-
else:
|
|
286
|
-
logging.info(
|
|
287
|
-
"🔧 Using custom Redis binary - skipping system Redis installation"
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
# Log what paths we're using
|
|
291
|
-
logging.info("🔧 Redis command generation:")
|
|
292
|
-
logging.info(f" - Custom server path: {custom_redis_server_path}")
|
|
293
|
-
logging.info(f" - Custom config path: {custom_redis_conf_path}")
|
|
294
|
-
logging.info(f" - Module files: {remote_module_files}")
|
|
281
|
+
# Ensure redis-server is available before trying to start it
|
|
282
|
+
ensure_redis_server_available(server_public_ip, username, private_key, port)
|
|
295
283
|
|
|
296
284
|
full_logfile, initial_redis_cmd = generate_remote_standalone_redis_cmd(
|
|
297
285
|
logfile,
|
|
@@ -300,8 +288,6 @@ def spin_up_standalone_remote_redis(
|
|
|
300
288
|
temporary_dir,
|
|
301
289
|
modules_configuration_parameters_map,
|
|
302
290
|
redis_7,
|
|
303
|
-
custom_redis_server_path=custom_redis_server_path,
|
|
304
|
-
custom_redis_conf_path=custom_redis_conf_path,
|
|
305
291
|
)
|
|
306
292
|
|
|
307
293
|
# start redis-server
|
|
@@ -471,86 +457,6 @@ def generate_remote_standalone_redis_cmd(
|
|
|
471
457
|
return full_logfile, initial_redis_cmd
|
|
472
458
|
|
|
473
459
|
|
|
474
|
-
def execute_install_steps(
|
|
475
|
-
benchmark_config, server_public_ip, username, private_key, db_ssh_port
|
|
476
|
-
):
|
|
477
|
-
"""
|
|
478
|
-
Execute install_steps from dbconfig and clientconfig sections.
|
|
479
|
-
|
|
480
|
-
Args:
|
|
481
|
-
benchmark_config: The benchmark configuration dictionary
|
|
482
|
-
server_public_ip: IP address of the remote server
|
|
483
|
-
username: SSH username
|
|
484
|
-
private_key: Path to SSH private key
|
|
485
|
-
db_ssh_port: SSH port
|
|
486
|
-
"""
|
|
487
|
-
install_commands = []
|
|
488
|
-
|
|
489
|
-
# Extract install_steps from dbconfig
|
|
490
|
-
if "dbconfig" in benchmark_config:
|
|
491
|
-
dbconfig = benchmark_config["dbconfig"]
|
|
492
|
-
if isinstance(dbconfig, list):
|
|
493
|
-
for config_item in dbconfig:
|
|
494
|
-
if "install_steps" in config_item:
|
|
495
|
-
steps = config_item["install_steps"]
|
|
496
|
-
if isinstance(steps, list):
|
|
497
|
-
install_commands.extend(steps)
|
|
498
|
-
logging.info(f"📦 Found {len(steps)} install steps in dbconfig")
|
|
499
|
-
elif isinstance(dbconfig, dict):
|
|
500
|
-
if "install_steps" in dbconfig:
|
|
501
|
-
steps = dbconfig["install_steps"]
|
|
502
|
-
if isinstance(steps, list):
|
|
503
|
-
install_commands.extend(steps)
|
|
504
|
-
logging.info(f"📦 Found {len(steps)} install steps in dbconfig")
|
|
505
|
-
|
|
506
|
-
# Extract install_steps from clientconfig
|
|
507
|
-
if "clientconfig" in benchmark_config:
|
|
508
|
-
clientconfig = benchmark_config["clientconfig"]
|
|
509
|
-
if isinstance(clientconfig, list):
|
|
510
|
-
for config_item in clientconfig:
|
|
511
|
-
if "install_steps" in config_item:
|
|
512
|
-
steps = config_item["install_steps"]
|
|
513
|
-
if isinstance(steps, list):
|
|
514
|
-
install_commands.extend(steps)
|
|
515
|
-
logging.info(
|
|
516
|
-
f"📦 Found {len(steps)} install steps in clientconfig"
|
|
517
|
-
)
|
|
518
|
-
elif isinstance(clientconfig, dict):
|
|
519
|
-
if "install_steps" in clientconfig:
|
|
520
|
-
steps = clientconfig["install_steps"]
|
|
521
|
-
if isinstance(steps, list):
|
|
522
|
-
install_commands.extend(steps)
|
|
523
|
-
logging.info(f"📦 Found {len(steps)} install steps in clientconfig")
|
|
524
|
-
|
|
525
|
-
# Execute all install commands
|
|
526
|
-
if install_commands:
|
|
527
|
-
logging.info(f"🔧 Executing {len(install_commands)} installation commands...")
|
|
528
|
-
for i, command in enumerate(install_commands, 1):
|
|
529
|
-
logging.info(f"📋 Step {i}/{len(install_commands)}: {command}")
|
|
530
|
-
|
|
531
|
-
install_result = execute_remote_commands(
|
|
532
|
-
server_public_ip, username, private_key, install_commands, db_ssh_port
|
|
533
|
-
)
|
|
534
|
-
|
|
535
|
-
# Check results
|
|
536
|
-
for i, (recv_exit_status, stdout, stderr) in enumerate(install_result):
|
|
537
|
-
if recv_exit_status != 0:
|
|
538
|
-
logging.warning(
|
|
539
|
-
f"⚠️ Install step {i+1} returned exit code {recv_exit_status}"
|
|
540
|
-
)
|
|
541
|
-
logging.warning(f"Command: {install_commands[i]}")
|
|
542
|
-
if stderr:
|
|
543
|
-
logging.warning(f"STDERR: {''.join(stderr).strip()}")
|
|
544
|
-
if stdout:
|
|
545
|
-
logging.warning(f"STDOUT: {''.join(stdout).strip()}")
|
|
546
|
-
else:
|
|
547
|
-
logging.info(f"✅ Install step {i+1} completed successfully")
|
|
548
|
-
|
|
549
|
-
logging.info("🎯 All installation steps completed")
|
|
550
|
-
else:
|
|
551
|
-
logging.info("📦 No install_steps found in configuration")
|
|
552
|
-
|
|
553
|
-
|
|
554
460
|
def spin_test_standalone_redis(
|
|
555
461
|
server_public_ip,
|
|
556
462
|
username,
|
|
@@ -562,7 +468,6 @@ def spin_test_standalone_redis(
|
|
|
562
468
|
modules_configuration_parameters_map=None,
|
|
563
469
|
custom_redis_conf_path=None,
|
|
564
470
|
custom_redis_server_path=None,
|
|
565
|
-
benchmark_config=None,
|
|
566
471
|
):
|
|
567
472
|
"""
|
|
568
473
|
Setup standalone Redis server, run INFO SERVER, print output as markdown and exit.
|
|
@@ -589,12 +494,6 @@ def spin_test_standalone_redis(
|
|
|
589
494
|
server_public_ip, username, private_key, create_dir_commands, db_ssh_port
|
|
590
495
|
)
|
|
591
496
|
|
|
592
|
-
# Execute install_steps from dbconfig and clientconfig if present
|
|
593
|
-
if benchmark_config is not None:
|
|
594
|
-
execute_install_steps(
|
|
595
|
-
benchmark_config, server_public_ip, username, private_key, db_ssh_port
|
|
596
|
-
)
|
|
597
|
-
|
|
598
497
|
# Ensure Redis server is available (only if not using custom binary)
|
|
599
498
|
if custom_redis_server_path is None:
|
|
600
499
|
ensure_redis_server_available(
|
|
@@ -610,21 +509,14 @@ def spin_test_standalone_redis(
|
|
|
610
509
|
remote_redis_server_path = None
|
|
611
510
|
|
|
612
511
|
if custom_redis_conf_path:
|
|
613
|
-
# Convert relative paths to absolute paths
|
|
614
|
-
custom_redis_conf_path = os.path.abspath(
|
|
615
|
-
os.path.expanduser(custom_redis_conf_path)
|
|
616
|
-
)
|
|
617
|
-
|
|
618
512
|
if not os.path.exists(custom_redis_conf_path):
|
|
619
513
|
logging.error(
|
|
620
514
|
f"❌ Custom redis.conf file not found: {custom_redis_conf_path}"
|
|
621
515
|
)
|
|
622
516
|
return False
|
|
623
517
|
|
|
624
|
-
remote_redis_conf_path = "/
|
|
625
|
-
logging.info(
|
|
626
|
-
f"📁 Copying custom redis.conf from {custom_redis_conf_path} to {remote_redis_conf_path}"
|
|
627
|
-
)
|
|
518
|
+
remote_redis_conf_path = f"{temporary_dir}/redis.conf"
|
|
519
|
+
logging.info(f"📁 Copying custom redis.conf to remote host...")
|
|
628
520
|
|
|
629
521
|
copy_result = copy_file_to_remote_setup(
|
|
630
522
|
server_public_ip,
|
|
@@ -640,27 +532,16 @@ def spin_test_standalone_redis(
|
|
|
640
532
|
if not copy_result:
|
|
641
533
|
logging.error("❌ Failed to copy redis.conf to remote host")
|
|
642
534
|
return False
|
|
643
|
-
else:
|
|
644
|
-
logging.info(
|
|
645
|
-
f"✅ Successfully copied redis.conf to {remote_redis_conf_path}"
|
|
646
|
-
)
|
|
647
535
|
|
|
648
536
|
if custom_redis_server_path:
|
|
649
|
-
# Convert relative paths to absolute paths
|
|
650
|
-
custom_redis_server_path = os.path.abspath(
|
|
651
|
-
os.path.expanduser(custom_redis_server_path)
|
|
652
|
-
)
|
|
653
|
-
|
|
654
537
|
if not os.path.exists(custom_redis_server_path):
|
|
655
538
|
logging.error(
|
|
656
539
|
f"❌ Custom redis-server binary not found: {custom_redis_server_path}"
|
|
657
540
|
)
|
|
658
541
|
return False
|
|
659
542
|
|
|
660
|
-
remote_redis_server_path = "/
|
|
661
|
-
logging.info(
|
|
662
|
-
f"📁 Copying custom redis-server binary from {custom_redis_server_path} to {remote_redis_server_path}"
|
|
663
|
-
)
|
|
543
|
+
remote_redis_server_path = f"{temporary_dir}/redis-server"
|
|
544
|
+
logging.info(f"📁 Copying custom redis-server binary to remote host...")
|
|
664
545
|
|
|
665
546
|
copy_result = copy_file_to_remote_setup(
|
|
666
547
|
server_public_ip,
|
|
@@ -689,9 +570,7 @@ def spin_test_standalone_redis(
|
|
|
689
570
|
f"⚠️ Failed to make redis-server binary executable: {stderr}"
|
|
690
571
|
)
|
|
691
572
|
else:
|
|
692
|
-
logging.info(
|
|
693
|
-
f"✅ Successfully copied and made executable: {remote_redis_server_path}"
|
|
694
|
-
)
|
|
573
|
+
logging.info("✅ Redis-server binary made executable")
|
|
695
574
|
|
|
696
575
|
# Copy modules if provided
|
|
697
576
|
remote_module_files = None
|
|
@@ -718,14 +597,7 @@ def spin_test_standalone_redis(
|
|
|
718
597
|
|
|
719
598
|
# Generate Redis startup command
|
|
720
599
|
logfile = "redis-spin-test.log"
|
|
721
|
-
|
|
722
|
-
# Log what paths we're using
|
|
723
|
-
logging.info("🔧 Redis command generation:")
|
|
724
|
-
logging.info(f" - Custom server path: {remote_redis_server_path}")
|
|
725
|
-
logging.info(f" - Custom config path: {remote_redis_conf_path}")
|
|
726
|
-
logging.info(f" - Module files: {remote_module_files}")
|
|
727
|
-
|
|
728
|
-
_, redis_cmd = generate_remote_standalone_redis_cmd(
|
|
600
|
+
full_logfile, redis_cmd = generate_remote_standalone_redis_cmd(
|
|
729
601
|
logfile,
|
|
730
602
|
redis_configuration_parameters,
|
|
731
603
|
remote_module_files,
|
|
@@ -817,8 +689,8 @@ def spin_test_standalone_redis(
|
|
|
817
689
|
"Disk Space",
|
|
818
690
|
]
|
|
819
691
|
|
|
820
|
-
for label, (recv_exit_status, stdout, stderr) in
|
|
821
|
-
system_labels, system_results
|
|
692
|
+
for i, (label, (recv_exit_status, stdout, stderr)) in enumerate(
|
|
693
|
+
zip(system_labels, system_results)
|
|
822
694
|
):
|
|
823
695
|
if recv_exit_status == 0 and stdout:
|
|
824
696
|
output = "".join(stdout).strip()
|