[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mina-dev
Subject:    [jira] [Created] (DIRMINA-1101) InvalidMarkException on session.write when using CompressionFilter.
From:       Jörg_Michelberger_(JIRA) <jira () apache ! org>
Date:       2019-03-21 14:10:00
Message-ID: JIRA.13223085.1553177385000.101967.1553177400084 () Atlassian ! JIRA
[Download RAW message or body]

J=C3=B6rg Michelberger created DIRMINA-1101:
------------------------------------------

             Summary: InvalidMarkException on session.write when using Comp=
ressionFilter.
                 Key: DIRMINA-1101
                 URL: https://issues.apache.org/jira/browse/DIRMINA-1101
             Project: MINA
          Issue Type: Bug
    Affects Versions: 2.0.20
            Reporter: J=C3=B6rg Michelberger


I'm updated from a MINA 2.0.7 to the 2.0.20 and am a user of CompressionFil=
ter. Writing of Messages fails with a InvalidMarkException.

Reproducible Test is:
 * Copy MINA Core Test org.apache.mina.core.service.AbstractIoServiceTest t=
o 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
 * =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 acceptor.getFilterChain().add=
Last("compression", new CompressionFilter());
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 acceptor.getFilterChain().addLas=
t("logger", new LoggingFilter());
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 acceptor.getFilterChain().addLas=
t("codec",
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 new ProtocolCodecFilter(new TextLineCodecFactory(StandardCh=
arsets.UTF_8)));
 * =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 connector.getFilterChain().ad=
dLast("compression", new CompressionFilter());
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 connector.getFilterChain().addLa=
st("logger", new LoggingFilter());
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 connector.getFilterChain().addLa=
st("codec",
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 new ProtocolCodecFilter(new TextLineCodecFactory(StandardCh=
arsets.UTF_8)));
 * Set a Breakpoint to java.nio.Buffer.reset() method, where the InvalidMar=
kException is thrown.
 * Run Debug Testfile on org.apache.mina.filter.compression.AbstractIoServi=
ceTest=C2=A0

After the Exception the session is immediatelly scheduled for disconnect.

It seems that there is a discrepancy between the mark() and reset() calls o=
n the underlaying Buffer. In case of compression, a Buffer with the compres=
sed content is created and is wrapped with the original Buffer in a Filtere=
dWriteRequest, because CompressionFilter is a WriteRequestFilter. This is i=
n WriteRequestFilter.filterWrite()

In DefaultIoFilterChain$HeadFilter.filterWrite() is then the mark() call, w=
hich is done on the compressed Buffer.

In AbstractPollingIoProcessor.writeBuffer() is the reset() call, which is i=
n this case done on the original Buffer, leading to the Exception.

{{java.nio.InvalidMarkException}}
{{=C2=A0=C2=A0 =C2=A0at java.nio.Buffer.reset(Buffer.java:306)}}
{{=C2=A0=C2=A0 =C2=A0at org.apache.mina.core.buffer.AbstractIoBuffer.reset(=
AbstractIoBuffer.java:425)}}
{{=C2=A0=C2=A0 =C2=A0at org.apache.mina.core.polling.AbstractPollingIoProce=
ssor$Processor.writeBuffer(AbstractPollingIoProcessor.java:1131)}}
{{=C2=A0=C2=A0 =C2=A0at org.apache.mina.core.polling.AbstractPollingIoProce=
ssor$Processor.flushNow(AbstractPollingIoProcessor.java:994)}}
{{=C2=A0=C2=A0 =C2=A0at org.apache.mina.core.polling.AbstractPollingIoProce=
ssor$Processor.flush(AbstractPollingIoProcessor.java:921)}}
{{=C2=A0=C2=A0 =C2=A0at org.apache.mina.core.polling.AbstractPollingIoProce=
ssor$Processor.run(AbstractPollingIoProcessor.java:688)}}
{{=C2=A0=C2=A0 =C2=A0at org.apache.mina.util.NamePreservingRunnable.run(Nam=
ePreservingRunnable.java:64)}}
{{=C2=A0=C2=A0 =C2=A0at java.util.concurrent.ThreadPoolExecutor.runWorker(T=
hreadPoolExecutor.java:1149)}}
{{=C2=A0=C2=A0 =C2=A0at java.util.concurrent.ThreadPoolExecutor$Worker.run(=
ThreadPoolExecutor.java:624)}}
{{=C2=A0=C2=A0 =C2=A0at java.lang.Thread.run(Thread.java:748)}}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic