redisbench-admin 0.11.68__tar.gz → 0.11.70__tar.gz

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 (116) hide show
  1. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/PKG-INFO +1 -1
  2. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/pyproject.toml +1 -1
  3. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/cluster.py +48 -4
  4. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/remote_db.py +3 -0
  5. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/run_remote.py +2 -0
  6. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/standalone.py +44 -2
  7. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/utils.py +16 -0
  8. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/LICENSE +0 -0
  9. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/README.md +0 -0
  10. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/__init__.py +0 -0
  11. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/cli.py +0 -0
  12. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/commands/__init__.py +0 -0
  13. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/commands/commands.json.py +0 -0
  14. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/compare/__init__.py +0 -0
  15. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/compare/args.py +0 -0
  16. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/compare/compare.py +0 -0
  17. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/deploy/__init__.py +0 -0
  18. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/deploy/args.py +0 -0
  19. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/deploy/deploy.py +0 -0
  20. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/environments/__init__.py +0 -0
  21. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/environments/oss_cluster.py +0 -0
  22. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/environments/oss_standalone.py +0 -0
  23. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/__init__.py +0 -0
  24. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/args.py +0 -0
  25. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/common/__init__.py +0 -0
  26. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/common/common.py +0 -0
  27. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/export.py +0 -0
  28. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/google_benchmark/__init__.py +0 -0
  29. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/google_benchmark/google_benchmark_json_format.py +0 -0
  30. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/memtier_benchmark/__init__.py +0 -0
  31. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/memtier_benchmark/memtier_benchmark_json_format.py +0 -0
  32. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/pyperf/__init__.py +0 -0
  33. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/pyperf/pyperf_json_format.py +0 -0
  34. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/redis_benchmark/__init__.py +0 -0
  35. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/redis_benchmark/metrics_definition.py +0 -0
  36. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/export/redis_benchmark/redis_benchmark_csv_format.py +0 -0
  37. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/extract/__init__.py +0 -0
  38. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/extract/args.py +0 -0
  39. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/extract/extract.py +0 -0
  40. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/grafana_api/__init__.py +0 -0
  41. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/grafana_api/app.py +0 -0
  42. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/grafana_api/args.py +0 -0
  43. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/grafana_api/grafana_api.py +0 -0
  44. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/__init__.py +0 -0
  45. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/daemon.py +0 -0
  46. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/flamegraph.pl +0 -0
  47. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/perf.py +0 -0
  48. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/perf_daemon_caller.py +0 -0
  49. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/pprof.py +0 -0
  50. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/profilers.py +0 -0
  51. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/profilers_local.py +0 -0
  52. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/profilers_schema.py +0 -0
  53. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/stackcollapse-perf.pl +0 -0
  54. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/profilers/vtune.py +0 -0
  55. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/__init__.py +0 -0
  56. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/aibench_run_inference_redisai_vision/__init__.py +0 -0
  57. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/aibench_run_inference_redisai_vision/aibench_run_inference_redisai_vision.py +0 -0
  58. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/ann/__init__.py +0 -0
  59. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/ann/ann.py +0 -0
  60. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/args.py +0 -0
  61. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/asm.py +0 -0
  62. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/common.py +0 -0
  63. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/ftsb/__init__.py +0 -0
  64. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/ftsb/ftsb.py +0 -0
  65. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/git.py +0 -0
  66. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/grafana.py +0 -0
  67. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/memtier_benchmark/__init__.py +0 -0
  68. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/memtier_benchmark/memtier_benchmark.py +0 -0
  69. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/metrics.py +0 -0
  70. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/modules.py +0 -0
  71. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/redis_benchmark/__init__.py +0 -0
  72. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/redis_benchmark/redis_benchmark.py +0 -0
  73. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/redisgraph_benchmark_go/__init__.py +0 -0
  74. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/redisgraph_benchmark_go/redisgraph_benchmark_go.py +0 -0
  75. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/redistimeseries.py +0 -0
  76. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/run.py +0 -0
  77. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/s3.py +0 -0
  78. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/ssh.py +0 -0
  79. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/tsbs_run_queries_redistimeseries/__init__.py +0 -0
  80. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/tsbs_run_queries_redistimeseries/tsbs_run_queries_redistimeseries.py +0 -0
  81. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/ycsb/__init__.py +0 -0
  82. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run/ycsb/ycsb.py +0 -0
  83. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_async/__init__.py +0 -0
  84. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_async/async_env.py +0 -0
  85. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_async/async_terraform.py +0 -0
  86. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_async/benchmark.py +0 -0
  87. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_async/log.py +0 -0
  88. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_async/render_files.py +0 -0
  89. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_async/run_async.py +0 -0
  90. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_local/__init__.py +0 -0
  91. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_local/args.py +0 -0
  92. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_local/local_client.py +0 -0
  93. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_local/local_db.py +0 -0
  94. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_local/local_helpers.py +0 -0
  95. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_local/run_local.py +0 -0
  96. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/__init__.py +0 -0
  97. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/args.py +0 -0
  98. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/consts.py +0 -0
  99. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/log.py +0 -0
  100. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/notifications.py +0 -0
  101. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/remote_client.py +0 -0
  102. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/remote_env.py +0 -0
  103. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/remote_failures.py +0 -0
  104. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/remote_helpers.py +0 -0
  105. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/run_remote/terraform.py +0 -0
  106. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/__init__.py +0 -0
  107. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/benchmark_config.py +0 -0
  108. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/local.py +0 -0
  109. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/redisearch.py +0 -0
  110. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/redisgraph_benchmark_go.py +0 -0
  111. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/remote.py +0 -0
  112. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/results.py +0 -0
  113. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/utils/ssh.py +0 -0
  114. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/watchdog/__init__.py +0 -0
  115. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/watchdog/args.py +0 -0
  116. {redisbench_admin-0.11.68 → redisbench_admin-0.11.70}/redisbench_admin/watchdog/watchdog.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: redisbench-admin
