Skip to content
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

Error messaging context #422

Open
bradhanks opened this issue Jan 28, 2024 · 7 comments
Open

Error messaging context #422

bradhanks opened this issue Jan 28, 2024 · 7 comments

Comments

@bradhanks
Copy link

I'm curious if it would be useful to add context to current error reasons.

For example, :closed in HTTP/2, specifying whether it was due to a connection state check or an unexpected closure during data transmission. I'm just reading through the code bc it's a foundational package and had that thought.

Also wondering if PR edits are welcome on stuff like inconsistent use of alias vs. full module name. Obviously not a big deal but I'm going through it so I thought I might as well ask if it's useful.

@whatyouhide
Copy link
Contributor

Hey @bradhanks 👋

Also wondering if PR edits are welcome on stuff like inconsistent use of alias vs. full module name. Obviously not a big deal but I'm going through it so I thought I might as well ask if it's useful.

These are generally not very useful contributions, as usually there is a reason why we went with aliases vs full names. It's subjective anyways so hard to find a definitive best option 😉

As for context in errors, you're welcome to propose a concrete non-breaking API to add context, I'd love to see how that looks like.

@bradhanks
Copy link
Author

One idea would be to delegate wrap_error/1 to /2 with an empty map and
add:

%{file: ENV.file,
fun: ENV.function,
line: ENV.line}

as a second argument.

Then delegate format_error/1 and format_reason/1 to /2 and include the context in the message.

@whatyouhide
Copy link
Contributor

%{
  file: __ENV__.file,
  fun: __ENV__.function,
  line: __ENV__.line
}

I don't see how this ☝️ is going to help. You'd need to dig into Mint's source code to understand why a connection was :closed. I was thinking more of something like adding context to :closed by having additional fields in Mint.HTTPError that can provide context on why an error happened, not just where?

@ericmj
Copy link
Member

ericmj commented Feb 12, 2024

Seconding what @whatyouhide said. I think we can add additional context to determine the reason for a closed connection but I don't think adding source location metadata is the right way to do it.

A good error message should not require reading the source code to understand it. It also cannot be used to programmatically make decisions based on the error reason. I would rather add fields to Mint.HTTPError or make it a tuple for example: {:closed, :send_failed | :recv_failed | :remote_closed | :goaway | :invalid_frame}.

@bradhanks
Copy link
Author

Seconding what @whatyouhide said. I think we can add additional context to determine the reason for a closed connection but I don't think adding source location metadata is the right way to do it.

A good error message should not require reading the source code to understand it. It also cannot be used to programmatically make decisions based on the error reason. I would rather add fields to Mint.HTTPError or make it a tuple for example: {:closed, :send_failed | :recv_failed | :remote_closed | :goaway | :invalid_frame}.

That makes a lot of sense. I think I had myself in mind as I was working through the different pathways. :)

I plan on going through it some more this week.

@whatyouhide
Copy link
Contributor

A tuple could be seen as a breaking change though, so let's see if we can go with an additional field in the exception first 🙃

@bradhanks
Copy link
Author

A tuple could be seen as a breaking change though, so let's see if we can go with an additional field in the exception first 🙃

open to any guidance and very much appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants