Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

chore/error: remove from str conversion and add deprecation notificat… #7472

Merged
39 commits merged into from
Nov 27, 2020

Conversation

drahnr
Copy link
Contributor

@drahnr drahnr commented Oct 30, 2020

Add explicit error variants for where Error::Msg is used today. Unfortunately this is a bit more tangled so this is just a minor cleanup.

@drahnr drahnr added A0-please_review Pull request needs code review. B0-silent Changes should not be mentioned in any release notes C1-low PR touches the given topic and has a low impact on builders. labels Oct 30, 2020
@drahnr drahnr self-assigned this Oct 30, 2020
primitives/blockchain/src/error.rs Outdated Show resolved Hide resolved
@drahnr drahnr requested a review from ordian November 10, 2020 15:01
Copy link
Member

@ordian ordian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good in general, but it's not clear why we want both Foreign and Msg error types.

client/service/src/client/wasm_override.rs Show resolved Hide resolved
client/service/src/client/wasm_override.rs Outdated Show resolved Hide resolved
primitives/blockchain/src/error.rs Outdated Show resolved Hide resolved
primitives/blockchain/src/error.rs Outdated Show resolved Hide resolved
primitives/blockchain/src/error.rs Show resolved Hide resolved
@drahnr
Copy link
Contributor Author

drahnr commented Nov 10, 2020

Looks good in general, but it's not clear why we want both Foreign and Msg error types.

We eventually don't want Msg anymore, but right now there are a few more tricky cases which are not resolved just yet.

