Replay-immune votes#2087
Conversation
|
We should add a note in the For root retrieval:
I'll keep thinking about this. |
Relaxing/changing the history interval is good, but only helps probabilistically as you rightly point out. Conflicting on failure in this case is awkward because there is no guarantee the retry will succeed. In pure CFT, it might be ok to do that as a first pass and then do something more expensive the second time, but that will need to happen every time on backups in BFT. I will set up a meeting to discuss this further, but please feel free to mention any ideas here too. |
|
replay_immune_proposal_id@17675 aka 20210118.19 vs master ewma over 50 builds from 17031 to 17654 |
|
I think there's a simpler answer here. Rather than trying to intercept the first call to |
|
@eddyashton that sounds good, there are a few implications:
|
|
After discussion, let's go with this with the twist that you proposed: add a read dependency on signatures. That way we're guaranteed never to have a signature (and therefore a possible compaction) between our read_version and our commit version. This should hold even on BFT backups, without having to bundle any additional meta data. |
|
I am going to split this change in at least the following items:
|

Draft open for discussion. Final part of #1649.
This is using only a digest of the request, not bound to the root of the tree. There is a difficulty in obtaining past_root(read_version) in a thread-safe way: compaction may have occurred between taking read_version and calling past_root() on the history.
I am not clear on the best way to solve this, my intuition is that it is necessary to create a variant of the initial get_view() call that atomically marks the version in the history as being a compaction watermark, and to release that watermark once past_root() has been called. That's fairly awkward, because the initial get_view() happens deep in our code, before the user transaction. In the case of BFT, it's even worse, the read version is set before we can possibly know this is a "propose", on the initial read from the request table.
Ideas would be most welcome.