[
https://issues.jboss.org/browse/ISPN-1465?page=com.atlassian.jira.plugin....
]
Paul Ferraro updated ISPN-1465:
-------------------------------
Summary: CommandAwareRpcDispatcher message handling doesn't handle buffer
offset correctly (was: Unsupported protocol version when handling RPC messages)
Assignee: Paul Ferraro (was: Galder Zamarreño)
Priority: Minor (was: Blocker)
Description:
Looking at the CommandAwareRpcDispatcher.handle(Message) (line 139):
cmd = (ReplicableCommand) req_marshaller.objectFromBuffer(req.getBuffer(),
req.getOffset(), req.getLength());
Message.getBuffer() already returns a copy of the message buffer that takes into account
the offset and length. So, it would seem the above code will return a subset of the
desired buffer if the offset > 0.
Either this code should operate on the raw buffer (i.e. req.getRawBuffer()), or pass 0 as
the offset to objectFromBuffer(...).
was:
When testing the latest BETA1 as well as the latest SNAPSHOT (in anticipation of BETA2), I
see the following exceptions in the AS7 testsuite:
WARN: Problems unmarshalling remote command from byte buffer
java.io.IOException: Unsupported protocol version 172
at org.jboss.marshalling.river.RiverUnmarshaller.start(RiverUnmarshaller.java:1184)
at
org.infinispan.marshall.jboss.AbstractJBossMarshaller.startObjectInput(AbstractJBossMarshaller.java:113)
at
org.infinispan.marshall.VersionAwareMarshaller.startObjectInput(VersionAwareMarshaller.java:156)
at
org.infinispan.marshall.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:112)
at
org.infinispan.marshall.AbstractDelegatingMarshaller.objectFromByteBuffer(AbstractDelegatingMarshaller.java:80)
at
org.infinispan.remoting.transport.jgroups.MarshallerAdapter.objectFromBuffer(MarshallerAdapter.java:50)
at
org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.handle(CommandAwareRpcDispatcher.java:139)
at org.jgroups.blocks.RequestCorrelator.handleRequest(RequestCorrelator.java:446)
at org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:353)
at org.jgroups.blocks.RequestCorrelator.receive(RequestCorrelator.java:229)
at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:556)
at org.jgroups.JChannel.up(JChannel.java:718)
at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:1026)
at org.jgroups.protocols.pbcast.FLUSH.up(FLUSH.java:481)
at org.jgroups.protocols.pbcast.STATE_TRANSFER.up(STATE_TRANSFER.java:178)
at org.jgroups.protocols.FRAG2.up(FRAG2.java:181)
at org.jgroups.protocols.FlowControl.up(FlowControl.java:400)
at org.jgroups.protocols.FlowControl.up(FlowControl.java:418)
at org.jgroups.protocols.pbcast.GMS.up(GMS.java:865)
at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:244)
at org.jgroups.protocols.UNICAST.up(UNICAST.java:297)
at org.jgroups.protocols.pbcast.NAKACK.handleMessage(NAKACK.java:719)
at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:547)
at org.jgroups.protocols.BARRIER.up(BARRIER.java:126)
at org.jgroups.protocols.FD_ALL.up(FD_ALL.java:171)
at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:273)
at org.jgroups.protocols.MERGE2.up(MERGE2.java:208)
at org.jgroups.protocols.Discovery.up(Discovery.java:335)
at org.jgroups.protocols.TP.passMessageUp(TP.java:1091)
at org.jgroups.protocols.TP$IncomingPacket.handleMyMessage(TP.java:1646)
at org.jgroups.protocols.TP$IncomingPacket.run(TP.java:1623)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
Looking at the CommandAwareRpcDispatcher.handle(Message) (line 139):
cmd = (ReplicableCommand) req_marshaller.objectFromBuffer(req.getBuffer(),
req.getOffset(), req.getLength());
However, Message.getBuffer() already returns a copy of the message buffer that takes into
account the offset and length. So, it would seem the above code will return a subset of
the desired buffer if the offset > 0.
Either this code should operate on the raw buffer (i.e. req.getRawBuffer()), or pass 0 as
the offset to objectFromBuffer(...).
CommandAwareRpcDispatcher message handling doesn't handle buffer
offset correctly
---------------------------------------------------------------------------------
Key: ISPN-1465
URL:
https://issues.jboss.org/browse/ISPN-1465
Project: Infinispan
Issue Type: Bug
Components: RPC
Affects Versions: 5.1.0.BETA1
Reporter: Paul Ferraro
Assignee: Paul Ferraro
Priority: Minor
Fix For: 5.1.0.BETA3
Looking at the CommandAwareRpcDispatcher.handle(Message) (line 139):
cmd = (ReplicableCommand) req_marshaller.objectFromBuffer(req.getBuffer(),
req.getOffset(), req.getLength());
Message.getBuffer() already returns a copy of the message buffer that takes into account
the offset and length. So, it would seem the above code will return a subset of the
desired buffer if the offset > 0.
Either this code should operate on the raw buffer (i.e. req.getRawBuffer()), or pass 0 as
the offset to objectFromBuffer(...).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira