From cbfda8ccc88789cd3c83c63b6e18693e7dea718d Mon Sep 17 00:00:00 2001 From: Determinant Date: Wed, 17 Apr 2019 14:54:24 -0400 Subject: support auto client command for evaluation --- include/hotstuff/client.h | 10 ++++++++++ include/hotstuff/hotstuff.h | 3 +++ include/hotstuff/liveness.h | 8 ++++++++ 3 files changed, 21 insertions(+) (limited to 'include/hotstuff') diff --git a/include/hotstuff/client.h b/include/hotstuff/client.h index 95bcacb..37a3a17 100644 --- a/include/hotstuff/client.h +++ b/include/hotstuff/client.h @@ -50,6 +50,16 @@ 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 + class CommandDummy: public Command { uint32_t cid; uint32_t n; diff --git a/include/hotstuff/hotstuff.h b/include/hotstuff/hotstuff.h index 10dcb84..03e5528 100644 --- a/include/hotstuff/hotstuff.h +++ b/include/hotstuff/hotstuff.h @@ -217,6 +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 /* Helper functions */ /** Returns a promise resolved (with command_t cmd) when Command is fetched. */ diff --git a/include/hotstuff/liveness.h b/include/hotstuff/liveness.h index 6d3c3cf..f4027a2 100644 --- a/include/hotstuff/liveness.h +++ b/include/hotstuff/liveness.h @@ -51,6 +51,7 @@ class PaceMaker { virtual promise_t beat_resp(ReplicaID last_proposer) = 0; /** Impeach the current proposer. */ virtual void impeach() {} + virtual size_t get_pending_size() = 0; }; using pacemaker_bt = BoxObj; @@ -166,6 +167,9 @@ class PMWaitQC: public virtual PaceMaker { } public: + + size_t get_pending_size() override { return pending_beats.size(); } + void init() { last_proposed = hsc->get_genesis(); locked = false; @@ -455,6 +459,8 @@ class PMStickyProposer: virtual public PaceMaker { PMStickyProposer(double qc_timeout, const EventContext &ec): qc_timeout(qc_timeout), ec(ec) {} + size_t get_pending_size() override { return pending_beats.size(); } + void init() { to_candidate(); } ReplicaID get_proposer() override { @@ -706,6 +712,8 @@ class PMRoundRobinProposer: virtual public PaceMaker { PMRoundRobinProposer(double qc_timeout, const EventContext &ec): qc_timeout(qc_timeout), ec(ec), proposer(0) {} + size_t get_pending_size() override { return pending_beats.size(); } + void init() { to_candidate(); } -- cgit v1.2.3