From 6131c5e5cc1e83fdbfbc8fc4ce419765ba3d180a Mon Sep 17 00:00:00 2001 From: Determinant Date: Tue, 31 Jul 2018 13:24:14 -0400 Subject: add cmake options --- CMakeLists.txt | 7 +++++-- TODO.rst | 1 + include/hotstuff/consensus.h | 3 ++- include/hotstuff/entity.h | 4 ++-- include/hotstuff/hotstuff.h | 2 +- include/hotstuff/util.h | 6 +++--- salticidae | 2 +- src/config.h.in | 7 +++++-- src/consensus.cpp | 10 +++++----- src/hotstuff.cpp | 4 ++-- src/hotstuff_app.cpp | 31 ++++++------------------------- 11 files changed, 33 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e65e00..63e92f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,8 +55,11 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Release") endif() -option(HOTSTUFF_ENABLE_DEBUG_LOG "enable debug log" OFF) -option(HOTSTUFF_ENABLE_NORMAL_LOG "enable normal log" ON) +option(HOTSTUFF_DEBUG_LOG "enable debug log" OFF) +option(HOTSTUFF_NORMAL_LOG "enable normal log" ON) +option(HOTSTUFF_PROTO_LOG "enable protocol log" OFF) +option(HOTSTUFF_MSG_STAT "eanble message statistics" ON) +option(HOTSTUFF_BLK_PROFILE "enable block profiling" OFF) configure_file(src/config.h.in include/hotstuff/config.h @ONLY) diff --git a/TODO.rst b/TODO.rst index e9e67ea..3455e2a 100644 --- a/TODO.rst +++ b/TODO.rst @@ -1 +1,2 @@ - Implement a basic long-standing leader PaceMaker +- Persistent protocol state (for safety) diff --git a/include/hotstuff/consensus.h b/include/hotstuff/consensus.h index cb86bf6..1ff8f79 100644 --- a/include/hotstuff/consensus.h +++ b/include/hotstuff/consensus.h @@ -57,7 +57,8 @@ class HotStuffCore { * functions. */ void on_init(uint32_t nfaulty) { config.nmajority = 2 * nfaulty + 1; } - /** Call to deliver a block. + /* TODO: better name for "delivery" ? */ + /** Call to inform the state machine that a block is ready to be handled. * A block is only delivered if itself is fetched, the block for the * contained qc is fetched and all parents are delivered. The user should * always ensure this invariant. The invalid blocks will be dropped by this diff --git a/include/hotstuff/entity.h b/include/hotstuff/entity.h index ba3906b..333b66e 100644 --- a/include/hotstuff/entity.h +++ b/include/hotstuff/entity.h @@ -266,7 +266,7 @@ class EntityStorage { if (blk.get_cnt() == 2) /* only referred by blk and the storage */ { const auto &blk_hash = blk->get_hash(); -#ifdef HOTSTUFF_ENABLE_LOG_PROTO +#ifdef HOTSTUFF_PROTO_LOG HOTSTUFF_LOG_INFO("releasing blk %.10s", get_hex(blk_hash).c_str()); #endif for (const auto &cmd: blk->get_cmds()) @@ -274,7 +274,7 @@ class EntityStorage { blk_cache.erase(blk_hash); return true; } -#ifdef HOTSTUFF_ENABLE_LOG_PROTO +#ifdef HOTSTUFF_PROTO_LOG else HOTSTUFF_LOG_INFO("cannot release (%lu)", blk.get_cnt()); #endif diff --git a/include/hotstuff/hotstuff.h b/include/hotstuff/hotstuff.h index 4e7332f..287cbac 100644 --- a/include/hotstuff/hotstuff.h +++ b/include/hotstuff/hotstuff.h @@ -135,7 +135,7 @@ class HotStuffBase: public HotStuffCore { bool eb_loop; /** network stack */ PeerNetwork pn; -#ifdef HOTSTUFF_ENABLE_BLK_PROFILE +#ifdef HOTSTUFF_BLK_PROFILE BlockProfiler blk_profiler; #endif /* queues for async tasks */ diff --git a/include/hotstuff/util.h b/include/hotstuff/util.h index 2b02cfd..99b5ea4 100644 --- a/include/hotstuff/util.h +++ b/include/hotstuff/util.h @@ -13,12 +13,12 @@ class Logger: public salticidae::Logger { extern Logger logger; -#ifdef HOTSTUFF_ENABLE_DEBUG_LOG +#ifdef HOTSTUFF_DEBUG_LOG #define HOTSTUFF_NORMAL_LOG #define HOTSTUFF_ENABLE_LOG_DEBUG #endif -#ifdef HOTSTUFF_ENABLE_NORMAL_LOG +#ifdef HOTSTUFF_NORMAL_LOG #define HOTSTUFF_ENABLE_LOG_INFO #define HOTSTUFF_ENABLE_LOG_WARN #endif @@ -43,7 +43,7 @@ extern Logger logger; #define HOTSTUFF_LOG_ERROR(...) hotstuff::logger.error(__VA_ARGS__) -#ifdef HOTSTUFF_ENABLE_BLK_PROFILE +#ifdef HOTSTUFF_BLK_PROFILE class BlockProfiler { enum BlockState { BLK_SEEN, diff --git a/salticidae b/salticidae index d2de1d9..c9faab3 160000 --- a/salticidae +++ b/salticidae @@ -1 +1 @@ -Subproject commit d2de1d9a704fc4b23e9a9fb8d610620d6d4752c1 +Subproject commit c9faab354fb314bacd9849503d8b4566a8c9ea62 diff --git a/src/config.h.in b/src/config.h.in index ce1e575..eb92a20 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -1,7 +1,10 @@ #ifndef _HOTSTUFF_CONFIG_H #define _HOTSTUFF_CONFIG_H -#cmakedefine HOTSTUFF_ENABLE_DEBUG_LOG -#cmakedefine HOTSTUFF_ENABLE_NORMAL_LOG +#cmakedefine HOTSTUFF_DEBUG_LOG +#cmakedefine HOTSTUFF_NORMAL_LOG +#cmakedefine HOTSTUFF_PROTO_LOG +#cmakedefine HOTSTUFF_MSG_STAT +#cmakedefine HOTSTUFF_BLK_PROFILE #endif diff --git a/src/consensus.cpp b/src/consensus.cpp index ac7e56a..cc1d572 100644 --- a/src/consensus.cpp +++ b/src/consensus.cpp @@ -88,7 +88,7 @@ void HotStuffCore::check_commit(const block_t &_blk) { { const block_t &blk = *it; blk->decision = 1; -#ifdef HOTSTUFF_ENABLE_LOG_PROTO +#ifdef HOTSTUFF_PROTO_LOG LOG_INFO("commit %s", std::string(*blk).c_str()); #endif size_t idx = 0; @@ -137,7 +137,7 @@ void HotStuffCore::on_propose(const std::vector &cmds, on_deliver_blk(bnew); update(bnew_hash); Proposal prop(id, bqc->get_hash(), bnew, nullptr); -#ifdef HOTSTUFF_ENABLE_LOG_PROTO +#ifdef HOTSTUFF_PROTO_LOG LOG_INFO("propose %s", std::string(*bnew).c_str()); #endif /* self-vote */ @@ -151,7 +151,7 @@ void HotStuffCore::on_propose(const std::vector &cmds, void HotStuffCore::on_receive_proposal(const Proposal &prop) { if (!update(prop.bqc_hash)) return; -#ifdef HOTSTUFF_ENABLE_LOG_PROTO +#ifdef HOTSTUFF_PROTO_LOG LOG_INFO("got %s", std::string(prop).c_str()); #endif block_t bnew = prop.blk; @@ -170,7 +170,7 @@ void HotStuffCore::on_receive_proposal(const Proposal &prop) { vheight = bnew->height; } } -#ifdef HOTSTUFF_ENABLE_LOG_PROTO +#ifdef HOTSTUFF_PROTO_LOG LOG_INFO("now state: %s", std::string(*this).c_str()); #endif do_vote(prop.proposer, @@ -185,7 +185,7 @@ void HotStuffCore::on_receive_proposal(const Proposal &prop) { void HotStuffCore::on_receive_vote(const Vote &vote) { if (!update(vote.bqc_hash)) return; -#ifdef HOTSTUFF_ENABLE_LOG_PROTO +#ifdef HOTSTUFF_PROTO_LOG LOG_INFO("got %s", std::string(vote).c_str()); LOG_INFO("now state: %s", std::string(*this).c_str()); #endif diff --git a/src/hotstuff.cpp b/src/hotstuff.cpp index c01f2f3..abd5116 100644 --- a/src/hotstuff.cpp +++ b/src/hotstuff.cpp @@ -96,7 +96,7 @@ void HotStuffBase::add_replica(ReplicaID idx, const NetAddr &addr, } void HotStuffBase::on_fetch_blk(const block_t &blk) { -#ifdef HOTSTUFF_ENABLE_TX_PROFILE +#ifdef HOTSTUFF_BLK_PROFILE blk_profiler.get_tx(blk->get_hash()); #endif LOG_DEBUG("fetched %.10s", get_hex(blk->get_hash()).c_str()); @@ -174,7 +174,7 @@ promise_t HotStuffBase::async_fetch_blk(const uint256_t &blk_hash, auto it = blk_fetch_waiting.find(blk_hash); if (it == blk_fetch_waiting.end()) { -#ifdef HOTSTUFF_ENABLE_TX_PROFILE +#ifdef HOTSTUFF_BLK_PROFILE blk_profiler.rec_tx(blk_hash, false); #endif it = blk_fetch_waiting.insert( diff --git a/src/hotstuff_app.cpp b/src/hotstuff_app.cpp index e91919e..8edec56 100644 --- a/src/hotstuff_app.cpp +++ b/src/hotstuff_app.cpp @@ -134,7 +134,7 @@ int main(int argc, char **argv) { config.add_opt("help", opt_help, Config::SWITCH_ON, 'h', "show this help info"); EventContext eb; -#ifndef HOTSTUFF_ENABLE_LOG_DEBUG +#ifdef HOTSTUFF_NORMAL_LOG try { #endif config.parse(argc, argv); @@ -185,7 +185,7 @@ int main(int argc, char **argv) { hotstuff::from_hex(replicas[i].second)); } papp->start(); -#ifndef HOTSTUFF_ENABLE_LOG_DEBUG +#ifdef HOTSTUFF_NORMAL_LOG } catch (std::exception &e) { HOTSTUFF_LOG_INFO("exception: %s", e.what()); elapsed.stop(true); @@ -220,24 +220,10 @@ void HotStuffApp::client_request_cmd_handler(MsgReqCmd &&msg, conn_t conn) { msg.postponed_parse(this); auto cmd = msg.cmd; std::vector pms; - bool flag = true; -#ifndef HOTSTUFF_DISABLE_TX_VERIFY - flag &= cmd->verify(); -#endif - const uint256_t cmd_hash = cmd->get_hash(); - if (!flag) - { - LOG_WARN("invalid client cmd"); - cn.send_msg(MsgRespCmd( - Finality(get_id(), -1, 0, 0, cmd_hash, uint256_t())), addr); - } - else - { - LOG_DEBUG("processing %s", std::string(*cmd).c_str()); - exec_command(cmd).then([this, addr](Finality fin) { - cn.send_msg(MsgRespCmd(fin), addr); - }); - } + LOG_DEBUG("processing %s", std::string(*cmd).c_str()); + exec_command(cmd).then([this, addr](Finality fin) { + cn.send_msg(MsgRespCmd(fin), addr); + }); } void HotStuffApp::start() { @@ -249,11 +235,6 @@ void HotStuffApp::start() { LOG_INFO("parent_limit = %d", parent_limit); LOG_INFO("conns = %lu", HotStuff::size()); LOG_INFO("** starting the event loop..."); -#ifdef HOTSTUFF_DISABLE_TX_VERIFY - LOG_INFO("!! verification disabled !!"); -#else - LOG_INFO("** verification enabled **"); -#endif HotStuff::start(); /* enter the event main loop */ eb.dispatch(); -- cgit v1.2.3