Thanks to visit codestin.com
Credit goes to github.com

Skip to content

JRuby 9.4.14.0 "wrong number of arguments" when jit.threshold=0 #9000

@jsvd

Description

@jsvd

I have yet to reproduce this outside of Logstash, but all our ci is failing on main since the upgrade to 9.4.14.0:

❯ docker run -it docker.elastic.co/logstash/logstash:9.2.0-SNAPSHOT sh -c "bin/logstash --log.level=debug -V | head -n 5"
Using bundled JDK: /usr/share/logstash/jdk
Sending Logstash logs to /usr/share/logstash/logs which is now configured via log4j2.properties
[2025-09-08T17:45:17,827][INFO ][logstash.runner          ] Log4j configuration path used is: /usr/share/logstash/config/log4j2.properties
logstash 9.2.0
jruby 9.4.14.0 (3.1.7) 2025-08-28 ddda6d5992 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [aarch64-linux]
java 21.0.8 (Eclipse Adoptium)

When forcing jit:

❯ docker run -e LS_JAVA_OPTS="-Djruby.jit.threshold=0" -it docker.elastic.co/logstash/logstash:9.2.0-SNAPSHOT sh -c "bin/logstash --log.level=debug -V"
Using bundled JDK: /usr/share/logstash/jdk
[FATAL] 2025-09-08 17:45:52.862 [main] Logstash - Logstash stopped processing because of an error: (ArgumentError) wrong number of arguments (given 2, expected 1)
org.jruby.exceptions.ArgumentError: (ArgumentError) wrong number of arguments (given 2, expected 1)
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.ast.parser.parse(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/ast/parser.rb:16) ~[?:?]
        at usr.share.logstash.vendor.jruby.lib.ruby.stdlib.forwardable.parse(/usr/share/logstash/vendor/jruby/lib/ruby/stdlib/forwardable.rb:238) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.ast.pattern.to_ast(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/ast/pattern.rb:91) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.equality_map.fetch(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/equality_map.rb:43) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.ast.pattern.to_ast(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/ast/pattern.rb:90) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.ast.pattern.compile(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/ast/pattern.rb:81) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.regexp_based.initialize(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/regexp_based.rb:19) ~[?:?]
        at org.jruby.RubyClass.new(org/jruby/RubyClass.java:950) ~[jruby.jar:?]                                                                                                                     at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.pattern.new(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/pattern.rb:59) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.equality_map.fetch(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/equality_map.rb:43) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.pattern.new(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann/pattern.rb:59) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.mustermann_minus_3_dot_0_dot_4.lib.mustermann.new(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/mustermann-3.0.4/lib/mustermann.rb:68) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.sinatra_minus_4_dot_1_dot_1.lib.sinatra.base.compile(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/sinatra-4.1.1/lib/sinatra/base.rb:1814) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.sinatra_minus_4_dot_1_dot_1.lib.sinatra.base.compile!(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/sinatra-4.1.1/lib/sinatra/base.rb:1801) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.sinatra_minus_4_dot_1_dot_1.lib.sinatra.base.route(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/sinatra-4.1.1/lib/sinatra/base.rb:1776) ~[?:?]
        at usr.share.logstash.vendor.bundle.jruby.$3_dot_1_dot_0.gems.sinatra_minus_4_dot_1_dot_1.lib.sinatra.base.get(/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/sinatra-4.1.1/lib/sinatra/base.rb:1531) ~[?:?]
        at RUBY.<class:Node>(/usr/share/logstash/logstash-core/lib/logstash/api/modules/node.rb:29) ~[?:?]
        at RUBY.<module:Modules>(/usr/share/logstash/logstash-core/lib/logstash/api/modules/node.rb:24) ~[?:?]
        at RUBY.<module:Api>(/usr/share/logstash/logstash-core/lib/logstash/api/modules/node.rb:23) ~[?:?]
        at RUBY.<module:LogStash>(/usr/share/logstash/logstash-core/lib/logstash/api/modules/node.rb:22) ~[?:?]
        at RUBY.<main>(/usr/share/logstash/logstash-core/lib/logstash/api/modules/node.rb:21) ~[?:?]
        at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1187) ~[jruby.jar:?]                                                                                                              at usr.share.logstash.vendor.jruby.lib.ruby.stdlib.rubygems.core_ext.kernel_require.require(/usr/share/logstash/vendor/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:144) ~[?:?]                                                                                                                                                                                            at RUBY.<main>(/usr/share/logstash/logstash-core/lib/logstash/api/rack_app.rb:22) ~[?:?]
        at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1187) ~[jruby.jar:?]
        at usr.share.logstash.vendor.jruby.lib.ruby.stdlib.rubygems.core_ext.kernel_require.require(/usr/share/logstash/vendor/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:144) ~[?:?]                                                                                                                                                                                            at RUBY.<main>(/usr/share/logstash/logstash-core/lib/logstash/webserver.rb:18) ~[?:?]
        at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1187) ~[jruby.jar:?]
        at usr.share.logstash.vendor.jruby.lib.ruby.stdlib.rubygems.core_ext.kernel_require.require(/usr/share/logstash/vendor/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:144) ~[?:?]                                                                                                                                                                                            at RUBY.<main>(/usr/share/logstash/logstash-core/lib/logstash/agent.rb:33) ~[?:?]
        at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1187) ~[jruby.jar:?]                                                                                                              at usr.share.logstash.vendor.jruby.lib.ruby.stdlib.rubygems.core_ext.kernel_require.require(/usr/share/logstash/vendor/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:144) ~[?:?]
        at RUBY.<main>(/usr/share/logstash/logstash-core/lib/logstash/runner.rb:42) ~[?:?]
        at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1187) ~[jruby.jar:?]
        at usr.share.logstash.vendor.jruby.lib.ruby.stdlib.rubygems.core_ext.kernel_require.require(/usr/share/logstash/vendor/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:144) ~[?:?]
        at usr.share.logstash.lib.bootstrap.environment.<main>(/usr/share/logstash/lib/bootstrap/environment.rb:88) ~[?:?]

I'll work tomorrow on a smaller reproducer, but since this reproduces exclusively by jit.threshold=0 I though I'd alert asap.

The environment is:

[2025-09-08T17:46:46,937][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"9.2.0", "jruby.version"=>"jruby 9.4.14.0 (3.1.7) 2025-08-28 ddda6d5992 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [aarch64-linux]"}
[2025-09-08T17:46:46,938][INFO ][logstash.runner          ] JVM bootstrap flags: [-Xms1g, -Xmx1g, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djruby.compile.invokedynamic=true, -XX:+HeapDumpOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dlog4j2.isThreadContextMapInheritable=true, -Dls.cgroup.cpuacct.path.override=/, -Dls.cgroup.cpu.path.override=/, -Djruby.regexp.interruptible=true, -Djdk.io.File.enableADS=true, --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED, --add-opens=java.base/java.security=ALL-UNNAMED, --add-opens=java.base/java.io=ALL-UNNAMED, --add-opens=java.base/java.nio.channels=ALL-UNNAMED, --add-opens=java.base/sun.nio.ch=ALL-UNNAMED, --add-opens=java.management/sun.management=ALL-UNNAMED, -Dio.netty.allocator.maxOrder=11]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions