-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Test network partitioning #801
Comments
In takeChainPrefix :: Chain (Block DemoBFT) -> Chain (Block DemoBFT)
takeChainPrefix = id -- in BFT, chains should indeed all be equal. This however I think is not true once we start having network failures (@brunjlar , do you agree?) |
@mrBliss Here's my initial approach. Seem reasonable? Might need more complexity when eventually combined with IntersectMBO/ouroboros-network#231.
Edit: Seems like maybe the node needs to be notified (e.g. by exception) that its Edit 2: Actually, it seems much more reasonable to block the |
I have a local patch that splits the network into two non-empty partitions during one interval of the run. Once the interruption ceases, the two partitions exchange rollbacks (in the common case where they both extend their chains incompatibly during the interruption). For BFT and PBFT, if I include logic in the interruption plan generator to bound the duration of the network interruption, then the subsequent rollbacks respect For the In other words, the network partitioning introduces an "interrupt duration too long" concept similar to the " I'm unsure how to proceed and would appreciate advice. Here are some related observations.
And here are some options.
Edit: remove the sentence about |
What about the following approach:
I have not tried it out, but I hope this makes some things easier. What do you think? |
Yes, I've reached the same conclusion: the next thing to try is writing a For that reason, I'm now working to understand the details of the |
1074: Add basic test for Chain Growth r=nfrisby a=nfrisby This PR is "part one" for Issue #235. It adds a `Property` that tests for Chain Growth modulo EBBs and late joins. In particular, it assumes there are no message delays, which is effectively true now and will be until Issue #229 and/or #230. From https://eprint.iacr.org/2017/573/20171115:001835 > Chain Growth (CG); with parameters τ ∈ (0, 1], s ∈ N. Consider the chains C1, C2 possessed by two honest parties at the onset of two slots sl1, sl2 with sl2 at least s slots ahead of sl1. Then it holds that len(C2) − len(C1) ≥ τ · s. We call τ the speed coefficient. We test with a deterministic variety of values for the `τ` and `s` parameters. Because our current test framework has a limited set of possible faults, we can test Chain Growth for all values of `s` that are greater than 0. Similarly, we're able to compute a `τ` value for any given interval of slots based on the leader schedule (roughly-- see relevant comments in diff). Once we add message delays (latencies, partitions, etc) these tests as-is will fail -- I'm still thinking about how to handle that, but I've decided to open this PR for now. Co-authored-by: Nicolas Frisby <[email protected]>
1107: Test for unexpected message delays r=nfrisby a=nfrisby This test confirms that our current test suite is not introducing any unexpected message delays, where _message delays_ is analogous to that from the paper https://eprint.iacr.org/2017/573/20171115:001835. Issues #229 and #230 will cause this property to fail; they'll have to refine it somehow. Co-authored-by: Nicolas Frisby <[email protected]>
While recently re-reading the Ouroboros papers (see eg Issue #695), I noticed that the BFT paper does not limit how many blocks a node can rollback. Our BFT implementation, though, does limit that to the security parameter This observation relates to this Issue because it invalidates the paper's claim that BFT is resilient to network partitions.
For D "large enough" (possibly also including the effects of other confounding factors like network latency etc), the connected components' chains will have unique suffixes that include more than |
Yes, we inherit this aspect of Ouroboros classic, and when we're in Praos then we'll also have a k rollback limit. So this aspect of BFT is something we do take advantage of, and of course it would only be temporary anyway. So yes, we can still only tolerate partitions up to k blocks long. |
We should test what happens when the network gets temporarily partitioned. This is a particularly important test because it is the one that will cause rollbacks.
The text was updated successfully, but these errors were encountered: