Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ruby restclient timeout does not work properly, it throws exception after double the defined timeout

Noticed that Ruby RestClient does not follow the given timeout parameter precisely, however it works by doubling the current timeout setting.

Has anyone noticed the same? attached a test code example below.

As httpbin.org is having max delay 10, we need to use small timeouts:

  def test_timeout(delay)
    start = Time.now.to_i
    RestClient::Request.execute(url:     "http://httpbin.org/delay/10",
                                method:  'GET',
                                timeout: delay)
    return 0
  rescue RestClient::Exceptions::ReadTimeout => exception
    endtime = Time.now.to_i
    return endtime - start
  end

pry(main)> test_timeout 1
RestClient.get "http://httpbin.org/delay/10", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate"

=> 3

pry(main)> test_timeout 5
RestClient.get "http://httpbin.org/delay/10", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate"

=> 10

Using Ruby RestClient 2.0.2 and also tested with 2.1.0.rc1

Also tested with read_timeout and open_timeout parameters, which had the same

  def test_timeout(delay)
    start = Time.now.to_i
    RestClient::Request.execute(url: "http://httpbin.org/delay/10",
                                method: 'GET',
                                open_timeout: 1,
                                read_timeout: delay)
    return 0
  rescue RestClient::Exceptions::ReadTimeout => exception
    endtime = Time.now.to_i
    return endtime - start
  end

pry(main)> test_timeout 2
RestClient.get "http://httpbin.org/delay/10", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate"

=> 4
pry(main)> test_timeout 3
RestClient.get "http://httpbin.org/delay/10", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate"

=> 6
like image 752
jaluke Avatar asked Sep 17 '26 01:09

jaluke


1 Answers

As a summary,

its a wanted feature on Net::HTTP library. Ruby 2.5 should have a parameter to over ride the feature.

More information from https://engineering.wework.com/ruby-users-be-wary-of-net-http-f284747288b2

Thank you all regarding you replies!

like image 56
jaluke Avatar answered Sep 22 '26 09:09

jaluke



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!