Commit Graph

32 Commits

Author SHA1 Message Date
Andreas Fackler b98bbe9dcd Fix broadcast and example, enable more tests.
This fixes several issues with the broadcast algorithm and enables the
previously ignored tests that now pass:
* Don't decide on a root hash based on anyone's `Echo` message.
* Work around the `merkle` crate's inability to produce the proof of the
  `i`-th leaf for a given index `i`.
* Ignore messages from unknown nodes.
* Avoid decoding multiple times.
* Document the full algorithm.
* Don't count multiple `Echo` or `Ready` messages coming from the same
  node.
* Fix index computation for a given proof.
* Move `BroadcastMessage` into `broadcast` to make the module more
  self-contained.

The example now only executes a single broadcast instance, expecting the
first node (the one with the lexicographically lowest address) to
propose a value. A shell script is added that runs for example nodes.

Use env_logger instead of simple_logger, so the log level can be controlled
with an environment variable. You can e.g. log all output from the broadcast
test and the crate itself in debug mode with:
RUST_LOG=hbbft=debug,broadcast=debug

Some debugging messages are more concise now and use hexadecimal
notation instead of printing arrays of decimal values.

An indentation error in the Travis script is also fixed.
2018-05-08 17:04:38 +02:00
Andreas Fackler eec3102cbf Move node to examples, deduplicate code. 2018-05-05 17:54:29 +02:00
Andreas Fackler e2cd4ca1b7 added (ignored) regression tests for some of the broadcast issues 2018-05-04 11:14:19 +02:00
Andreas Fackler 8bced81438 removed some unnecessary cloning
This also adds a few TODOs to the broadcast implementation: Some of
these issues need a regression test. (Oh, and a fix!)
2018-05-04 09:58:21 +02:00
Andreas Fackler babbd2f36a fixed broadcast failure with malicious value proposal 2018-05-03 11:07:37 +03:00
Andreas Fackler 0f3377c8e9 made broadcast handle its own echo and value messages 2018-05-03 08:47:31 +03:00
Andreas Fackler 7096251b91 extended tests, make broadcast output only once 2018-05-02 16:34:54 +03:00
Andreas Fackler f710806b17 test broadcast in a single thread 2018-05-01 19:38:11 +03:00
Andreas Fackler 6117e11a9e applied rustfmt 2018-04-30 18:55:51 +03:00
Andreas Fackler f399ed2c07 fixed Clippy lint warnings 2018-04-30 18:50:24 +03:00
Vladimir Komendantskiy 1fadff0e30 added the broadcast trigger message in the broadcast test 2018-04-27 13:31:50 +01:00
Vladimir Komendantskiy 329adc3c2b ported sharding and sending out Merkle tree proofs 2018-04-27 13:19:39 +01:00
Vladimir Komendantskiy eef846550f added the ACS algorithm with one clause not ready yet 2018-04-26 14:22:18 +01:00
Vladimir Komendantskiy 8cd1f4748d broadcast ECHO message handler and mutable access solution for writeable state of broadcast 2018-04-25 20:41:46 +01:00
Vladimir Komendantskiy c7020e7b6a broadcast VALUE remote message handler written 2018-04-25 14:07:16 +01:00
Vladimir Komendantskiy 5428d928cc added receiver threads for remote nodes in the broadcast test 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy 93617f797d removed unnecessary mutability requirements 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy 08ff34c2a7 removed the algo error type, replacing it with type constraints and drafted adding handlers to a test node 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy 92d8c0d71a fold was not using the variable capturing the sequential data; I fixed that 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy 36cb880186 introduced a message handler trait and corrected the type of message handler container 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy 629c54494c added send_remote for sending a queue of messages to remote nodes through channels 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy b5e47d9a4f wrote essentials of the message loop and updated the message queue with required handles 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy 875f3cecbe updated the message loop state adding messages queued for sending to remote nodes 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy f801f0c1b0 test prototype of a message loop implementation 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy 7b82228b57 basic types for message passing between algorithms 2018-04-25 10:59:46 +01:00
Vladimir Komendantskiy b1cc8aee15 removed unused test module and refactored handling of Result using combinators 2018-04-16 15:17:36 +01:00
Vladimir Komendantskiy cdd86cbd6a added error handling in the local messaging task, so that channel errors don't cause a panic 2018-04-16 14:03:32 +01:00
Andreas Fackler 0494b4925d fixed value encoding, shortened debug messages
This adds a length byte to the values before padding with 0, so that we
can omit the padding at the end again. Shards are not converted to the
type parameter `T` anymore, because they are not necessarily valid
representations of a `T` value, e.g. valid UTF-8, as in the tests.

It also shortens some debug messages by printing byte arrays as
hexadecimal, and eliding some bytes.
2018-04-14 12:27:17 +02:00
Andreas Fackler fc3e502c5a fixed test build 2018-04-14 10:40:06 +02:00
Vladimir Komendantskiy 13081f75ee simple update in TestNode::run allowing to change the number of nodes in the pool 2018-04-13 18:49:49 +01:00
Vladimir Komendantskiy d9bc81fe5f integration test of broadcast mostly ready; there is a thread termination issue however 2018-04-13 18:28:41 +01:00
Vladimir Komendantskiy efdb4467c5 added broadcast integration test concept 2018-04-12 17:17:33 +01:00