From 4661ecc2ae1684cc02bde22215200e05b15ed4d7 Mon Sep 17 00:00:00 2001 From: Determinant Date: Wed, 8 May 2019 15:23:47 -0400 Subject: reintroduce client confirms --- include/hotstuff/client.h | 18 ++++++++-------- include/hotstuff/hotstuff.h | 6 +++--- src/client.cpp | 6 +++--- src/hotstuff.cpp | 8 +++---- src/hotstuff_app.cpp | 30 +++++++++++++------------- src/hotstuff_client.cpp | 52 +++++++++++---------------------------------- 6 files changed, 46 insertions(+), 74 deletions(-) diff --git a/include/hotstuff/client.h b/include/hotstuff/client.h index 37a3a17..1c15ee9 100644 --- a/include/hotstuff/client.h +++ b/include/hotstuff/client.h @@ -50,15 +50,15 @@ struct MsgRespCmd { } }; -#ifdef HOTSTUFF_AUTOCLI -struct MsgDemandCmd { - static const opcode_t opcode = 0x6; - DataStream serialized; - size_t ncmd; - MsgDemandCmd(size_t ncmd) { serialized << ncmd; } - MsgDemandCmd(DataStream &&s) { s >> ncmd; } -}; -#endif +//#ifdef HOTSTUFF_AUTOCLI +//struct MsgDemandCmd { +// static const opcode_t opcode = 0x6; +// DataStream serialized; +// size_t ncmd; +// MsgDemandCmd(size_t ncmd) { serialized << ncmd; } +// MsgDemandCmd(DataStream &&s) { s >> ncmd; } +//}; +//#endif class CommandDummy: public Command { uint32_t cid; diff --git a/include/hotstuff/hotstuff.h b/include/hotstuff/hotstuff.h index 03e5528..43ed3a4 100644 --- a/include/hotstuff/hotstuff.h +++ b/include/hotstuff/hotstuff.h @@ -217,9 +217,9 @@ class HotStuffBase: public HotStuffCore { size_t size() const { return peers.size(); } PaceMaker &get_pace_maker() { return *pmaker; } void print_stat() const; -#ifdef HOTSTUFF_AUTOCLI - virtual void do_demand_commands(size_t) {} -#endif +//#ifdef HOTSTUFF_AUTOCLI +// virtual void do_demand_commands(size_t) {} +//#endif /* Helper functions */ /** Returns a promise resolved (with command_t cmd) when Command is fetched. */ diff --git a/src/client.cpp b/src/client.cpp index ee4b7dd..7090616 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -20,8 +20,8 @@ namespace hotstuff { const opcode_t MsgReqCmd::opcode; const opcode_t MsgRespCmd::opcode; -#ifdef HOTSTUFF_AUTOCLI -const opcode_t MsgDemandCmd::opcode; -#endif +//#ifdef HOTSTUFF_AUTOCLI +//const opcode_t MsgDemandCmd::opcode; +//#endif } diff --git a/src/hotstuff.cpp b/src/hotstuff.cpp index 2cc3821..d0b4139 100644 --- a/src/hotstuff.cpp +++ b/src/hotstuff.cpp @@ -117,10 +117,10 @@ promise_t HotStuffBase::exec_command(uint256_t cmd_hash) { else { on_propose(cmds, pmaker->get_parents()); -#ifdef HOTSTUFF_AUTOCLI - for (size_t i = pmaker->get_pending_size(); i < 1; i++) - do_demand_commands(blk_size); -#endif +//#ifdef HOTSTUFF_AUTOCLI +// for (size_t i = pmaker->get_pending_size(); i < 1; i++) +// do_demand_commands(blk_size); +//#endif } }); } diff --git a/src/hotstuff_app.cpp b/src/hotstuff_app.cpp index b1776f5..bc596f4 100644 --- a/src/hotstuff_app.cpp +++ b/src/hotstuff_app.cpp @@ -78,9 +78,9 @@ class HotStuffApp: public HotStuff { /** The listen address for client RPC */ NetAddr clisten_addr; -#if HOTSTUFF_CMD_RESPSIZE > 0 +//#if HOTSTUFF_CMD_RESPSIZE > 0 std::unordered_map unconfirmed; -#endif +//#endif using conn_t = ClientNetwork::conn_t; @@ -102,25 +102,25 @@ class HotStuffApp: public HotStuff { #ifndef HOTSTUFF_ENABLE_BENCHMARK HOTSTUFF_LOG_INFO("replicated %s", std::string(fin).c_str()); #endif -#if HOTSTUFF_CMD_RESPSIZE > 0 +//#if HOTSTUFF_CMD_RESPSIZE > 0 auto it = unconfirmed.find(fin.cmd_hash); if (it != unconfirmed.end()) { it->second.resolve(fin); unconfirmed.erase(it); } -#endif +//#endif } -#ifdef HOTSTUFF_AUTOCLI - void do_demand_commands(size_t blk_size) override { - size_t ncli = client_conns.size(); - size_t bsize = (blk_size + ncli - 1) / ncli; - hotstuff::MsgDemandCmd mdc{bsize}; - for(const auto &conn: client_conns) - cn.send_msg(mdc, conn); - } -#endif +//#ifdef HOTSTUFF_AUTOCLI +// void do_demand_commands(size_t blk_size) override { +// size_t ncli = client_conns.size(); +// size_t bsize = (blk_size + ncli - 1) / ncli; +// hotstuff::MsgDemandCmd mdc{bsize}; +// for(const auto &conn: client_conns) +// cn.send_msg(mdc, conn); +// } +//#endif #ifdef HOTSTUFF_MSG_STAT std::unordered_set client_conns; @@ -313,7 +313,7 @@ void HotStuffApp::client_request_cmd_handler(MsgReqCmd &&msg, const conn_t &conn exec_command(cmd_hash).then([this, addr](Finality fin) { cn.send_msg(MsgRespCmd(fin), addr); }); -#if HOTSTUFF_CMD_RESPSIZE > 0 +//#if HOTSTUFF_CMD_RESPSIZE > 0 else { auto it = unconfirmed.find(cmd_hash); @@ -324,7 +324,7 @@ void HotStuffApp::client_request_cmd_handler(MsgReqCmd &&msg, const conn_t &conn cn.send_msg(MsgRespCmd(std::move(fin)), addr); }); } -#endif +//#endif } void HotStuffApp::start(const std::vector> &reps) { diff --git a/src/hotstuff_client.cpp b/src/hotstuff_client.cpp index 8eeb8e5..2c8b738 100644 --- a/src/hotstuff_client.cpp +++ b/src/hotstuff_client.cpp @@ -52,12 +52,10 @@ uint32_t cnt = 0; uint32_t nfaulty; struct Request { - ReplicaID rid; command_t cmd; size_t confirmed; salticidae::ElapsedTime et; - Request(ReplicaID rid, const command_t &cmd): - rid(rid), cmd(cmd), confirmed(0) { et.start(); } + Request(const command_t &cmd): cmd(cmd), confirmed(0) { et.start(); } }; using Net = salticidae::MsgNetwork; @@ -73,18 +71,10 @@ void connect_all() { conns.insert(std::make_pair(i, mn.connect(replicas[i]))); } -void set_proposer(ReplicaID rid) { - proposer = rid; -// auto it = conns.find(rid); -// if (it == conns.end()) -// conns.insert(std::make_pair(rid, mn.connect(replicas[rid]))); -} - bool try_send(bool check = true) { if ((!check || waiting.size() < max_async_num) && max_iter_num) { auto cmd = new CommandDummy(cid, cnt++); - //mn.send_msg(MsgReqCmd(*cmd), *conns.at(proposer)); MsgReqCmd msg(*cmd); for (auto &p: conns) mn.send_msg(msg, p.second); #ifndef HOTSTUFF_ENABLE_BENCHMARK @@ -92,7 +82,7 @@ bool try_send(bool check = true) { get_hex(cmd->get_hash()).c_str()); #endif waiting.insert(std::make_pair( - cmd->get_hash(), Request(proposer, cmd))); + cmd->get_hash(), Request(cmd))); if (max_iter_num > 0) max_iter_num--; return true; @@ -108,24 +98,7 @@ void client_resp_cmd_handler(MsgRespCmd &&msg, const Net::conn_t &) { auto &et = it->second.et; if (it == waiting.end()) return; et.stop(); -// if (fin.rid != proposer) -// { -// HOTSTUFF_LOG_INFO("reconnect to the new proposer"); -// set_proposer(fin.rid); -// } -// if (fin.rid != it->second.rid) -// { -// mn.send_msg(MsgReqCmd(*(waiting.find(cmd_hash)->second.cmd)), -// *conns.at(proposer)); -//#ifndef HOTSTUFF_ENABLE_BENCHMARK -// HOTSTUFF_LOG_INFO("resend cmd %.10s", -// get_hex(cmd_hash).c_str()); -//#endif -// et.start(); -// it->second.rid = proposer; -// return; -// } -// if (++it->second.confirmed <= nfaulty) return; // wait for f + 1 ack + if (++it->second.confirmed <= nfaulty) return; // wait for f + 1 ack #ifndef HOTSTUFF_ENABLE_BENCHMARK HOTSTUFF_LOG_INFO("got %s, wall: %.3f, cpu: %.3f", std::string(fin).c_str(), @@ -141,12 +114,12 @@ void client_resp_cmd_handler(MsgRespCmd &&msg, const Net::conn_t &) { #endif } -#ifdef HOTSTUFF_AUTOCLI -void client_demand_cmd_handler(hotstuff::MsgDemandCmd &&msg, const Net::conn_t &) { - for (size_t i = 0; i < msg.ncmd; i++) - try_send(false); -} -#endif +//#ifdef HOTSTUFF_AUTOCLI +//void client_demand_cmd_handler(hotstuff::MsgDemandCmd &&msg, const Net::conn_t &) { +// for (size_t i = 0; i < msg.ncmd; i++) +// try_send(false); +//} +//#endif std::pair split_ip_port_cport(const std::string &s) { auto ret = salticidae::trim_all(salticidae::split(s, ";")); @@ -169,9 +142,9 @@ int main(int argc, char **argv) { ev_sigterm.add(SIGTERM); mn.reg_handler(client_resp_cmd_handler); -#ifdef HOTSTUFF_AUTOCLI - mn.reg_handler(client_demand_cmd_handler); -#endif +//#ifdef HOTSTUFF_AUTOCLI +// mn.reg_handler(client_demand_cmd_handler); +//#endif mn.start(); config.add_opt("idx", opt_idx, Config::SET_VAL); @@ -205,7 +178,6 @@ int main(int argc, char **argv) { nfaulty = (replicas.size() - 1) / 3; HOTSTUFF_LOG_INFO("nfaulty = %zu", nfaulty); connect_all(); - set_proposer(idx); while (try_send()); ec.dispatch(); -- cgit v1.2.3