-
instead of Node ids, work with ip addresses and ports
-
fix send on closed channel bug with update calls with too short a context
-
implement validation of the sample by probing
-
move transports to sub-package
-
refactor core
- reduce nr of public methods necessary for tests
- formalize alive state
- fix the myriad of race conditions on shared memory variables
- test for concurrent access
-
fix bug that causes cores sample not to be stable over time
-
fix big that cause some deactivated cores to linger in the sample of others
-
decide, use and test an actual network transport
-
implement and test the agent
-
create and test a command that runs the agent as a process
-
(fix) bug that prevent the network to grow from 1 to 2
-
test if nodes can succesfully join by just pushing there ID
-
(fix) leave of node causes peers to keep probing on real agent proc
-
make validation and update timeouts configurable
-
(fix) remove core.IsActive lock contention
-
(fix) remove readView lock contention
-
(fix) pull easily runs into deadline exceeded
-
(fix) prevent pulling of nodes that were recently invalidated
-
refactor probing to not probe double samples
-
(fix) make sure its not possible for others to push others node's "self" info
-
finish basic agent implementation
-
add a general interface to the agent to dissemate messages
-
add a simple way to dissemate custom message in brahmsd
-
use the crypto hash for node hashing also for sampling instead of farm hash
-
probe only a part of the sampled nodes at a time
-
(fix) make sure probes (validation) returns early if all respond in time
-
implement a limited push with a small proof of work to prevent large scale push pollution (as per paper)
-
encrypt messages using https or asymetric encryption (as per paper)
-
randomly clear samples and reset with new seed data to better shield against adverary contamination
-
add a cellular consensus mechanism on sets
-
adjust l1 and l2 as the network grobs using an esimate as described here
-
store the node's sample on disk
-
measure if lock contention on sampler is too high
-
only full shutdown gossip agent if no messages arrive anymore
-
for probing only a subset, use a randomized order approach (Like SWIM) instead of random picking
Refreshing the view seems to be an open design decision.
- Always refresh unless push is too big
- Only refresh if there are pushed or pullsed nodes
- Only refresh if there are both push and pulls
Always refresh makes sure it is the most up-to-date but causes the view to easily fluctuate. but thats were the history sample is for?