[ 
https://issues.apache.org/jira/browse/DIRMINA-1101?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16808732#comment-16808732
 ] 

Jonathan Valliere commented on DIRMINA-1101:
--------------------------------------------

The branch is pretty much finalized; I think Emmanuel is done.  We went over it 
on Monday.  I'm not sure whether it will be back ported to 2.0.X or not.  That 
is still up to debate.

> InvalidMarkException on session.write when using CompressionFilter.
> -------------------------------------------------------------------
>
>                 Key: DIRMINA-1101
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-1101
>             Project: MINA
>          Issue Type: Bug
>    Affects Versions: 2.0.20
>            Reporter: Jörg Michelberger
>            Assignee: Emmanuel Lecharny
>            Priority: Major
>
> I'm updated from a MINA 2.0.7 to the 2.0.20 and am a user of 
> CompressionFilter. Writing of Messages fails with a InvalidMarkException.
> Reproducible Test is:
>  * Copy MINA Core Test org.apache.mina.core.service.AbstractIoServiceTest to 
> MINA Compression Filter org.apache.mina.filter.compression Test Packages 
> package.
>  * Adapt package statement to org.apache.mina.filter.compression.
>  * Add Compression to acceptor and connector
>  *         acceptor.getFilterChain().addLast("compression", new 
> CompressionFilter());
>          acceptor.getFilterChain().addLast("logger", new LoggingFilter());
>          acceptor.getFilterChain().addLast("codec",
>                  new ProtocolCodecFilter(new 
> TextLineCodecFactory(StandardCharsets.UTF_8)));
>  *         connector.getFilterChain().addLast("compression", new 
> CompressionFilter());
>          connector.getFilterChain().addLast("logger", new LoggingFilter());
>          connector.getFilterChain().addLast("codec",
>                  new ProtocolCodecFilter(new 
> TextLineCodecFactory(StandardCharsets.UTF_8)));
>  * Set a Breakpoint to java.nio.Buffer.reset() method, where the 
> InvalidMarkException is thrown.
>  * Run Debug Testfile on 
> org.apache.mina.filter.compression.AbstractIoServiceTest 
> After the Exception the session is immediatelly scheduled for disconnect.
> It seems that there is a discrepancy between the mark() and reset() calls on 
> the underlaying Buffer. In case of compression, a Buffer with the compressed 
> content is created and is wrapped with the original Buffer in a 
> FilteredWriteRequest, because CompressionFilter is a WriteRequestFilter. This 
> is in WriteRequestFilter.filterWrite()
> In DefaultIoFilterChain$HeadFilter.filterWrite() is then the mark() call, 
> which is done on the compressed Buffer.
> In AbstractPollingIoProcessor.writeBuffer() is the reset() call, which is in 
> this case done on the original Buffer, leading to the Exception.
> It seems that the change at date 16.02.2016
> SHA-1: 44b58469f84ce991074cdc187b1c1f23b94cf445
> * Don't try to reset a message when it's not a IoBuffer
> which reassignes the buf before reset() is called broke it. The buf before 
> reassign looks much better as the right to reset() in this case.
>  
> {{java.nio.InvalidMarkException}}
>  {{    at java.nio.Buffer.reset(Buffer.java:306)}}
>  {{    at 
> org.apache.mina.core.buffer.AbstractIoBuffer.reset(AbstractIoBuffer.java:425)}}
>  {{    at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.writeBuffer(AbstractPollingIoProcessor.java:1131)}}
>  {{    at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.flushNow(AbstractPollingIoProcessor.java:994)}}
>  {{    at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.flush(AbstractPollingIoProcessor.java:921)}}
>  {{    at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:688)}}
>  {{    at 
> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)}}
>  {{    at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)}}
>  {{    at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)}}
>  {{    at java.lang.Thread.run(Thread.java:748)}}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to