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

Promise.zip hangs on rejected promise in chain #870

Open
wjordan opened this issue May 8, 2020 · 0 comments
Open

Promise.zip hangs on rejected promise in chain #870

wjordan opened this issue May 8, 2020 · 0 comments

Comments

@wjordan
Copy link
Contributor

wjordan commented May 8, 2020

Promise.zip seems to hang with any rejected promise in its collection for large enough collections (several hundred items).

Here is a minimal repro:

1.upto(1000).map do |n|
  puts n
  promises = Array.new(n) do |i|
    Concurrent::Promise.new do
      raise 'rejected' if i.zero?
      '.'
    end
  end
  all = Concurrent::Promise.zip(*promises).execute
  all.wait(1)
  raise 'failed' if all.state == :unscheduled
end

Removing the rejected promise (e.g., removing the raise 'rejected' if i.zero? line) causes the code to run without issue for higher n as expected.

Tested on concurrent-ruby version 1.1.6, Ubuntu 18.04.4, with various rubies installed via rbenv:

  • MRI 2.7.1 (fails at n = 340 both with and without concurrent-ruby-ext)
  • MRI 2.6.0 (fails at n = 261)
  • JRuby 9.2.11.1 (fails at n usually somewhere between 100-500)
  • TruffleRuby 20.0.0 (fails randomly with [ruby] WARNING StackOverflowError, sometimes handling n > 10000, other times failing at n = 50)

Using the newer Promises APIs (e.g., replacing Concurrent::Promise.new with Concurrent::Promises.future and Concurrent::Promises.zip with Concurrent::Promises) seems to work without any issues for much higher n. This still seems like a valid bug for as long the original Promise APIs are still available and bugs are still being fixed in them.

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

No branches or pull requests

1 participant