oracle / truffleruby

A high performance implementation of the Ruby programming language, built on GraalVM.
https://www.graalvm.org/ruby/
Other
3.01k stars 184 forks source link

Faraday test suit exits with "native function not supported at this point" #2090

Closed gogainda closed 3 years ago

gogainda commented 4 years ago
git clone git@github.com:lostisland/faraday.git
bundle install
bundle exec rake

Tests passed but in the end I see this exception:

Randomized with seed 21770

truffleruby: an exception escaped out of the interpreter - this is an implementation bug
org.graalvm.polyglot.PolyglotException: java.lang.AssertionError: native function not supported at this point: com.oracle.truffle.llvm.runtime.LLVMFunctionCode$NativeFunction@13bb1c898
    at com.oracle.truffle.llvm.runtime.interop.LLVMForeignCallNode.getCallTarget(LLVMForeignCallNode.java:248)
    at com.oracle.truffle.llvm.runtime.interop.LLVMForeignCallNode.<init>(LLVMForeignCallNode.java:202)
    at com.oracle.truffle.llvm.runtime.LLVMFunctionDescriptor.getForeignCallTarget(LLVMFunctionDescriptor.java:86)
    at com.oracle.truffle.llvm.runtime.LLVMFunctionDescriptorGen$InteropLibraryExports$Cached.executeAndSpecialize(LLVMFunctionDescriptorGen.java:147)
    at com.oracle.truffle.llvm.runtime.LLVMFunctionDescriptorGen$InteropLibraryExports$Cached.execute(LLVMFunctionDescriptorGen.java:120)
    at com.oracle.truffle.llvm.runtime.pointer.ManagedPointerLibraries.execute(ManagedPointerLibraries.java:77)
    at com.oracle.truffle.llvm.runtime.pointer.ManagedPointerLibrariesGen$InteropLibraryExports$Cached.execute(ManagedPointerLibrariesGen.java:810)
    at org.truffleruby.interop.InteropNodes.execute(InteropNodes.java:86)
    at org.truffleruby.interop.InteropNodes$ExecuteNode.executeForeignCached(InteropNodes.java:143)
    at org.truffleruby.interop.InteropNodesFactory$ExecuteNodeFactory$ExecuteNodeGen.executeAndSpecialize(InteropNodesFactory.java:633)
    at org.truffleruby.interop.InteropNodesFactory$ExecuteNodeFactory$ExecuteNodeGen.execute(InteropNodesFactory.java:538)
    at org.truffleruby.interop.OutgoingForeignCallNode.call(OutgoingForeignCallNode.java:153)
    at org.truffleruby.interop.OutgoingForeignCallNodeGen.executeAndSpecialize(OutgoingForeignCallNodeGen.java:677)
    at org.truffleruby.interop.OutgoingForeignCallNodeGen.executeCall(OutgoingForeignCallNodeGen.java:365)
    at org.truffleruby.language.dispatch.CachedForeignDispatchNode.doDispatch(CachedForeignDispatchNode.java:72)
    at org.truffleruby.language.dispatch.CachedForeignDispatchNode.executeDispatch(CachedForeignDispatchNode.java:58)
    at org.truffleruby.language.dispatch.UnresolvedDispatchNode.executeDispatch(UnresolvedDispatchNode.java:134)
    at org.truffleruby.language.dispatch.DispatchHeadNode.dispatch(DispatchHeadNode.java:44)
    at org.truffleruby.language.dispatch.RubyCallNode.executeWithArgumentsEvaluated(RubyCallNode.java:118)
    at org.truffleruby.language.dispatch.RubyCallNode.execute(RubyCallNode.java:106)
    at org.truffleruby.language.methods.ExceptionTranslatingNode.execute(ExceptionTranslatingNode.java:33)
    at org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:36)
    at org.truffleruby.language.methods.CatchForLambdaNode.execute(CatchForLambdaNode.java:52)
    at org.truffleruby.language.RubyRootNode.execute(RubyRootNode.java:61)
    at <llvm> rb_thread_call_without_gvl(call.c:104:0)
    at <llvm> perform_request(../../.rubies/truffleruby-dev/lib/gems/gems/patron-0.13.3/ext/patron/session_ext.c:814:29566)
    at <llvm> rb_ensure(exception.c:68:0)
    at <llvm> session_handle_request(../../.rubies/truffleruby-dev/lib/gems/gems/patron-0.13.3/ext/patron/session_ext.c:889:31821)
    at <ruby> WebMock::HttpLibAdapters::PatronAdapter::WebMockPatronSession#handle_request(../../.rubies/truffleruby-dev/lib/gems/gems/webmock-3.8.3/lib/webmock/http_lib_adapters/patron_adapter.rb:31:1184-1208)
    at <ruby> Patron::Session#request(../../.rubies/truffleruby-dev/lib/gems/gems/patron-0.13.3/lib/patron/session.rb:330:13278-13302)
    at <ruby> block in Faraday::Adapter::Patron#call(lib/faraday/adapter/patron.rb:32-33:796-915)
    at <ruby> Faraday::Adapter#connection(lib/faraday/adapter.rb:61:1959-1974)
    at <ruby> Faraday::Adapter::Patron#call(lib/faraday/adapter/patron.rb:29:678-724)
    at <ruby> Faraday::Response::Middleware#call(lib/faraday/response.rb:11:262-312)
    at <ruby> Faraday::Request::UrlEncoded#call(lib/faraday/request/url_encoded.rb:25:729-749)
    at <ruby> Faraday::Request::Multipart#call(lib/faraday/request/multipart.rb:30:919-939)
    at <ruby> Faraday::RackBuilder#build_response(lib/faraday/rack_builder.rb:154:4020-4065)
    at <ruby> Faraday::Connection#run_request(lib/faraday/connection.rb:492:16123-16165)
    at <ruby> Faraday::Connection#head(/Users/novoi/tmp/faraday/lib/faraday/connection.rb:198:253-312)
    at <ruby> block (3 levels) in Object#<top (required)>(spec/support/shared_examples/request_method.rb:37:1261-1368)
    at <ruby> RSpec::Matchers::BuiltIn::RaiseError#matches?(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/raise_error.rb:52:1617-1643)
    at <ruby> block in RSpec::Expectations::PositiveExpectationHandler.handle_matcher(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-expectations-3.9.2/lib/rspec/expectations/handler.rb:50:1755-1868)
    at <ruby> RSpec::Expectations::ExpectationHelper.with_matcher(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-expectations-3.9.2/lib/rspec/expectations/handler.rb:27:846-866)
    at <ruby> RSpec::Expectations::PositiveExpectationHandler.handle_matcher(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-expectations-3.9.2/lib/rspec/expectations/handler.rb:48:1567-1649)
    at <ruby> RSpec::Expectations::ExpectationTarget::InstanceMethods#to(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-expectations-3.9.2/lib/rspec/expectations/expectation_target.rb:65:2350-2455)
    at <ruby> RSpec::Expectations::BlockExpectationTarget#to(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-expectations-3.9.2/lib/rspec/expectations/expectation_target.rb:101:3811-3823)
    at <ruby> block (2 levels) in Object#<top (required)>(spec/support/shared_examples/request_method.rb:37:1261-1368)
    at <ruby> block in RSpec::Core::Example#run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example.rb:257:9781-9856)
    at <ruby> block in RSpec::Core::Example#with_around_and_singleton_context_hooks(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example.rb:503:17976-18018)
    at <ruby> block in RSpec::Core::Example#with_around_example_hooks(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example.rb:460:16608-16659)
    at <ruby> block in RSpec::Core::Hooks::HookCollections#run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:481:20552-20637)
    at <ruby> RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:619:25415-25521)
    at <ruby> RSpec::Core::Hooks::HookCollections#run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:481:20552-20637)
    at <ruby> RSpec::Core::Example#with_around_example_hooks(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example.rb:460:16608-16659)
    at <ruby> RSpec::Core::Example#with_around_and_singleton_context_hooks(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example.rb:503:17976-18018)
    at <ruby> RSpec::Core::Example#run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example.rb:254:9671-9724)
    at <ruby> block in RSpec::Core::ExampleGroup.run_examples(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:644:24287-24339)
    at <ruby> RSpec::Core::ExampleGroup.run_examples(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:640:24074-24140)
    at <ruby> RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:606:22643-22698)
    at <ruby> block in RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:607:22700-22809)
    at <ruby> RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:607:22700-22809)
    at <ruby> block in RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:607:22700-22809)
    at <ruby> RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:607:22700-22809)
    at <ruby> block in RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:607:22700-22809)
    at <ruby> RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:607:22700-22809)
    at <ruby> block in RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:607:22700-22809)
    at <ruby> RSpec::Core::ExampleGroup.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:607:22700-22809)
    at <ruby> block (3 levels) in RSpec::Core::Runner#run_specs(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:121:4350-4408)
    at <ruby> block (2 levels) in RSpec::Core::Runner#run_specs(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:121:4350-4408)
    at <ruby> RSpec::Core::Configuration#with_suite_hooks(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:2058:76544-76558)
    at <ruby> block in RSpec::Core::Runner#run_specs(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:116:4161-4204)
    at <ruby> RSpec::Core::Reporter#report(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/reporter.rb:74:2431-2448)
    at <ruby> RSpec::Core::Runner#run_specs(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:115:4082-4159)
    at <ruby> RSpec::Core::Runner#run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:89:3234-3288)
    at <ruby> RSpec::Core::Runner.run(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:71:2689-2724)
    at <ruby> RSpec::Core::Runner.invoke(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:45:1686-1734)
    at <ruby> <main>(../../.rubies/truffleruby-dev/lib/gems/gems/rspec-core-3.9.2/exe/rspec:4:42-67)
    at org.graalvm.polyglot.Value.execute(Value.java:456)
    at org.truffleruby.launcher.RubyLauncher.runRubyMain(RubyLauncher.java:227)
    at org.truffleruby.launcher.RubyLauncher.launch(RubyLauncher.java:123)
    at org.graalvm.launcher.AbstractLanguageLauncher.launch(AbstractLanguageLauncher.java:121)
    at org.graalvm.launcher.AbstractLanguageLauncher.launch(AbstractLanguageLauncher.java:70)
    at org.truffleruby.launcher.RubyLauncher.main(RubyLauncher.java:38)
Original Internal Error: 
java.lang.AssertionError: native function not supported at this point: com.oracle.truffle.llvm.runtime.LLVMFunctionCode$NativeFunction@13bb1c898
gogainda commented 4 years ago

Full log is here

chrisseaton commented 4 years ago

I think the issue is that we haven't considered someone using rb_thread_call_without_gvl to call a native function. We need to implement support for that.

https://github.com/toland/patron/blob/v0.13.3/ext/patron/session_ext.c#L814-L817

chrisseaton commented 4 years ago

I tried to make a spec for this in https://github.com/oracle/truffleruby/compare/master...Shopify:thread_call_without_gvl-bug but I can't figure out how to make the function native. I tried functions which I think should be native and close-enough to identity such as labs but then I can't reproduce.

eregon commented 3 years ago

@chrisseaton I can't see any diff on that link, could you check it?

chrisseaton commented 3 years ago

Hmm sorry looks like I 'tidied up' this branch and deleted it. It's not in my reference log either. Sorry about that.

eregon commented 3 years ago

labs() is intrinsified by Sulong so that's why it doesn't reproduce: https://github.com/oracle/graal/blob/505ac8d5fce0f00b6d4d30ea5c6ea9ea1fa97c09/sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/nodes/intrinsics/c/LLVMCMathsIntrinsics.java#L272

gogainda commented 3 years ago

I run with latest truffleruby https://github.com/lostisland/faraday/runs/1248204647?check_suite_focus=true It's not clear what's happening there bc logs are not updating, but I believe we still have a problem with faraday

gogainda commented 3 years ago

@eregon

eregon commented 3 years ago

Could you file a separate issue? It appears some of the specs are hanging, I think I saw it locally too for one of the adapters.

gogainda commented 3 years ago

done: https://github.com/oracle/truffleruby/issues/2122