drahnr and others added 2 commits November 10, 2020 17:03
Co-authored-by: Andronik Ordian <write@reusable.software>
@drahnr drahnr requested a review from NikVolf as a code owner November 10, 2020 19:33
@drahnr drahnr requested a review from ordian November 11, 2020 09:55
ordian
ordian previously approved these changes Nov 11, 2020
client/service/src/error.rs Show resolved Hide resolved
@drahnr drahnr added A8-mergeoncegreen and removed A0-please_review Pull request needs code review. labels Nov 11, 2020
@paritytech paritytech deleted a comment Nov 11, 2020
Comment on lines +103 to +116
#[error(transparent)]
RuntimeConstruction(#[from] WasmError),

#[error("Shared memory is not supported")]
SharedMemUnsupported,

#[error("Imported globals are not supported yet")]
ImportedGlobalsUnsupported,

#[error("initializer expression can have only up to 2 expressions in wasm 1.0")]
InitializerHasTooManyExpressions,

#[error("Invalid initializer expression provided {0}")]
InvalidInitializerExpression(String),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We added here a bunch of error variants, but kept the Other(String). Could you elaborate on what is the plan wrt Other(String) error type, is it going to removed eventually? It's not clear when to stop adding more error types.

I'm starting to think we don't need to present the user all the error types, a typical use-case would not match on error variants, but will log them.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My intention is to provide sufficient depth so the chain of errors is sufficiently detailed to do a diagnostic right away.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have no intention to dig any further any more of the Other rabbit holes at this point.

@drahnr drahnr requested a review from bkchr November 27, 2020 13:54
Copy link
Member

@bkchr bkchr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some last nitpicks. Otherwise it now looks great, especially with all these "local" errors!
Thank you


#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error<T> where T: SlotData + Clone + Debug + Send + Sync + 'static {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need all this bounds?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Putting bounds on the declaration of a struct should be prevented as much as possible. And I don't see any reason here?

Copy link
Contributor Author

@drahnr drahnr Nov 27, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Debug + Send + Sync + 'static are required, otherwise Error<T> will not be Send or Sync. Slot data is there for features. Clone can be removed though.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You only need the bounds on T where you need to have Error Send and Sync

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -523,7 +523,7 @@ fn offchain_http_should_work(wasm_method: WasmExecutionMethod) {

#[test_case(WasmExecutionMethod::Interpreted)]
#[cfg_attr(feature = "wasmtime", test_case(WasmExecutionMethod::Compiled))]
#[should_panic(expected = "Allocator ran out of space")]
#[should_panic]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope, not a good idea to do this. This means any exception will be accepted. Please revert

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By default the debug message is used, which is now the full chain of errors which is not something we want to match against. I'll see how the functionality can be restored.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bkchr would it be acceptable that the two error messages differ slightly - native could have a chain, where wasmi could not? Or must they be exact matches?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we not just match on parts of the error message?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So remove the should_panic and do unwrap_error().to_string().contains()?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So remove the should_panic and do unwrap_error().to_string().contains()?

That implies a yes, the error types do not have to be the exact equiv :)

Can we not just match on parts of the error message?

Technically if only the first error is formatted, equiv relation should be sufficient..

client/service/src/client/wasm_override.rs Outdated Show resolved Hide resolved
client/service/src/client/wasm_override.rs Outdated Show resolved Hide resolved
primitives/api/src/lib.rs Outdated Show resolved Hide resolved
primitives/api/test/tests/decl_and_impl.rs Outdated Show resolved Hide resolved
primitives/blockchain/src/error.rs Show resolved Hide resolved
drahnr and others added 4 commits November 27, 2020 16:06
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
@@ -25,92 +25,95 @@ use wasmi;
pub type Result<T> = std::result::Result<T, Error>;

/// Error type.
#[derive(Debug, derive_more::Display, derive_more::From)]
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
/// Unserializable Data
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove doc comments here for unification?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would like to wrap this up and then do another sweep in a separate PR.

@@ -26,46 +26,46 @@ use sp_runtime::transaction_validity::{
pub type Result<T> = std::result::Result<T, Error>;

/// Transaction pool error type.
#[derive(Debug, derive_more::Display, derive_more::From)]
#[derive(Debug, thiserror::Error, derive_more::From)]
#[allow(missing_docs)]
pub enum Error {
/// Transaction is not verifiable yet, but might be in the future.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and here?

@ordian
Copy link
Member

ordian commented Nov 27, 2020

bot merge

@ghost
Copy link

ghost commented Nov 27, 2020

Trying merge.

@ghost ghost merged commit d428fc7 into master Nov 27, 2020
@ghost ghost deleted the bernhard-error-chore branch November 27, 2020 18:37
@bkchr
Copy link
Member

bkchr commented Nov 28, 2020

@ordian why did you merge this with open issues?

@ordian
Copy link
Member

ordian commented Nov 28, 2020

@ordian why did you merge this with open issues?

#7472 (comment)

These issues are not critical and can be addressed separately.

@bkchr
Copy link
Member

bkchr commented Nov 28, 2020

@ordian why did you merge this with open issues?

#7472 (comment)

These issues are not critical and can be addressed separately.

The pr was also not important in any way. If there is stuff that needs to be addressed, it should be done in the particular pr and not be merged eagerly.

@bkchr
Copy link
Member

bkchr commented Nov 28, 2020

I approved the stuff because I expected that these changes are addresses before it gets merged.

@ordian
Copy link
Member

ordian commented Nov 28, 2020

I agree in general, but this PR has been open for a month now and the burden for resolving merge conflicts grows each day it is open.

@drahnr
Copy link
Contributor Author

drahnr commented Nov 28, 2020

Going to address these on Monday, I generally agree that we should resolve them all before merging (especially test related TODOs).

clearloop added a commit to patractlabs/substrate that referenced this pull request Dec 1, 2020
* CI: build docs after test; publish docs after build (paritytech#7591)

docs time test/build success on master pub

* node-template: add aura to light block import pipeline (paritytech#7595)

added aura to block import pipeline

* Fix notifications sometimes not being sent (paritytech#7594)

* Fix notifications sometimes not being sent

* Add comment

* Bump rpassword from 4.0.5 to 5.0.0 (paritytech#7597)

Bumps [rpassword](https://github.com/conradkleinespel/rpassword) from 4.0.5 to 5.0.0.
- [Release notes](https://github.com/conradkleinespel/rpassword/releases)
- [Commits](conradkleinespel/rpassword@v4.0.5...v5.0.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* remove std feature flags for assert macros (paritytech#7600)

* remove std feature flags for assert macros

* re-add note about availability in no_std envs

* Add small header cache (paritytech#7516)

* Remove header query

* Header cache

* Fix potential race issue

* Simplify status query

* Inform sync explicitly about new best block (paritytech#7604)

* Inform sync explicitly about new best block

Instead of "fishing" the new best block out of the processed blocks, we
now tell sync directly that there is a new best block. It also makes
sure that we update the corresponding sync handshake to the new best
block. This is required for parachains as they first import blocks and
declare the new best block after being made aware of it by the relay chain.

* Adds test

* Make sure async stuff had time to run

* Bump directories from 2.0.2 to 3.0.1 (paritytech#7609)

Bumps [directories](https://github.com/soc/directories-rs) from 2.0.2 to 3.0.1.
- [Release notes](https://github.com/soc/directories-rs/releases)
- [Commits](https://github.com/soc/directories-rs/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Remove `RpcMetrics` weirdness (paritytech#7608)

* Remove `RpcMetrics` weirdness

The metrics was returning an error when prometheus was not given. This
was a really weird setup, especially when compared to all other metrics
that just do nothing if there is no registry.

* Fix browser build

* Upgrade to libp2p-0.31. (paritytech#7606)

* Upgrade to libp2p-0.31.

* Address line width.

* Add generous incoming connection limit.

* Remove old noise configuration.

* Add Key Subcommand to node-template (paritytech#7615)

* Forward storage changes in manual seal (paritytech#7614)

This prevents nodes from executing the same block 2 times.

* chore/error: remove from str conversion and add deprecation notificat… (paritytech#7472)

* chore/error: remove from str conversion and add deprecation notifications

* fixup changes

* fix test looking for gone ::Msg variant

* another test fix

* one is duplicate, the other is not, so duplicates reported are n-1

* darn spaces

Co-authored-by: Andronik Ordian <write@reusable.software>

* remove pointless doc comments of error variants without any value

* low hanging fruits (for a tall person)

* moar error type variants

* avoid the storage modules for now

They are in need of a refactor, and the pain is rather large
removing all String error and DefaultError occurences.

* chore remove pointless error generic

* fix test for mocks, add a bunch of non_exhaustive

* max line width

* test fixes due to error changes

* fin

* error outputs... again

* undo stderr adjustments

* Update client/consensus/slots/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* remove closure clutter

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* more error types

* introduce ApiError

* extract Mock error

* ApiError refactor

* even more error types

* the last for now

* chore unused deps

* another extraction

* reduce should panic, due to extended error messages

* error test happiness

* shift error lines by one

* doc tests

* white space

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Into -> From

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* remove pointless codec

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* avoid pointless self import

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

Co-authored-by: Bernhard Schuster <bernhard@parity.io>
Co-authored-by: Andronik Ordian <write@reusable.software>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* network: don't force send block announcements (paritytech#7601)

* Change TRACING_SET to static (paritytech#7607)

* change TRACING_SET to static

* Update primitives/io/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* modify test with nested spans

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* sc-network: Log outgoing notifications too (paritytech#7624)

* Log outgoing notifications too

* Update client/network/src/protocol/generic_proto/handler.rs

Co-authored-by: Max Inden <mail@max-inden.de>

Co-authored-by: Addie Wagenknecht <addie@nortd.com>
Co-authored-by: Max Inden <mail@max-inden.de>

* Bump console_log from 0.1.2 to 0.2.0 (paritytech#7623)

Bumps [console_log](https://github.com/iamcodemaker/console_log) from 0.1.2 to 0.2.0.
- [Release notes](https://github.com/iamcodemaker/console_log/releases)
- [Commits](https://github.com/iamcodemaker/console_log/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* `sudo_as` should return a result (paritytech#7620)

* Fix wrong value put for pending_opening (paritytech#7633)

* Fix wrong value put for pending_opening

* Oops, didn't even try compiling it

* Rename pallet trait `Trait` to `Config` (paritytech#7599)

* rename Trait to Config

* add test asserting using Trait is still valid.

* fix ui tests

* resolve unresolved error nits of paritytech#7617 (paritytech#7631)

* handle executor should_panic test better

* Revert "reduce should panic, due to extended error messages"

This reverts commit c080594.

* remove excessive constraints

* remove duplicate documentation messages for error variants

* reduce T: constraints to the abs minimum

* whoops

* fewer bounds again

Co-authored-by: Bernhard Schuster <bernhard@parity.io>

* Fix bad state transition with DisabledPendingEnable+OpenDesiredByRemote (paritytech#7638)

* Renames of `Trait` to `Config` in README.md, weight templates and few minor ones (paritytech#7636)

* manual rename

* renamse in README.md

* fix template

* Fix CI Link Check (paritytech#7639)

* fix trigger fingers

* more

* Update frame/example-offchain-worker/README.md

Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>

* Fix cargo clippy warning in peerset. (paritytech#7641)

* Fix cargo clippy warning in peerset.

* Update client/peerset/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>

Co-authored-by: Denis Pisarev <denis.pisarev@parity.io>
Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alexander Popiak <alexander.popiak@parity.io>
Co-authored-by: Arkadiy Paronyan <arkady.paronyan@gmail.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
Co-authored-by: Benjamin Kampmann <ben@gnunicorn.org>
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
Co-authored-by: Bernhard Schuster <bernhard@parity.io>
Co-authored-by: Andronik Ordian <write@reusable.software>
Co-authored-by: Andrew Plaza <aplaza@liquidthink.net>
Co-authored-by: Addie Wagenknecht <addie@nortd.com>
Co-authored-by: Max Inden <mail@max-inden.de>
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: jolestar <jolestar@gmail.com>
darkfriend77 pushed a commit to mogwaicoin/substrate that referenced this pull request Jan 11, 2021
paritytech#7472)

* chore/error: remove from str conversion and add deprecation notifications

* fixup changes

* fix test looking for gone ::Msg variant

* another test fix

* one is duplicate, the other is not, so duplicates reported are n-1

* darn spaces

Co-authored-by: Andronik Ordian <write@reusable.software>

* remove pointless doc comments of error variants without any value

* low hanging fruits (for a tall person)

* moar error type variants

* avoid the storage modules for now

They are in need of a refactor, and the pain is rather large
removing all String error and DefaultError occurences.

* chore remove pointless error generic

* fix test for mocks, add a bunch of non_exhaustive

* max line width

* test fixes due to error changes

* fin

* error outputs... again

* undo stderr adjustments

* Update client/consensus/slots/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* remove closure clutter

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* more error types

* introduce ApiError

* extract Mock error

* ApiError refactor

* even more error types

* the last for now

* chore unused deps

* another extraction

* reduce should panic, due to extended error messages

* error test happiness

* shift error lines by one

* doc tests

* white space

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Into -> From

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* remove pointless codec

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* avoid pointless self import

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

Co-authored-by: Bernhard Schuster <bernhard@parity.io>
Co-authored-by: Andronik Ordian <write@reusable.software>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This pull request was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
B0-silent Changes should not be mentioned in any release notes C1-low PR touches the given topic and has a low impact on builders.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants