HEH...Well that didn't take long. StringIO.sync= was expecting the wrong type. Now the cool part. Cookbook is running using jdbc and webrick! Well that is if I comment out flash.sweep in flash.rb in actionpack. I will look at that next.
-Tom On Fri, 16 Jun 2006, Thomas E Enebo defenestrated me: > 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 -- + 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