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.
Files changed (139) hide show
  1. redisbench_admin/cli.py +13 -6
  2. redisbench_admin/compare/args.py +0 -20
  3. redisbench_admin/compare/compare.py +23 -165
  4. redisbench_admin/export/export.py +0 -1
  5. redisbench_admin/profilers/daemon.py +2 -2
  6. redisbench_admin/run/ann/pkg/.dockerignore +0 -0
  7. redisbench_admin/run/ann/pkg/.git +0 -0
  8. redisbench_admin/run/ann/pkg/.github/workflows/benchmarks.yml +0 -0
  9. redisbench_admin/run/ann/pkg/.gitignore +0 -0
  10. redisbench_admin/run/ann/pkg/LICENSE +0 -0
  11. redisbench_admin/run/ann/pkg/README.md +0 -0
  12. redisbench_admin/run/ann/pkg/algos.yaml +0 -0
  13. redisbench_admin/run/ann/pkg/algosP.yaml +0 -0
  14. redisbench_admin/run/ann/pkg/ann_benchmarks/__init__.py +0 -0
  15. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/__init__.py +0 -0
  16. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/annoy.py +0 -0
  17. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/balltree.py +0 -0
  18. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/base.py +0 -0
  19. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/bruteforce.py +0 -0
  20. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/ckdtree.py +0 -0
  21. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/datasketch.py +0 -0
  22. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/definitions.py +0 -0
  23. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/diskann.py +0 -0
  24. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/dolphinnpy.py +0 -0
  25. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/dummy_algo.py +0 -0
  26. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/elasticsearch.py +0 -0
  27. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/elastiknn.py +0 -0
  28. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/faiss.py +0 -0
  29. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/faiss_gpu.py +0 -0
  30. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/faiss_hnsw.py +0 -0
  31. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/flann.py +0 -0
  32. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/hnswlib.py +0 -0
  33. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/kdtree.py +0 -0
  34. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/kgraph.py +0 -0
  35. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/lshf.py +0 -0
  36. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/milvus.py +0 -0
  37. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/mrpt.py +0 -0
  38. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/n2.py +0 -0
  39. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/nearpy.py +0 -0
  40. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/nmslib.py +0 -0
  41. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/onng_ngt.py +0 -0
  42. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/opensearchknn.py +0 -0
  43. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/panng_ngt.py +0 -0
  44. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/pinecone.py +0 -0
  45. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/puffinn.py +0 -0
  46. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/pynndescent.py +0 -0
  47. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/qg_ngt.py +0 -0
  48. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/redisearch.py +0 -0
  49. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/rpforest.py +0 -0
  50. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/scann.py +0 -0
  51. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/sptag.py +0 -0
  52. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/subprocess.py +0 -0
  53. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/vald.py +0 -0
  54. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/vecsim-hnsw.py +0 -0
  55. redisbench_admin/run/ann/pkg/ann_benchmarks/algorithms/vespa.py +0 -0
  56. redisbench_admin/run/ann/pkg/ann_benchmarks/constants.py +0 -0
  57. redisbench_admin/run/ann/pkg/ann_benchmarks/data.py +0 -0
  58. redisbench_admin/run/ann/pkg/ann_benchmarks/datasets.py +0 -0
  59. redisbench_admin/run/ann/pkg/ann_benchmarks/distance.py +0 -0
  60. redisbench_admin/run/ann/pkg/ann_benchmarks/main.py +0 -0
  61. redisbench_admin/run/ann/pkg/ann_benchmarks/plotting/__init__.py +0 -0
  62. redisbench_admin/run/ann/pkg/ann_benchmarks/plotting/metrics.py +0 -0
  63. redisbench_admin/run/ann/pkg/ann_benchmarks/plotting/plot_variants.py +0 -0
  64. redisbench_admin/run/ann/pkg/ann_benchmarks/plotting/utils.py +0 -0
  65. redisbench_admin/run/ann/pkg/ann_benchmarks/results.py +0 -0
  66. redisbench_admin/run/ann/pkg/ann_benchmarks/runner.py +0 -0
  67. redisbench_admin/run/ann/pkg/create_dataset.py +0 -0
  68. redisbench_admin/run/ann/pkg/create_hybrid_dataset.py +0 -0
  69. redisbench_admin/run/ann/pkg/create_text_to_image_ds.py +0 -0
  70. redisbench_admin/run/ann/pkg/create_website.py +0 -0
  71. redisbench_admin/run/ann/pkg/install/Dockerfile +0 -0
  72. redisbench_admin/run/ann/pkg/install/Dockerfile.annoy +0 -0
  73. redisbench_admin/run/ann/pkg/install/Dockerfile.datasketch +0 -0
  74. redisbench_admin/run/ann/pkg/install/Dockerfile.diskann +0 -0
  75. redisbench_admin/run/ann/pkg/install/Dockerfile.diskann_pq +0 -0
  76. redisbench_admin/run/ann/pkg/install/Dockerfile.dolphinn +0 -0
  77. redisbench_admin/run/ann/pkg/install/Dockerfile.elasticsearch +0 -0
  78. redisbench_admin/run/ann/pkg/install/Dockerfile.elastiknn +0 -0
  79. redisbench_admin/run/ann/pkg/install/Dockerfile.faiss +0 -0
  80. redisbench_admin/run/ann/pkg/install/Dockerfile.flann +0 -0
  81. redisbench_admin/run/ann/pkg/install/Dockerfile.hnswlib +0 -0
  82. redisbench_admin/run/ann/pkg/install/Dockerfile.kgraph +0 -0
  83. redisbench_admin/run/ann/pkg/install/Dockerfile.mih +0 -0
  84. redisbench_admin/run/ann/pkg/install/Dockerfile.milvus +0 -0
  85. redisbench_admin/run/ann/pkg/install/Dockerfile.mrpt +0 -0
  86. redisbench_admin/run/ann/pkg/install/Dockerfile.n2 +0 -0
  87. redisbench_admin/run/ann/pkg/install/Dockerfile.nearpy +0 -0
  88. redisbench_admin/run/ann/pkg/install/Dockerfile.ngt +0 -0
  89. redisbench_admin/run/ann/pkg/install/Dockerfile.nmslib +0 -0
  90. redisbench_admin/run/ann/pkg/install/Dockerfile.opensearchknn +0 -0
  91. redisbench_admin/run/ann/pkg/install/Dockerfile.puffinn +0 -0
  92. redisbench_admin/run/ann/pkg/install/Dockerfile.pynndescent +0 -0
  93. redisbench_admin/run/ann/pkg/install/Dockerfile.redisearch +0 -0
  94. redisbench_admin/run/ann/pkg/install/Dockerfile.rpforest +0 -0
  95. redisbench_admin/run/ann/pkg/install/Dockerfile.scann +0 -0
  96. redisbench_admin/run/ann/pkg/install/Dockerfile.scipy +0 -0
  97. redisbench_admin/run/ann/pkg/install/Dockerfile.sklearn +0 -0
  98. redisbench_admin/run/ann/pkg/install/Dockerfile.sptag +0 -0
  99. redisbench_admin/run/ann/pkg/install/Dockerfile.vald +0 -0
  100. redisbench_admin/run/ann/pkg/install/Dockerfile.vespa +0 -0
  101. redisbench_admin/run/ann/pkg/install.py +0 -0
  102. redisbench_admin/run/ann/pkg/logging.conf +0 -0
  103. redisbench_admin/run/ann/pkg/multirun.py +0 -0
  104. redisbench_admin/run/ann/pkg/plot.py +0 -0
  105. redisbench_admin/run/ann/pkg/protocol/bf-runner.py +0 -0
  106. redisbench_admin/run/ann/pkg/protocol/ext-add-query-metric.md +0 -0
  107. redisbench_admin/run/ann/pkg/protocol/ext-batch-queries.md +0 -0
  108. redisbench_admin/run/ann/pkg/protocol/ext-prepared-queries.md +0 -0
  109. redisbench_admin/run/ann/pkg/protocol/ext-query-parameters.md +0 -0
  110. redisbench_admin/run/ann/pkg/protocol/specification.md +0 -0
  111. redisbench_admin/run/ann/pkg/requirements.txt +0 -0
  112. redisbench_admin/run/ann/pkg/requirements_py38.txt +0 -0
  113. redisbench_admin/run/ann/pkg/results/lastfm-64-dot.png +0 -0
  114. redisbench_admin/run/ann/pkg/run.py +0 -0
  115. redisbench_admin/run/ann/pkg/run_algorithm.py +0 -0
  116. redisbench_admin/run/ann/pkg/templates/chartjs.template +0 -0
  117. redisbench_admin/run/ann/pkg/templates/detail_page.html +0 -0
  118. redisbench_admin/run/ann/pkg/templates/general.html +0 -0
  119. redisbench_admin/run/ann/pkg/templates/latex.template +0 -0
  120. redisbench_admin/run/ann/pkg/templates/summary.html +0 -0
  121. redisbench_admin/run/ann/pkg/test/__init__.py +0 -0
  122. redisbench_admin/run/ann/pkg/test/test-jaccard.py +0 -0
  123. redisbench_admin/run/ann/pkg/test/test-metrics.py +0 -0
  124. redisbench_admin/run/args.py +2 -1
  125. redisbench_admin/run/modules.py +0 -87
  126. redisbench_admin/run/run.py +9 -0
  127. redisbench_admin/run_async/benchmark.py +0 -1
  128. redisbench_admin/run_local/run_local.py +11 -3
  129. redisbench_admin/run_remote/args.py +1 -1
  130. redisbench_admin/run_remote/remote_db.py +0 -114
  131. redisbench_admin/run_remote/run_remote.py +1 -50
  132. redisbench_admin/run_remote/standalone.py +11 -139
  133. redisbench_admin/utils/benchmark_config.py +2 -74
  134. redisbench_admin/utils/remote.py +2 -40
  135. {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/METADATA +1 -1
  136. {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/RECORD +21 -21
  137. {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/LICENSE +0 -0
  138. {redisbench_admin-0.11.50.dist-info → redisbench_admin-0.11.52.dist-info}/WHEEL +0 -0
  139. {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
@@ -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(
@@ -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
@@ -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
  )
@@ -41,7 +41,6 @@ class BenchmarkClass:
41
41
  self.exporter_timemetric_path,
42
42
  self.default_specs,
43
43
  self.clusterconfig,
44
- _,
45
44
  ) = prepare_benchmark_definitions(args)
46
45
 
47
46
  def populate_remote_envs_timeout(self):
@@ -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
- redis_process.pid
313
- for redis_process in redis_processes
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 (reads install_steps from defaults.yml)",
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, redis_files_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 (only if not using custom binary)
283
- if custom_redis_server_path is None:
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 = "/tmp/redis.conf"
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 = "/tmp/redis-server"
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 zip(
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()