Skip to content

Commit

Permalink
[add] Enable mixing key placeholder with string arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
filipecosta90 committed Jan 14, 2021
1 parent 18d2646 commit 54cca7d
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 9 deletions.
11 changes: 9 additions & 2 deletions client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@

#include "client.h"
#include "cluster_client.h"
#include "config_types.h"


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

assert(key != NULL);
assert(key_len > 0);

cmd_size += m_connections[conn_id]->send_arbitrary_command(arg, key, key_len);
//when we have static data mixed with the key placeholder
if (arg->data.length() != strlen(KEY_PLACEHOLDER)) {
std::string str (arg->data);
str.replace(str.find(KEY_PLACEHOLDER),strlen(KEY_PLACEHOLDER),key);
cmd_size += m_connections[conn_id]->send_arbitrary_command(arg, str.c_str(), str.length() );
} else{
cmd_size += m_connections[conn_id]->send_arbitrary_command(arg, key, key_len);
}
} else if (arg->type == data_type) {
unsigned int value_len;
const char *value = m_obj_gen->get_value(0, &value_len);
Expand Down
5 changes: 0 additions & 5 deletions protocol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -631,11 +631,6 @@ bool redis_protocol::format_arbitrary_command(arbitrary_command &cmd) {

// check arg type
if (current_arg->data.find(KEY_PLACEHOLDER) != std::string::npos) {
if (current_arg->data.length() != strlen(KEY_PLACEHOLDER)) {
benchmark_error_log("error: key placeholder can't combined with other data\n");
return false;
}

current_arg->type = key_type;
} else if (current_arg->data.find(DATA_PLACEHOLDER) != std::string::npos) {
if (current_arg->data.length() != strlen(DATA_PLACEHOLDER)) {
Expand Down
2 changes: 0 additions & 2 deletions tests/test_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
redis>=3.0.0
git+https://github.com/Grokzen/redis-py-cluster.git@master
git+https://github.com/RedisLabsModules/RLTest.git@master
git+https://github.com/RedisLabs/mbdirector.git@master
61 changes: 61 additions & 0 deletions tests/tests_oss_simple_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,3 +144,64 @@ def test_default_set_get_3_runs(env):
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
assert_minimum_memtier_outcomes(config, env, memtier_ok, merged_command_stats, overall_expected_request_count,
overall_request_count)


def test_key_placeholder(env):
env.skipOnCluster()
run_count = 1
benchmark_specs = {"name": env.testName, "args": ['--command=HSET __key__ f __data__']}
addTLSArgs(benchmark_specs, env)
config = get_default_memtier_config()
master_nodes_list = env.getMasterNodesList()
overall_expected_request_count = get_expected_request_count(config) * run_count

add_required_env_arguments(benchmark_specs, config, env, master_nodes_list)

# Create a temporary directory
test_dir = tempfile.mkdtemp()

config = RunConfig(test_dir, env.testName, config, {})
ensure_clean_benchmark_folder(config.results_dir)

benchmark = Benchmark.from_json(config, benchmark_specs)

# benchmark.run() returns True if the return code of memtier_benchmark was 0
memtier_ok = benchmark.run()
debugPrintMemtierOnError(config, env, memtier_ok)

master_nodes_connections = env.getOSSMasterNodesConnectionList()
merged_command_stats = {'cmdstat_hset': {'calls': 0}}
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
assert_minimum_memtier_outcomes(config, env, memtier_ok, merged_command_stats, overall_expected_request_count,
overall_request_count)


# key placeholder combined with other data
def test_key_placeholder_togetherwithdata(env):
env.skipOnCluster()
run_count = 1
benchmark_specs = {"name": env.testName, "args": ['--command=HSET prefix:__key__:suffix f __data__']}
addTLSArgs(benchmark_specs, env)
config = get_default_memtier_config()
master_nodes_list = env.getMasterNodesList()
overall_expected_request_count = get_expected_request_count(config) * run_count

add_required_env_arguments(benchmark_specs, config, env, master_nodes_list)

# Create a temporary directory
test_dir = tempfile.mkdtemp()

config = RunConfig(test_dir, env.testName, config, {})
ensure_clean_benchmark_folder(config.results_dir)

benchmark = Benchmark.from_json(config, benchmark_specs)

# benchmark.run() returns True if the return code of memtier_benchmark was 0
memtier_ok = benchmark.run()
debugPrintMemtierOnError(config, env, memtier_ok)

master_nodes_connections = env.getOSSMasterNodesConnectionList()
merged_command_stats = {'cmdstat_hset': {'calls': 0}}
overall_request_count = agg_info_commandstats(master_nodes_connections, merged_command_stats)
assert_minimum_memtier_outcomes(config, env, memtier_ok, merged_command_stats, overall_expected_request_count,
overall_request_count)

0 comments on commit 54cca7d

Please sign in to comment.