I added your two patches to the tree where I already have Ola's fixes.
I gave this a run against webrick running rails and we now get an
java exception versus a deadlock, so things look better.  I am home sick
today so I will investigate.  I will be applying Ola's patches today
and I can apply the two you sent if you want.

Here is the stack trace from webrick+rails on a simple request:
Exception in thread "Ruby Thread19552406" java.lang.AssertionError: 
java.lang.IllegalArgumentException: argument type mismatch

        at 
org.jruby.runtime.callback.ReflectionCallback.execute(ReflectionCallback.java:183)

        at 
org.jruby.internal.runtime.methods.CallbackMethod.internalCall(CallbackMethod.java:79)

        at 
org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:51)

        at org.jruby.RubyObject.callMethod(RubyObject.java:362)

        at org.jruby.RubyObject.callMethod(RubyObject.java:316)

        at 
org.jruby.evaluator.EvaluateVisitor$CallNodeVisitor.execute(EvaluateVisitor.java:555)

        at 
org.jruby.evaluator.EvaluationState.executeNext(EvaluationState.java:262)

        at org.jruby.evaluator.EvaluationState.begin(EvaluationState.java:297)

        at org.jruby.RubyObject.eval(RubyObject.java:440)

        at 
org.jruby.internal.runtime.methods.DefaultMethod.internalCall(DefaultMethod.java:110)

        at 
org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:51)

        at org.jruby.RubyObject.callMethod(RubyObject.java:362)

        at org.jruby.RubyObject.callMethod(RubyObject.java:316)

        at 
org.jruby.evaluator.EvaluateVisitor$CallNodeVisitor.execute(EvaluateVisitor.java:555)

        at 
org.jruby.evaluator.EvaluationState.executeNext(EvaluationState.java:262)

        at org.jruby.evaluator.EvaluationState.begin(EvaluationState.java:297)

        at 
org.jruby.internal.runtime.methods.EvaluateCallable.internalCall(EvaluateCallable.java:67)

        at 
org.jruby.internal.runtime.methods.AbstractCallable.call(AbstractCallable.java:64)

        at org.jruby.runtime.ThreadContext.yield(ThreadContext.java:347)

        at 
org.jruby.evaluator.EvaluateVisitor$Yield2.execute(EvaluateVisitor.java:2020)

        at 
org.jruby.evaluator.EvaluationState.executeNext(EvaluationState.java:262)

        ...

On Fri, 16 Jun 2006, Charles O Nutter defenestrated me:

> 
>    So we all know our friend Ola has contributed some great pieces of
>    work over the past several months. As another JRubyist put it, "Ola is
>    a f'n machine". StringIO, YAML, and Zlib are now mostly Java and far,
>    far faster than they were. These contributions have made RubyGems far,
>    far faster. From the original install time on this Opteron 2.6G of
>    almost an hour (sans rdoc, mind you), we get this:
>    real    5m35.341s
>    user    0m36.379s
>    sys     0m5.195s
>    Impressive, by any measure. Ok, so I don't remember whether it was
>    exactly an hour to install before, but it was bloody long enough to
>    hit the drive-in for lunch. Grotesquely slow. Ola's changes alone
>    dropped that time down to comparatively nothing. I went through the
>    pains this evening of applying all his patches, cleaning up conflicts
>    between them (since I didn't have a complete picture), and tidying up
>    a few minor things. Then I ran a full Rails install. The time was
>    impressive, no doubt about it. However, something really, really
>    bothered me. In the time between gem download and gem install, the
>    machine was sitting there, doing *nothing*. No network traffic, 0% CPU
>    utilization. Zippo.
>    Then it hit me.
>    You've all heard the story about the timeout library. net/http calls
>    net/protocol which reads in 1024-byte chunks from the stream with a
>    timeout thread for each one. I cried about this on my blog too, since
>    it seemed to be the source of a terrible performance problem. It turns
>    out that once again, Java has already optimized our troubles away, in
>    this case the cost of spinning up hundreds of threads.
>    Our NIO-based IO handler had a tiny flaw when it came to Socket IO: it
>    was blocking. That meant that for the last read from the stream, the
>    last few bytes of a gem file, it would sit and wait to fill up
>    net/protocol's 1024-byte buffer. I am no NIO expert, but channels
>    appear to behave somewhat differently when doing File versus Socket
>    IO. At the end of a File, the stream is empty and read(ByteBuffer)
>    will immediately return -1. With a Socket, however, if there are not
>    enough bytes to fill the buffer and the socket is still open, it will
>    block. Such is the case here. The HTTP get of a gem seems to leave the
>    channel open. I'm not sure if this is intentional in RubyGems (for
>    retrieving multiple gems) or a bug (potentially in JRuby) but leaving
>    the Socket in blocking mode resulted in that last chunk of bytes
>    waiting until timeout kicked in.
>    My fix (in the form of a patch to IOHandlerNIO) may or may not be
>    correct; like I said, I'm no NIO expert. However, it seems to work
>    well enough:
>    Attempting local installation of 'rails'
>    Local gem file not found: rails*.gem
>    Attempting remote installation of 'rails'
>    Updating Gem source index for: [1]http://gems.rubyforge.org
>    Successfully installed rails-1.1.2
>    Successfully installed rake-0.7.1
>    Successfully installed activesupport-1.3.1
>    Successfully installed activerecord-1.14.2
>    Successfully installed actionpack-1.12.1
>    Successfully installed actionmailer-1.2.1
>    Successfully installed actionwebservice-1.1.2
>    real    1m3.751s
>    user    0m53.817s
>    sys     0m5.722s
>    For sake of comparison, Ruby installs Rails and its dependencies in
>    about 25 seconds on my system. It's probably safe to say that we're
>    only 2x slower for non-rdoc gem installations, which seems pretty good
>    to me.
>    The NIO patch alone is attached, as is a complete patch with
>    everything changed on my system, including:
>    - All Ola's stuff (stringio, zlib, and signal)
>    - My unrelated simplifications to Thread.critical= (not as
>    deterministic as before but less likely or unlikely to
>    deadlock...needs a bit more testing)
>    - My NIO fix
>    It will be nice to say that not only have we gotten RubyGems working,
>    but it's been sped up by perhaps an order of magnitude since we first
>    started.
>    --
>    Charles Oliver Nutter @ [2]headius.blogspot.com
>    JRuby Developer @ [3]jruby.sourceforge.net
>    Application Architect @ [4]www.ventera.com 
> 
> References
> 
>    1. http://gems.rubyforge.org/
>    2. http://headius.blogspot.com/
>    3. http://jruby.sourceforge.net/
>    4. http://www.ventera.com/





> _______________________________________________
> Jruby-devel mailing list
> Jruby-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jruby-devel


-- 
+ http://www.tc.umn.edu/~enebo +---- mailto:[EMAIL PROTECTED] ----+
| Thomas E Enebo, Protagonist  | "Luck favors the prepared    |
|                              |  mind." -Louis Pasteur       |


_______________________________________________
Jruby-devel mailing list
Jruby-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jruby-devel

Reply via email to