3
- Version: 0.11.68
3
+ Version: 0.11.70
4
4
  Summary: Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... ).
5
5
  License-File: LICENSE
6
6
  Author: filipecosta90
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "redisbench-admin"
3
- version = "0.11.68"
3
+ version = "0.11.70"
4
4
  description = "Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... )."
5
5
  authors = ["filipecosta90 <filipecosta.90@gmail.com>","Redis Performance Group <performance@redis.com>"]
6
6
  readme = "README.md"
@@ -4,8 +4,10 @@
4
4
  # All rights reserved.
5
5
  #
6
6
  import logging
7
+ import os
7
8
 
8
- from redisbench_admin.utils.remote import execute_remote_commands
9
+ from redisbench_admin.run_remote.consts import remote_module_file_dir
10
+ from redisbench_admin.utils.remote import copy_file_to_remote_setup, execute_remote_commands
9
11
 
10
12
  from redisbench_admin.environments.oss_cluster import generate_cluster_redis_server_args
11
13
  from redisbench_admin.utils.utils import wait_for_conn
@@ -116,6 +118,7 @@ def spin_up_redis_cluster_remote_redis(
116
118
  redis_7=True,
117
119
  remote_symlinks=None,
118
120
  ld_library_paths=None,
121
+ custom_redis_server_path=None,
119
122
  ):
120
123
  # Import the functions from standalone module
121
124
  from redisbench_admin.run_remote.standalone import (
@@ -124,8 +127,46 @@ def spin_up_redis_cluster_remote_redis(
124
127
  build_ld_library_path_prefix,
125
128
  )
126
129
 
127
- # Ensure redis-server is available before trying to start cluster
128
- ensure_redis_server_available(server_public_ip, username, private_key, ssh_port)
130
+ # Handle custom redis-server binary
131
+ remote_redis_server_path = None
132
+ if custom_redis_server_path:
133
+ if not os.path.exists(custom_redis_server_path):
134
+ logging.error(
135
+ f"Custom redis-server binary not found: {custom_redis_server_path}"
136
+ )
137
+ raise Exception(
138
+ f"Custom redis-server binary not found: {custom_redis_server_path}"
139
+ )
140
+
141
+ remote_redis_server_path = f"{remote_module_file_dir}/redis-server"
142
+ logging.info(
143
+ f"Copying custom redis-server binary to remote host: {custom_redis_server_path} -> {remote_redis_server_path}"
144
+ )
145
+
146
+ copy_result = copy_file_to_remote_setup(
147
+ server_public_ip,
148
+ username,
149
+ private_key,
150
+ custom_redis_server_path,
151
+ remote_redis_server_path,
152
+ None,
153
+ ssh_port,
154
+ False, # don't continue on error
155
+ )
156
+
157
+ if not copy_result:
158
+ logging.error("Failed to copy redis-server binary to remote host")
159
+ raise Exception("Failed to copy redis-server binary to remote host")
160
+
161
+ # Make the binary executable
162
+ chmod_commands = [f"chmod +x {remote_redis_server_path}"]
163
+ execute_remote_commands(
164
+ server_public_ip, username, private_key, chmod_commands, ssh_port
165
+ )
166
+ logging.info("Custom redis-server binary copied and made executable")
167
+ else:
168
+ # Ensure redis-server is available before trying to start cluster (only if not using custom binary)
169
+ ensure_redis_server_available(server_public_ip, username, private_key, ssh_port)
129
170
 
130
171
  # Setup symlinks on remote server if specified
131
172
  if remote_symlinks:
@@ -140,6 +181,9 @@ def spin_up_redis_cluster_remote_redis(
140
181
  if ld_prefix:
141
182
  logging.info(f"Using LD_LIBRARY_PATH prefix: {ld_prefix}")
142
183
 
184
+ # Determine which redis-server binary to use
185
+ redis_server_binary = remote_redis_server_path if remote_redis_server_path else "redis-server"
186
+
143
187
  logging.info("Generating the remote redis-server command arguments")
144
188
  redis_process_commands = []
145
189
  logfiles = []
@@ -148,7 +192,7 @@ def spin_up_redis_cluster_remote_redis(
148
192
  shard_port = master_shard_id + start_port - 1
149
193
 
150
194
  command, logfile = generate_cluster_redis_server_args(
151
- "redis-server",
195
+ redis_server_binary,
152
196
  dbdir_folder,
153
197
  remote_module_files,
154
198
  server_private_ip,
@@ -108,6 +108,7 @@ def remote_db_spin(
108
108
  remote_symlinks=None,
109
109
  ld_library_paths=None,
110
110
  extra_libs=None,
111
+ custom_redis_server_path=None,
111
112
  ):
112
113
  (
113
114
  _,
@@ -180,6 +181,7 @@ def remote_db_spin(
180
181
  redis_7,
181
182
  remote_symlinks,
182
183
  ld_library_paths,
184
+ custom_redis_server_path,
183
185
  )
184
186
  try:
185
187
  for p in range(cluster_start_port, cluster_start_port + shard_count):
@@ -232,6 +234,7 @@ def remote_db_spin(
232
234
  redis_7,
233
235
  remote_symlinks,
234
236
  ld_library_paths,
237
+ custom_redis_server_path,
235
238
  )
236
239
  full_logfiles.append(full_logfile)
237
240
  local_redis_conn, ssh_tunnel = ssh_tunnel_redisconn(
@@ -155,6 +155,7 @@ def run_remote_command_logic(args, project_name, project_version):
155
155
  remote_symlinks = args.remote_symlink
156
156
  ld_library_paths = args.ld_library_path
157
157
  extra_libs = args.extra_lib
158
+ custom_redis_server_path = args.redis_server_binary
158
159
  if WH_TOKEN is not None:
159
160
  webhook_notifications_active = True
160
161
 
@@ -666,6 +667,7 @@ def run_remote_command_logic(args, project_name, project_version):
666
667
  remote_symlinks,
667
668
  ld_library_paths,
668
669
  extra_libs,
670
+ custom_redis_server_path,
669
671
  )
670
672
  if benchmark_type == "read-only" or reuse_mixed:
671
673
  ro_benchmark_set(
@@ -7,6 +7,7 @@
7
7
  import logging
8
8
  import os
9
9
 
10
+ from redisbench_admin.run_remote.consts import remote_module_file_dir
10
11
  from redisbench_admin.utils.remote import (
11
12
  copy_file_to_remote_setup,
12
13
  execute_remote_commands,
@@ -350,9 +351,48 @@ def spin_up_standalone_remote_redis(
350
351
  redis_7=True,
351
352
  remote_symlinks=None,
352
353
  ld_library_paths=None,
354
+ custom_redis_server_path=None,
353
355
  ):
354
- # Ensure redis-server is available before trying to start it
355
- ensure_redis_server_available(server_public_ip, username, private_key, port)
356
+ # Handle custom redis-server binary
357
+ remote_redis_server_path = None
358
+ if custom_redis_server_path:
359
+ if not os.path.exists(custom_redis_server_path):
360
+ logging.error(
361
+ f"Custom redis-server binary not found: {custom_redis_server_path}"
362
+ )
363
+ raise Exception(
364
+ f"Custom redis-server binary not found: {custom_redis_server_path}"
365
+ )
366
+
367
+ remote_redis_server_path = f"{remote_module_file_dir}/redis-server"
368
+ logging.info(
369
+ f"Copying custom redis-server binary to remote host: {custom_redis_server_path} -> {remote_redis_server_path}"
370
+ )
371
+
372
+ copy_result = copy_file_to_remote_setup(
373
+ server_public_ip,
374
+ username,
375
+ private_key,
376
+ custom_redis_server_path,
377
+ remote_redis_server_path,
378
+ None,
379
+ port,
380
+ False, # don't continue on error
381
+ )
382
+
383
+ if not copy_result:
384
+ logging.error("Failed to copy redis-server binary to remote host")
385
+ raise Exception("Failed to copy redis-server binary to remote host")
386
+
387
+ # Make the binary executable
388
+ chmod_commands = [f"chmod +x {remote_redis_server_path}"]
389
+ execute_remote_commands(
390
+ server_public_ip, username, private_key, chmod_commands, port
391
+ )
392
+ logging.info("Custom redis-server binary copied and made executable")
393
+ else:
394
+ # Ensure redis-server is available before trying to start it (only if not using custom binary)
395
+ ensure_redis_server_available(server_public_ip, username, private_key, port)
356
396
 
357
397
  # Setup symlinks on remote server if specified
358
398
  if remote_symlinks:
@@ -362,6 +402,7 @@ def spin_up_standalone_remote_redis(
362
402
  if not symlink_success:
363
403
  logging.warning("Some symlinks failed to create, continuing anyway...")
364
404
 
405
+ logging.info("Generating Redis startup comman with custom redis-server path: {remote_redis_server_path}")
365
406
  full_logfile, initial_redis_cmd = generate_remote_standalone_redis_cmd(
366
407
  logfile,
367
408
  redis_configuration_parameters,
@@ -369,6 +410,7 @@ def spin_up_standalone_remote_redis(
369
410
  temporary_dir,
370
411
  modules_configuration_parameters_map,
371
412
  redis_7,
413
+ custom_redis_server_path=remote_redis_server_path,
372
414
  )
373
415
 
374
416
  # Prepend LD_LIBRARY_PATH if specified
@@ -112,6 +112,22 @@ def generate_common_server_args(
112
112
  ]
113
113
  )
114
114
 
115
+ # Add BigRedis configuration if enabled via environment variable
116
+ if os.getenv("BIGREDIS_ENABLED") is not None:
117
+ bigredis_path = os.getenv("BIGREDIS_PATH", "/tmp/bigredis")
118
+ bigredis_use_async = os.getenv("BIGREDIS_USE_ASYNC", "no")
119
+ logging.info(f"BigRedis enabled. Using bigredis-path: {bigredis_path}")
120
+ command.extend(
121
+ [
122
+ "--bigredis-enabled",
123
+ "yes",
124
+ "--bigredis-driver",
125
+ "speedb",
126
+ "--bigredis-use-async",
127
+ bigredis_use_async, # Temporary default no, until async API is added to Speedb Rust crate.
128
+ ]
129
+ )
130
+
115
131
  return command
116
132
 
117
133