Skip to content

Commit 54cca7d

Browse files
committed
[add] Enable mixing key placeholder with string arguments
1 parent 18d2646 commit 54cca7d

File tree

4 files changed

+70
-9
lines changed

4 files changed

+70
-9
lines changed

client.cpp

+9-2
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050

5151
#include "client.h"
5252
#include "cluster_client.h"
53+
#include "config_types.h"
5354

5455

5556
bool client::setup_client(benchmark_config *config, abstract_protocol *protocol, object_generator *objgen)
@@ -256,8 +257,14 @@ void client::create_arbitrary_request(const arbitrary_command* cmd, struct timev
256257

257258
assert(key != NULL);
258259
assert(key_len > 0);
259-
260-
cmd_size += m_connections[conn_id]->send_arbitrary_command(arg, key, key_len);
260+
//when we have static data mixed with the key placeholder
261+
if (arg->data.length() != strlen(KEY_PLACEHOLDER)) {
262+
std::string str (arg->data);
263+
str.replace(str.find(KEY_PLACEHOLDER),strlen(KEY_PLACEHOLDER),key);
264+
cmd_size += m_connections[conn_id]->send_arbitrary_command(arg, str.c_str(), str.length() );
265+
} else{
266+
cmd_size += m_connections[conn_id]->send_arbitrary_command(arg, key, key_len);
267+
}
261268
} else if (arg->type == data_type) {
262269
unsigned int value_len;
263270
const char *value = m_obj_gen->get_value(0, &value_len);

protocol.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -631,11 +631,6 @@ bool redis_protocol::format_arbitrary_command(arbitrary_command &cmd) {
631631

632632
// check arg type
633633
if (current_arg->data.find(KEY_PLACEHOLDER) != std::string::npos) {
634-
if (current_arg->data.length() != strlen(KEY_PLACEHOLDER)) {
635-
benchmark_error_log("error: key placeholder can't combined with other data\n");
636-
return false;
637-
}
638-
639634
current_arg->type = key_type;
640635
} else if (current_arg->data.find(DATA_PLACEHOLDER) != std::string::npos) {
641636
if (current_arg->data.length() != strlen(DATA_PLACEHOLDER)) {

tests/test_requirements.txt

-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
1-
redis>=3.0.0
2-
git+https://github.com/Grokzen/redis-py-cluster.git@master
31
git+https://github.com/RedisLabsModules/RLTest.git@master
42
git+https://github.com/RedisLabs/mbdirector.git@master

tests/tests_oss_simple_flow.py

+61
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,64 @@ def test_default_set_get_3_runs(env):
144144
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
145145
assert_minimum_memtier_outcomes(config, env, memtier_ok, merged_command_stats, overall_expected_request_count,
146146
overall_request_count)
147+
148+
149+
def test_key_placeholder(env):
150+
env.skipOnCluster()
151+
run_count = 1
152+
benchmark_specs = {"name": env.testName, "args": ['--command=HSET __key__ f __data__']}
153+
addTLSArgs(benchmark_specs, env)
154+
config = get_default_memtier_config()
155+
master_nodes_list = env.getMasterNodesList()
156+
overall_expected_request_count = get_expected_request_count(config) * run_count
157+
158+
add_required_env_arguments(benchmark_specs, config, env, master_nodes_list)
159+
160+
# Create a temporary directory
161+
test_dir = tempfile.mkdtemp()
162+
163+
config = RunConfig(test_dir, env.testName, config, {})
164+
ensure_clean_benchmark_folder(config.results_dir)
165+
166+
benchmark = Benchmark.from_json(config, benchmark_specs)
167+
168+
# benchmark.run() returns True if the return code of memtier_benchmark was 0
169+
memtier_ok = benchmark.run()
170+
debugPrintMemtierOnError(config, env, memtier_ok)
171+
172+
master_nodes_connections = env.getOSSMasterNodesConnectionList()
173+
merged_command_stats = {'cmdstat_hset': {'calls': 0}}
174+
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
175+
assert_minimum_memtier_outcomes(config, env, memtier_ok, merged_command_stats, overall_expected_request_count,
176+
overall_request_count)
177+
178+
179+
# key placeholder combined with other data
180+
def test_key_placeholder_togetherwithdata(env):
181+
env.skipOnCluster()
182+
run_count = 1
183+
benchmark_specs = {"name": env.testName, "args": ['--command=HSET prefix:__key__:suffix f __data__']}
184+
addTLSArgs(benchmark_specs, env)
185+
config = get_default_memtier_config()
186+
master_nodes_list = env.getMasterNodesList()
187+
overall_expected_request_count = get_expected_request_count(config) * run_count
188+
189+
add_required_env_arguments(benchmark_specs, config, env, master_nodes_list)
190+
191+
# Create a temporary directory
192+
test_dir = tempfile.mkdtemp()
193+
194+
config = RunConfig(test_dir, env.testName, config, {})
195+
ensure_clean_benchmark_folder(config.results_dir)
196+
197+
benchmark = Benchmark.from_json(config, benchmark_specs)
198+
199+
# benchmark.run() returns True if the return code of memtier_benchmark was 0
200+
memtier_ok = benchmark.run()
201+
debugPrintMemtierOnError(config, env, memtier_ok)
202+
203+
master_nodes_connections = env.getOSSMasterNodesConnectionList()
204+
merged_command_stats = {'cmdstat_hset': {'calls': 0}}
205+
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
206+
assert_minimum_memtier_outcomes(config, env, memtier_ok, merged_command_stats, overall_expected_request_count,
207+
overall_request_count)

0 commit comments

Comments
 (0)