Skip to content

`io_read': wrong number of arguments (given 4, expected 3) (ArgumentError) #8

@EdwardDiehl

Description

@EdwardDiehl
# fibers_test.rb

require 'bundler/inline'

gemfile do
  source 'https://rubygems.org/'
  gem 'fiber_scheduler', '~> 0.13.0'
end

require 'net/http'
require 'fiber_scheduler'

require 'benchmark'

Benchmark.realtime do
  Thread.new do # in this thread, we'll have non-blocking fibers
    Fiber.set_scheduler(FiberScheduler.new)

    (1..3).each do |user_id|
      Fiber.schedule do
        t = Time.now
        Net::HTTP.get('reqres.in', "/api/users/#{user_id}?delay=2")
        puts 'User %s: finished in %.3f' % [user_id, Time.now - t]
      end
    end
  end.join
end

This is the result of running the script

$ ruby ./fibers_test.rb 
#<Thread:0x00007fefaee35c60 ./fibers_test.rb:14 run> terminated with exception (report_on_exception is true):
/home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:175:in `io_read': Failed to open TCP connection to reqres.in:80 (wrong number of arguments (given 4, expected 3)) (ArgumentError)
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:193:in `each'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:193:in `block (2 levels) in lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:192:in `open'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:192:in `block in lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:188:in `synchronize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:188:in `lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:236:in `each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:116:in `block in each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:115:in `each'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:115:in `each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:102:in `getaddresses'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:51:in `getaddresses'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:164:in `address_resolve'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `open'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `block in connect'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler/timeouts.rb:55:in `timeout'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:188:in `timeout_after'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/timeout.rb:178:in `timeout'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1269:in `connect'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1248:in `do_start'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1237:in `start'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:474:in `get_response'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:461:in `get'
	from ./fibers_test.rb:20:in `block (4 levels) in <main>'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:240:in `block in fiber'
/home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:175:in `io_read': wrong number of arguments (given 4, expected 3) (ArgumentError)
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:193:in `each'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:193:in `block (2 levels) in lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:192:in `open'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:192:in `block in lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:188:in `synchronize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:188:in `lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:236:in `each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:116:in `block in each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:115:in `each'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:115:in `each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:102:in `getaddresses'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:51:in `getaddresses'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:164:in `address_resolve'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `open'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `block in connect'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler/timeouts.rb:55:in `timeout'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:188:in `timeout_after'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/timeout.rb:178:in `timeout'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1269:in `connect'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1248:in `do_start'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1237:in `start'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:474:in `get_response'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:461:in `get'
	from ./fibers_test.rb:20:in `block (4 levels) in <main>'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:240:in `block in fiber'
/home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:175:in `io_read': Failed to open TCP connection to reqres.in:80 (wrong number of arguments (given 4, expected 3)) (ArgumentError)
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:193:in `each'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:193:in `block (2 levels) in lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:192:in `open'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:192:in `block in lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:188:in `synchronize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:188:in `lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:236:in `each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:116:in `block in each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:115:in `each'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:115:in `each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:102:in `getaddresses'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:51:in `getaddresses'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:164:in `address_resolve'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `open'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `block in connect'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler/timeouts.rb:55:in `timeout'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:188:in `timeout_after'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/timeout.rb:178:in `timeout'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1269:in `connect'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1248:in `do_start'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1237:in `start'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:474:in `get_response'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:461:in `get'
	from ./fibers_test.rb:20:in `block (4 levels) in <main>'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:240:in `block in fiber'
/home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:175:in `io_read': wrong number of arguments (given 4, expected 3) (ArgumentError)
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:193:in `each'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:193:in `block (2 levels) in lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:192:in `open'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:192:in `block in lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:188:in `synchronize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:188:in `lazy_initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:236:in `each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:116:in `block in each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:115:in `each'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:115:in `each_address'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:102:in `getaddresses'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/resolv.rb:51:in `getaddresses'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:164:in `address_resolve'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `initialize'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `open'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1271:in `block in connect'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler/timeouts.rb:55:in `timeout'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:188:in `timeout_after'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/timeout.rb:178:in `timeout'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1269:in `connect'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1248:in `do_start'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:1237:in `start'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:474:in `get_response'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/3.2.0/net/http.rb:461:in `get'
	from ./fibers_test.rb:20:in `block (4 levels) in <main>'
	from /home/username/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/fiber_scheduler-0.13.0/lib/fiber_scheduler.rb:240:in `block in fiber'
$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]

The script works fine with Async::Scheduler from async-io gem

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions