mint icon indicating copy to clipboard operation
mint copied to clipboard

Error messaging context

Open bradhanks opened this issue 1 year ago • 7 comments

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.

bradhanks avatar Jan 28 '24 13:01 bradhanks

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.

whatyouhide avatar Jan 29 '24 08:01 whatyouhide

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.

bradhanks avatar Jan 30 '24 18:01 bradhanks

%{
  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?

whatyouhide avatar Jan 30 '24 20:01 whatyouhide

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}.

ericmj avatar Feb 12 '24 22:02 ericmj

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.

bradhanks avatar Feb 13 '24 08:02 bradhanks

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 🙃

whatyouhide avatar Feb 13 '24 10:02 whatyouhide

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.

bradhanks avatar Feb 13 '24 11:02 bradhanks