aboutsummaryrefslogtreecommitdiff
path: root/src/hotstuff_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hotstuff_client.cpp')
-rw-r--r--src/hotstuff_client.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/hotstuff_client.cpp b/src/hotstuff_client.cpp
index 62b13ed..390149f 100644
--- a/src/hotstuff_client.cpp
+++ b/src/hotstuff_client.cpp
@@ -1,5 +1,6 @@
#include <cassert>
#include <random>
+#include <signal.h>
#include "salticidae/type.h"
#include "salticidae/netaddr.h"
#include "salticidae/network.h"
@@ -42,6 +43,7 @@ struct Request {
std::unordered_map<ReplicaID, MsgNetwork<opcode_t>::conn_t> conns;
std::unordered_map<const uint256_t, Request> waiting;
std::vector<NetAddr> replicas;
+std::vector<std::pair<struct timeval, double>> elapsed;
MsgNetwork<opcode_t> mn(eb, 10, 10, 4096);
void set_proposer(ReplicaID rid) {
@@ -97,7 +99,9 @@ void client_resp_cmd_handler(MsgRespCmd &&msg, MsgNetwork<opcode_t>::Conn &) {
std::string(fin).c_str(),
et.elapsed_sec, et.cpu_elapsed_sec);
#else
- HOTSTUFF_LOG_INFO("%.6f %.6f", et.elapsed_sec, et.cpu_elapsed_sec);
+ struct timeval tv;
+ gettimeofday(&tv, nullptr);
+ elapsed.push_back(std::make_pair(tv, et.elapsed_sec));
#endif
waiting.erase(it);
try_send();
@@ -108,8 +112,16 @@ std::pair<std::string, std::string> split_ip_port_cport(const std::string &s) {
return std::make_pair(ret[0], ret[1]);
}
+void signal_handler(int) {
+ throw HotStuffError("got terminal signal");
+}
+
int main(int argc, char **argv) {
Config config("hotstuff.conf");
+
+ signal(SIGTERM, signal_handler);
+ signal(SIGINT, signal_handler);
+
auto opt_idx = Config::OptValInt::create(0);
auto opt_replicas = Config::OptValStrVec::create();
auto opt_max_iter_num = Config::OptValInt::create(100);
@@ -152,6 +164,15 @@ int main(int argc, char **argv) {
eb.dispatch();
} catch (HotStuffError &e) {
HOTSTUFF_LOG_ERROR("exception: %s", std::string(e).c_str());
+#ifdef HOTSTUFF_ENABLE_BENCHMARK
+ for (const auto &e: elapsed)
+ {
+ char fmt[64];
+ struct tm *tmp = localtime(&e.first.tv_sec);
+ strftime(fmt, sizeof fmt, "%Y-%m-%d %H:%M:%S.%%06u [hotstuff info] %%.6f\n", tmp);
+ fprintf(stderr, fmt, e.first.tv_usec, e.second);
+ }
+#endif
}
return 0;
}