users@grizzly.java.net

Re: exception using ByteBufferManager

From: Jon Brisbin <jon_at_jbrisbin.com>
Date: Thu, 28 Jul 2011 11:32:38 -0500 (CDT)

I think this way is a little faster than what I was doing before. Under load it performs very well and is, more importantly, more consistent in CPU and memory usage than previously.

Thanks for the help!

Is this using a DirectByteBuffer underneath? A traceback I once got from AsynchronousFileChannel made think it wasn't...

Thanks!

Jon Brisbin
http//jbrisbin.com

----- Original Message -----

> From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> To: users_at_grizzly.java.net
> Sent: Thursday, July 28, 2011 10:47:37 AM
> Subject: Re: exception using ByteBufferManager

> Hi Jon,

> with the new code (see Ryan's email),
> please use inputStream.readBuffer();

> this way you won't need to call InputStream.skip(...) etc, pls. see
> the sample I sent recently.

> Thanks.

> Alexey.

> On 07/28/2011 05:11 PM, Jon Brisbin wrote:
> > I tried this in my shootout example and got this:
>

> > java.lang.IllegalStateException: CompositeBuffer has already been
> > disposed
>
> > at
> > org.glassfish.grizzly.memory.BuffersBuffer.checkDispose(BuffersBuffer.java:1614)
>
> > at
> > org.glassfish.grizzly.memory.BuffersBuffer.remaining(BuffersBuffer.java:348)
>
> > at
> > org.glassfish.grizzly.http.server.io.InputBuffer.available(InputBuffer.java:357)
>
> > at
> > org.glassfish.grizzly.http.server.io.InputBuffer.readyData(InputBuffer.java:349)
>
> > at
> > org.glassfish.grizzly.http.server.io.InputBuffer.notifyAvailable(InputBuffer.java:731)
>
> > at
> > org.glassfish.grizzly.http.server.io.InputBuffer.notifyAvailable(InputBuffer.java:691)
>
> > at
> > org.glassfish.grizzly.http.server.NIOInputStreamImpl.notifyAvailable(NIOInputStreamImpl.java:139)
>
> > at
> > org.glassfish.grizzly.http.server.io.NIOInputSource$notifyAvailable.call(Unknown
> > Source)
>

> > here's my handler code:
>

> > def readAvailable() {
>
> > def len = inputStream.readyData()
>
> > def inputStreamBuffer = inputStream.getBuffer()
>
> > def writeBuff = inputStreamBuffer.toByteBuffer()
>
> > try {
>
> > channel.write(writeBuff, bytes.get(), writeBuff, handler)
>
> > bytes.addAndGet(len)
>
> > } finally {
>
> > inputStreamBuffer.tryDispose()
>
> > }
>
> > }
>

> > Thanks!
>

> > Jon Brisbin
>
> > http//jbrisbin.com
>

> > ----- Original Message -----
>

> > > From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> >
>
> > > To: users_at_grizzly.java.net
> >
>
> > > Sent: Thursday, July 28, 2011 6:22:00 AM
> >
>
> > > Subject: Re: exception using ByteBufferManager
> >
>

> > > Hi Jon,
> >
>

> > > I've updated the sample [1], so you can try to uncomment couple
> > > of
> > > lines to try direct buffers.
> >
>
> > > Only one thing - you need to use latest Grizzly trunk to run it.
> >
>

> > > Thanks.
> >
>

> > > WBR,
> >
>
> > > Alexey.
> >
>

> > > [1]
> > > http://java.net/projects/grizzly/sources/git/content/samples/http-server-samples/src/main/java/org/glassfish/grizzly/samples/httpserver/nonblockinghandler/UploadHttpHandlerSample.java
> >
>

> > > On 07/27/2011 10:58 PM, Jon Brisbin wrote:
> >
>
> > > > I'm trying to use the ByteBufferManager in my application
> > > > because
> > > > I'm
> > > > hitting some issues with garbage collecting all these byte
> > > > arrays
> > > > I'm allocating for writing uploads. Whenever I try and allocate
> > > > an
> > > > object from it, though, I get this exception:
> > >
> >
>

> > > > java.lang.ClassCastException: java.nio.DirectByteBuffer cannot
> > > > be
> > > > cast to org.glassfish.grizzly.memory.HeapBuffer
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.memory.HeapMemoryManager$HeapBufferThreadLocalPool.reset(HeapMemoryManager.java:307)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.memory.ByteBufferManager.reallocatePoolBuffer(ByteBufferManager.java:371)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.memory.ByteBufferManager.allocateByteBuffer(ByteBufferManager.java:238)
> > >
> >
>
> > > > at
> > > > org.glassfish.grizzly.memory.ByteBufferAware$allocateByteBuffer.call(Unknown
> > > > Source)
> > >
> >
>

> > > > Are there example of proper use of this somewhere?
> > >
> >
>

> > > > Thanks!
> > >
> >
>

> > > > Jon Brisbin
> > >
> >
>
> > > > http//jbrisbin.com
> > >
> >
>