Skip to content

Do OpenTimeout, ReadTimeout & WriteTimeout need to inherit from Timeout::Error? #24

@jjb

Description

@jjb

I believe the last use of the timeout() method was removed in 2008 76c2840

I believe the only use of the timeout library is OpenTimeout, ReadTimeout & WriteTimeout inheriting from Timeout::Error.

The test suite does not enforce this - I made them inherit from StandardError and the test suite still passes (although. n.b., it still passes with ReadTimeout removed, so maybe coverage isn't great).

I believe this was done for historical reasons. in the above-mentioned commit removing use of timeout, explicit raising of Timeout::Error (nee Timeout::TimeoutError) was added. After that, the ancestry was maintained when other changes were made. interesting commits: 43901df c0b1e4b 8e671df

I imagine this was done so that calling code which was expecting to rescue Timeout::Error wouldn't break.

Here's an example of client code rescuing Timeout::Error. It also rescues Net:ReadTimeout https://github.com/ruby/net-http/blob/705e7c0f65af0680bc3970063cbddf7889943184/lib/net/http.rb#L2358-L2362 - i'm guessing it was initially only Timeout::Error and the redundancy was added at some point

Would it be a good idea to phase out this dependency? My naive thinking is it could be fairly aggressive and land with ruby 3.4, since the high impact dependencies (ruby/net-*) are controllable. And also the change could be called out in release notes.

(sorry if this is already documented/discussed elsewhere)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions