Skip to content

The grpc gem does not work yet at runtime (it installs fine) #2247

Open
@wildmaples

Description

@wildmaples

Summary by @eregon:

The grpc gem should install fine.
On macOS you might need truffleruby-dev.

At runtime, require 'grpc' works on Linux.
Using GRPC functionality does not work yet in general.


Requiring the grpc gem causes an Invalid ElementType of Vector failure. This is affecting the storefront-renderer repository's use of require "semian/grpc".

How to reproduce

irb(main):001:0> require 'grpc'

Stacktrace

The below issue is resolved by grpc/grpc#24632, but grpc did not merge that PR yet.

truffleruby: an internal exception escaped out of the interpreter,
please report it to https://github.com/oracle/truffleruby/issues.

Invalid ElementType of Vector: VariableBitWidthType (java.lang.AssertionError)
	from com.oracle.truffle.llvm.runtime.types.VectorType.setElementType(VectorType.java:80)
	from com.oracle.truffle.llvm.parser.listeners.Types.setType(Types.java:246)
	from com.oracle.truffle.llvm.parser.listeners.Types.record(Types.java:171)
	from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.passRecordToParser(LLVMScanner.java:434)
	from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.unabbreviatedRecord(LLVMScanner.java:450)
	from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.scanToOffset(LLVMScanner.java:164)
	from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.scanToEnd(LLVMScanner.java:143)
	from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.parseBitcode(LLVMScanner.java:102)
	from com.oracle.truffle.llvm.ParserDriver.parseBinary(ParserDriver.java:340)
	from com.oracle.truffle.llvm.ParserDriver.parseLibraryWithSource(ParserDriver.java:398)
	from com.oracle.truffle.llvm.ParserDriver.parseWithDependencies(ParserDriver.java:144)
	from com.oracle.truffle.llvm.ParserDriver.parseWithDependencies(ParserDriver.java:130)
	from com.oracle.truffle.llvm.ParserDriver.parse(ParserDriver.java:101)
	from com.oracle.truffle.llvm.DefaultLoader.load(DefaultLoader.java:45)
	from com.oracle.truffle.llvm.runtime.LLVMLanguage.parse(LLVMLanguage.java:480)
	from com.oracle.truffle.api.TruffleLanguage$ParsingRequest.parse(TruffleLanguage.java:848)
	from com.oracle.truffle.api.TruffleLanguage.parse(TruffleLanguage.java:1502)
	from com.oracle.truffle.api.LanguageAccessor$LanguageImpl.parse(LanguageAccessor.java:311)
	from com.oracle.truffle.polyglot.PolyglotSourceCache.parseImpl(PolyglotSourceCache.java:94)
	from com.oracle.truffle.polyglot.PolyglotSourceCache.access$300(PolyglotSourceCache.java:56)
	from com.oracle.truffle.polyglot.PolyglotSourceCache$WeakCache.lookup(PolyglotSourceCache.java:223)
	from com.oracle.truffle.polyglot.PolyglotSourceCache.parseCached(PolyglotSourceCache.java:80)
	from com.oracle.truffle.polyglot.PolyglotLanguageContext.parseCached(PolyglotLanguageContext.java:371)
	from com.oracle.truffle.polyglot.EngineAccessor$EngineImpl.parseForLanguage(EngineAccessor.java:242)
	from com.oracle.truffle.api.TruffleLanguage$Env.parseInternal(TruffleLanguage.java:2471)
	from org.truffleruby.language.loader.FeatureLoader.loadCExtLibrary(FeatureLoader.java:484)
	from org.truffleruby.language.loader.RequireNode.requireCExtension(RequireNode.java:268)
	from org.truffleruby.language.loader.RequireNode.parseAndCall(RequireNode.java:211)
	from org.truffleruby.language.loader.RequireNode.doRequire(RequireNode.java:196)
	from org.truffleruby.language.loader.RequireNode.requireConsideringAutoload(RequireNode.java:125)
	from org.truffleruby.language.loader.RequireNode.lambda$requireWithMetrics$0(RequireNode.java:78)
	from org.truffleruby.debug.MetricsProfiler.callWithMetrics(MetricsProfiler.java:40)
	from org.truffleruby.language.loader.RequireNode.requireWithMetrics(RequireNode.java:75)
	from org.truffleruby.language.loader.RequireNode.require(RequireNode.java:67)
	from org.truffleruby.language.loader.RequireNodeGen.executeRequire(RequireNodeGen.java:30)
	from org.truffleruby.core.kernel.KernelNodes$LoadFeatureNode.loadFeature(KernelNodes.java:343)
	from org.truffleruby.core.kernel.KernelNodesFactory$LoadFeatureNodeFactory$LoadFeatureNodeGen.execute(KernelNodesFactory.java:726)
	from org.truffleruby.language.control.IfElseNode.execute(IfElseNode.java:43)
	from org.truffleruby.language.control.IfElseNode.execute(IfElseNode.java:45)
	from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:36)
	from org.truffleruby.language.arguments.CheckArityNode.execute(CheckArityNode.java:41)
	from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:36)
	from org.truffleruby.language.methods.CatchForMethodNode.execute(CatchForMethodNode.java:42)
	from org.truffleruby.language.methods.ExceptionTranslatingNode.execute(ExceptionTranslatingNode.java:33)
	from org.truffleruby.language.RubyRootNode.execute(RubyRootNode.java:61)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:591)
/Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/rubygems/core_ext/kernel_require.rb:72:in `gem_original_require'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/rubygems/core_ext/kernel_require.rb:72:in `require'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/gems/gems/grpc-1.35.0/src/ruby/lib/grpc/grpc.rb:22:in `<top (required)>'
	from <internal:core> core/kernel.rb:293:in `require_relative'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/gems/gems/grpc-1.35.0/src/ruby/lib/grpc.rb:19:in `<top (required)>'
	from <internal:core> core/kernel.rb:234:in `gem_original_require'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/rubygems/core_ext/kernel_require.rb:168:in `require'
	from (irb):1:in `irb_binding'
	from <internal:core> core/kernel.rb:325:in `eval'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/workspace.rb:114:in `evaluate'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/context.rb:459:in `evaluate'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:541:in `block (2 levels) in eval_input'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:704:in `signal_status'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:538:in `block in eval_input'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/ruby-lex.rb:166:in `block (2 levels) in each_top_level_statement'
	from <internal:core> core/kernel.rb:437:in `loop'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/ruby-lex.rb:151:in `block in each_top_level_statement'
	from <internal:core> core/throw_catch.rb:36:in `catch'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/ruby-lex.rb:150:in `each_top_level_statement'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:537:in `eval_input'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:472:in `block in run'
	from <internal:core> core/throw_catch.rb:36:in `catch'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:471:in `run'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:400:in `start'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/gems/gems/irb-1.2.6/exe/irb:11:in `<top (required)>'
	from <internal:core> core/kernel.rb:400:in `load'
	from <internal:core> core/kernel.rb:400:in `load'
	from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/bin/irb:42:in `<main>'

As chatted about in our call, it seems like a C language feature that Sulong doesn't support.

Issue about compiling/installing grpc: #1982

General internal issue about grpc: GR-23874

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions