-
Notifications
You must be signed in to change notification settings - Fork 224
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
Use flex-error for tendermint-rs errors #923
Conversation
Codecov Report
@@ Coverage Diff @@
## master #923 +/- ##
========================================
+ Coverage 70.6% 71.9% +1.2%
========================================
Files 205 202 -3
Lines 16439 16183 -256
========================================
+ Hits 11620 11643 +23
+ Misses 4819 4540 -279
Continue to review full report at Codecov.
|
This all looks pretty great so far! Is it ready for review yet? |
It should be reviewable soon. Currently I am refactoring the coding convention from |
Signed-off-by: Thane Thomson <connect@thanethomson.com>
* Implement full-duplex secret connection (#938) * Implement thread-safe cloning of a secret connection Signed-off-by: Thane Thomson <connect@thanethomson.com> * Expand documentation for SecretConnection on threading considerations Signed-off-by: Thane Thomson <connect@thanethomson.com> * Extract peer construction into its own method Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add test for cloned SecretConnection This adds a `TcpStream`-based test for parallelizing operations on a `SecretConnection`. I used `TcpStream` instead of the buffered reader in the other tests because it wasn't feasible to implement the `TryClone` trait for that buffered pipe implementation. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add more messages to test Signed-off-by: Thane Thomson <connect@thanethomson.com> * Expand comment for clarity Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add .changelog entry Signed-off-by: Thane Thomson <connect@thanethomson.com> * Restore half-duplex operations Signed-off-by: Thane Thomson <connect@thanethomson.com> * Extract encrypt/decrypt fns as independent methods Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove unnecessary trait bounds Signed-off-by: Thane Thomson <connect@thanethomson.com> * Extract send/receive state Signed-off-by: Thane Thomson <connect@thanethomson.com> * Extract read/write functionality as standalone methods Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add logic to facilitate splitting SecretConnection into its sending and receiving halves Signed-off-by: Thane Thomson <connect@thanethomson.com> * Restore split SecretConnection test using new semantics Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update changelog entry Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update docs for `SecretConnection` Signed-off-by: Thane Thomson <connect@thanethomson.com> * Condense error reporting Signed-off-by: Thane Thomson <connect@thanethomson.com> * Extract TryClone trait into its own crate As per the discussion at #938 (comment), this extracts the `TryClone` trait into a new crate called `tendermint-std-ext` in the `std-ext` directory. This new crate is intended to contain any code that we need that extends the Rust standard library. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Reorder imports Signed-off-by: Thane Thomson <connect@thanethomson.com> * Assert validation regardless of debug build This introduces the internal encryption assertions at runtime regardless of build type. This may introduce a small performance hit, but it's probably worth it to ensure correctness. Effectively this is keeping an eye on the code in the `encrypt_and_write` fn to ensure its correctness. Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove remote_pubkey optionality from sender/receiver halves Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update SecretConnection docs with comment content Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix doc link to TryClone trait Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix doc link to TryClone trait Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add docs on SecretConnection failures and connection integrity Signed-off-by: Thane Thomson <connect@thanethomson.com> * Synchronize sending/receiving failures to comply with crypto algorithm constraints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Rename try_split method to split for SecretConnection Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove redundant field name prefixes Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix broken link in docs Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix recent clippy errors on `master` (#941) * Fix needless borrows in codebase Signed-off-by: Thane Thomson <connect@thanethomson.com> * Ignore needless collect warning (we do actually seem to need it) Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove trailing semicolon in macro to fix docs compiling Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
Signed-off-by: Thane Thomson <connect@thanethomson.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for all this work @soareschen! It's really excellent.
I fixed a couple of minor things (e.g. some error messages during Light Client testing) and I've fixed the merge conflicts with master
, so I'm going to go ahead and merge this now. Everything compiles, clippy's happy and all tests pass.
If we encounter any issues we can always fix them in follow-up PRs.
impl From<std::io::Error> for Error { | ||
fn from(e: std::io::Error) -> Self { | ||
Self::io(e) | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is an example of what I'm talking about in #946.
} | ||
} | ||
|
||
impl Clone for Error { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this not perhaps something that flex-error
should do automatically in the define_error
macro?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can't use #[derive(Clone)]
here because eyre::Report
doesn't implement Clone
. This is a general problem for deriving on the main error type, because error tracers like eyre::Report
do not implement many common traits, not even std::error::Error
. So I made flex-error
leave that to the user to decide how to deal with the tracer part.
use std::fmt::Display; | ||
|
||
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] | ||
pub struct ResponseError { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice refactor! Thanks 🙏
Closes #669
This is the second part for informalsystems/hermes#988
.changelog/