Do not use seqnos from NoKV transactions in performance tests (#1286)

This commit is contained in:
Amaury Chamayou 2020-06-15 13:13:19 +01:00 коммит произвёл GitHub
Родитель 5ef2af4754
Коммит d4ebc3aef3
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 35 добавлений и 27 удалений

Просмотреть файл

@ -257,7 +257,7 @@ private:
}
}
LOG_INFO_FMT("VERIFIED {}", prefix);
LOG_INFO_FMT("Verified {}", prefix);
}
void verify_initial_state(const nlohmann::json& expected) override

Просмотреть файл

@ -425,19 +425,15 @@ namespace client
}
}
const auto global_commit_response = wait_for_global_commit(
trigger_signature(create_connection(true, false)));
size_t last_commit = 0;
if (!options.no_wait)
{
const auto commit_ids =
timing::parse_commit_ids(global_commit_response);
last_commit = commit_ids.global;
}
else
{
last_commit = last_response_commit.seqno;
// Create a new connection, because we need to do some GETs
// and when all you have is a WebSocket, everything looks like a POST!
auto c = create_connection(true, false);
trigger_signature(c);
wait_for_global_commit(last_response_commit);
}
const auto last_commit = last_response_commit.seqno;
auto timing_results = end_timing(last_commit);
LOG_INFO_FMT("Timing ended");
return timing_results;
@ -524,23 +520,27 @@ namespace client
// Send a mkSign RPC to trigger next global commit
const auto method = "mkSign";
const auto mk_sign = connection->gen_request(method);
if (response_times.is_timing_active())
{
response_times.record_send(method, mk_sign.id, true);
}
connection->write(mk_sign.encoded);
// Do a blocking read for this final response
const auto response = connection->read_response();
process_reply(response);
const auto commit_ids = timing::parse_commit_ids(response);
LOG_INFO_FMT(
"Triggered signature at {}.{}", commit_ids.view, commit_ids.seqno);
LOG_INFO_FMT("Triggered signature");
return response;
}
RpcTlsClient::Response get_tx_status(
const std::shared_ptr<RpcTlsClient>& connection,
size_t view,
size_t seqno)
{
nlohmann::json p;
p["seqno"] = seqno;
p["view"] = view;
return connection->get("tx", p);
}
virtual void verify_params(const nlohmann::json& expected)
{
// It's only reasonable to compare against expected state if the initial
@ -649,11 +649,14 @@ namespace client
{
const auto last_response = send_creation_transactions();
if (last_response.has_value())
if (
last_response.has_value() &&
http::status_success(last_response->status))
{
// Ensure creation transactions are globally committed before
// proceeding
wait_for_global_commit(trigger_signature(create_connection(true)));
trigger_signature(create_connection(true));
wait_for_global_commit(last_response.value());
}
}
catch (std::exception& e)
@ -693,13 +696,13 @@ namespace client
}
}
RpcTlsClient::Response wait_for_global_commit(
timing::CommitPoint wait_for_global_commit(
const timing::CommitPoint& target)
{
return response_times.wait_for_global_commit(target);
}
RpcTlsClient::Response wait_for_global_commit(
timing::CommitPoint wait_for_global_commit(
const RpcTlsClient::Response& response)
{
check_response(response);

Просмотреть файл

@ -29,12 +29,13 @@ class ScenarioPerfClient : public Base
private:
nlohmann::json scenario_json;
RpcTlsClient::Response send_verbose_transactions(
std::optional<RpcTlsClient::Response> send_verbose_transactions(
const std::shared_ptr<RpcTlsClient>& connection, char const* element_name)
{
const auto it = scenario_json.find(element_name);
RpcTlsClient::Response response;
bool sent = false;
if (it != scenario_json.end())
{
@ -56,12 +57,16 @@ private:
LOG_INFO_FMT("Sending {}: {}", method, params.dump(2));
response = connection->call(method, params);
sent = true;
const auto response_body = connection->unpack_body(response);
LOG_INFO_FMT("Response: {} {}", response.status, response_body.dump(2));
}
}
return response;
if (sent)
return response;
else
return std::nullopt;
}
void pre_creation_hook() override

Просмотреть файл

@ -248,7 +248,7 @@ namespace timing
// committed (or will never be committed), returns first confirming
// response. Calls record_[send/response], if record is true.
// Throws on errors, or if target is rolled back
RpcTlsClient::Response wait_for_global_commit(
CommitPoint wait_for_global_commit(
const CommitPoint& target, bool record = true)
{
auto params = nlohmann::json::object();
@ -302,7 +302,7 @@ namespace timing
commit_ids.view,
commit_ids.seqno,
commit_ids.global);
return response;
return {commit_ids.view, commit_ids.seqno};
}
else if (tx_status == "INVALID")
{