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

java.lang.NoSuchMethodError: org.jruby.RubyIO.flush()Lorg/jruby/RubyIO when using Net::HTTP with openssl on jruby 9.0.3.0 #3685

Closed
bigsur0 opened this issue Feb 18, 2016 · 6 comments

Comments

@bigsur0
Copy link
Contributor

bigsur0 commented Feb 18, 2016

Environment

  • jruby 9.0.3.0
  • Mac (and probably Linux, but will confirm)

Expected Behavior

SSL posts over Net:HTTP should work without flush error

Actual Behavior

Exception in thread "Ruby-0-Thread-4: foo.rb:208" java.lang.NoSuchMethodError: org.jruby.RubyIO.flush()Lorg/jruby/RubyIO;
 at org.jruby.ext.openssl.SSLSocket.do_syswrite(SSLSocket.java:654)
 at org.jruby.ext.openssl.SSLSocket.syswrite(SSLSocket.java:664)
 at org.jruby.ext.openssl.SSLSocket$INVOKER$i$1$0$syswrite_DBG.call(SSLSocket$INVOKER$i$1$0$syswrite_DBG.gen)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:161)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:290)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:83)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.INTERPRET_METHOD(InterpretedIRMethod.java:179)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.call(InterpretedIRMethod.java:166)
 at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:197)
 at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:313)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:163)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:290)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:77)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.INTERPRET_METHOD(InterpretedIRMethod.java:151)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.call(InterpretedIRMethod.java:138)
 at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:189)
 at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:293)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:131)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:306)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:77)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.INTERPRET_METHOD(InterpretedIRMethod.java:151)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.call(InterpretedIRMethod.java:138)
 at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:189)
 at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:293)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:131)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:306)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:77)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.INTERPRET_METHOD(InterpretedIRMethod.java:151)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.call(InterpretedIRMethod.java:138)
 at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:189)
 at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:293)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:131)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:306)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:77)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.INTERPRET_METHOD(InterpretedIRMethod.java:151)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.call(InterpretedIRMethod.java:138)
 at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:189)
 at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:293)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:131)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:306)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:77)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.INTERPRET_METHOD(InterpretedIRMethod.java:151)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.call(InterpretedIRMethod.java:138)
 at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:189)
 at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:293)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:131)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:306)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:83)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.INTERPRET_METHOD(InterpretedIRMethod.java:179)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.call(InterpretedIRMethod.java:166)
 at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:197)
 at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:313)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:163)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:290)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.INTERPRET_METHOD(InterpretedIRMethod.java:122)
 at org.jruby.internal.runtime.methods.InterpretedIRMethod.call(InterpretedIRMethod.java:109)
 at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:273)
 at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:79)
 at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:83)
 at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:419)
 at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:322)
 at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:77)
 at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:122)
 at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136)
 at org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:59)
 at org.jruby.runtime.Block.call(Block.java:106)
 at org.jruby.RubyProc.call(RubyProc.java:334)
 at org.jruby.RubyProc.call(RubyProc.java:240)
 at org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:99)
 at java.lang.Thread.run(Thread.java:745)
@bigsur0 bigsur0 changed the title java.lang.NoSuchMethodError: org.jruby.RubyIO.flush()Lorg/jruby/RubyIO when using Net::HTTP with openssl on ruby 9.0.3.0 java.lang.NoSuchMethodError: org.jruby.RubyIO.flush()Lorg/jruby/RubyIO when using Net::HTTP with openssl on jruby 9.0.3.0 Feb 18, 2016
@kares
Copy link
Member

kares commented Feb 19, 2016

thanks, does it reproduce on a piece of ruby script, reliably?

@bigsur0
Copy link
Contributor Author

bigsur0 commented Feb 19, 2016

I'm having trouble getting a simple script that will repro this case:

But the gist of it is:

require 'uri'
require 'net/http/persistent'
require 'openssl'
require 'json'

10.times do
  Thread.new do
    uri  = URI.parse(YOUR_HTTPS_URL_HERE)
    http = Net::HTTP::Persistent.new 'persistent_client'
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post = Net::HTTP::Post.new(uri.path, {})
    2.times do
      post.body = JSON.generate(
        ('a'..'z').reduce({}) do |memo, v|
          memo[v] = v*10_000
          memo
        end
      )
      http.reconnect
      puts http.request(uri, post).inspect
    end
  end.join
end

@kares
Copy link
Member

kares commented Feb 20, 2016

please provide gem versions as well and try gem install jruby-openssl to use latest ... your line numbers do not match any recent JRuby-OpenSSL version - maybe you're picking up an old gem version.

@kares
Copy link
Member

kares commented Feb 21, 2016

also was having issues even installing net-http-persistent which I assume you're using on 9.0.3.0 ... believe the release has been a little "flaky" :

kares@sputnik:~/workspace/oss/jruby$ gem install net-http-persistent
Unhandled Java exception: java.lang.NoSuchMethodError: org.jruby.Ruby.newString()Ljava/lang/String;
java.lang.NoSuchMethodError: org.jruby.Ruby.newString()Ljava/lang/String;
                <top> at /opt/local/rvm/rubies/jruby-9.0.3.0/bin/gem:4
  invokeWithArguments at java/lang/invoke/MethodHandle.java:599
                 load at org/jruby/ir/Compiler.java:111
            runScript at org/jruby/Ruby.java:821
            runScript at org/jruby/Ruby.java:813
          runNormally at org/jruby/Ruby.java:751
          runFromMain at org/jruby/Ruby.java:573
        doRunFromMain at org/jruby/Main.java:409
          internalRun at org/jruby/Main.java:304
                  run at org/jruby/Main.java:233
                 main at org/jruby/Main.java:200

... just try 9.0.5.0 and please use a concrete https: URL that would fail, it's "hard" to come up with one :

# YOUR_HTTPS_URL_HERE='https://api.github.com/gists'
#<Net::HTTPUnprocessableEntity 422 Unprocessable Entity readbody=true>

@kares kares added this to the Invalid or Duplicate milestone Feb 21, 2016
@headius headius closed this as completed Feb 23, 2016
@headius
Copy link
Member

headius commented Feb 23, 2016

Let us know if you can reproduce with recent/current jruby-openssl.

@bigsur0
Copy link
Contributor Author

bigsur0 commented Feb 24, 2016

It can be reproduced locally using jruby-9.0.3.0 and jruby-openssl-0.9.15-java via rvm. Keep in mind the script provided won't reproduce the issue. Here's more info about the environment.

bundler (1.11.2)

  rvm:
    version:      "rvm 1.26.11"

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

No branches or pull requests

3 participants