aboutsummaryrefslogtreecommitdiff
path: root/include/hotstuff
diff options
context:
space:
mode:
authorDeterminant <[email protected]>2019-04-17 14:54:24 -0400
committerDeterminant <[email protected]>2019-04-17 14:54:24 -0400
commitcbfda8ccc88789cd3c83c63b6e18693e7dea718d (patch)
tree98e114ecc4f923f7e435c7ab94524e512e94fc14 /include/hotstuff
parentd859aa2cd2db03ef66f305a265ae908ef41d6a72 (diff)
support auto client command for evaluation
Diffstat (limited to 'include/hotstuff')
-rw-r--r--include/hotstuff/client.h10
-rw-r--r--include/hotstuff/hotstuff.h3
-rw-r--r--include/hotstuff/liveness.h8
3 files changed, 21 insertions, 0 deletions
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<PaceMaker>;
@@ -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();
}