Any news on this?

On Fri, Jul 31, 2009 at 9:44 AM, Adam Brown<[email protected]> wrote:
> here's some code that i think demonstrates the problem.  with the
> calls to filterChainBuilder.addFirst() to add the SslFilter &
> FileRegionWriteFilter, MyHandler.messageSent() is never called
> (slightly different from what i've seen in our actual code, but pretty
> close).
>
> let me know what else i can do to help track this down.
>
> -adam
>
> public class App {
>        private static class MyHandler extends IoHandlerAdapter {
>                private final IoBuffer ioBuffer = IoBuffer.wrap("test 
> string".getBytes());
>                private FileChannel fileChannel;
>
>                public MyHandler() {
>                        try {
>                                fileChannel = new 
> FileInputStream("tmpfile").getChannel();
>                        } catch (FileNotFoundException e) {
>                                e.printStackTrace();
>                                System.exit(1);
>                        }
>                }
>
>               �...@override
>                public void messageReceived(IoSession session, Object message)
> throws Exception {
>                        session.write(ioBuffer);
>                        session.write(new DefaultFileRegion(fileChannel));
>                }
>
>               �...@override
>                public void messageSent(IoSession session, Object message) {
>                        System.out.println();
>                        System.out.println("messageSent" + message);
>                }
>        }
>
>        public static void main(String[] args) throws
> NoSuchAlgorithmException, KeyManagementException, IOException {
>        SSLContext context = SSLContext.getInstance("TLS");
>        context.init(null, null, null);
>
>        NioSocketAcceptor ioAcceptor = new NioSocketAcceptor(4);
>        ioAcceptor.setReuseAddress(true);
>        ioAcceptor.setBacklog(2048);
>        ioAcceptor.getSessionConfig().setThroughputCalculationInterval(10);
>        ioAcceptor.setCloseOnDeactivation(false);
>
>        DefaultIoFilterChainBuilder filterChainBuilder = new
> DefaultIoFilterChainBuilder();
>        filterChainBuilder.addFirst("sslFilter", new SslFilter(context));
>        filterChainBuilder.addFirst("fileRegionFilter", new
> FileRegionWriteFilter());
>
>        ioAcceptor.setFilterChainBuilder(filterChainBuilder);
>                ioAcceptor.setHandler(new MyHandler());
>                ioAcceptor.bind(new InetSocketAddress(8080));
>        }
> }
>
>
> On Fri, Jul 31, 2009 at 8:39 AM, Adam Brown<[email protected]> wrote:
>> On Thu, Jul 30, 2009 at 3:53 PM, Emmanuel Lecharny<[email protected]> 
>> wrote:
>>> Adam Brown wrote:
>>>>
>>>> i'm currently using a FileRegionWriteFilter 'before' an SslFilter to
>>>> breakup FileRegion objects into chunks that SslFilter can handle
>>>> (since SslFilter doesn't handle them directly).  however, this filter
>>>> chain also has IoBuffers written to the same IoSession.
>>>>
>>>> the problem i'm seeing appears to be that the IoBuffer is not being
>>>> sent by MINA (with messageSent() being sent back up the chain and
>>>> IoHandler) before the first IoBuffer generated by the
>>>> FileRegionWriteFilter is written.  because of this ordering, my
>>>> IoBuffer (not the ones created by FileRegionWriteFilter) is "lost" to
>>>> the chain and never has messageSent() called on it.  in addition to
>>>> the messageSent() call made with the FileRegion, some of the IoBuffers
>>>> generated by FileRegionWriteFilter "escape" and have messageSent()
>>>> called on them, passing them up the filter chain (and ultimately to my
>>>> IoHandler).
>>>>
>>>> so really, i've got two problems :-).
>>>>
>>>
>>> Are you using an ExecutorFilter? If so, which kind of threadPool are you
>>> using ?
>>
>> no, we are not using an ExecutorFilter on the filter chain.  all of
>> the write()s are occuring in the same thread, just different places in
>> our code.
>>
>>>
>>> Can you push a very simple piece of code demonstrating the problem so that
>>> we can debu it and understand what's going on ?
>>
>> yeah, i'll try to put together a simple example that exercises this.
>> i did a little debugging before posting to the list & the general flow
>> of events is as follows:
>>
>> our code:
>> ioSession.write(myIoBuffer);
>> ...
>> ioSession.write(fileRegion);
>>
>> yields in the filter chain:
>>
>> AbstractStreamWriteFilter.filterWrite(myIoBuffer);
>> AbstractStreamWriteFilter.filterWrite(fileRegion);
>> AbstractStreamWriteFilter.messageSent(myIoBuffer);  -> gets "captured"
>> by AbstractStreamWriteFilter
>> AbstractStreamWriteFilter.messageSent(ioBufferForFileRegion);  ->
>> called a couple of times
>> ...
>> => nextFilter.messageSent(fileRegion);
>> nextFilter.messageSent(ioBufferForFileRegion);  -> called at least
>> once, but this should have been "captured" by
>> AbstractStreamWriteFilter
>>
>>>
>>> Thanks !
>>>
>>> PS: MINA version, etc... That helps !
>>
>> right now, we're using 2.0.0-M3.  we had switched to -M5 a while back,
>> but there was a serious performance drop-off caused by -M5 (which we
>> haven't had a chance to track down yet), so we reverted to -M3.
>>
>>>
>>> --
>>> --
>>> cordialement, regards,
>>> Emmanuel Lécharny
>>> www.iktek.com
>>> directory.apache.org
>>>
>>>
>>>
>>
>

Reply via email to