[
https://issues.apache.org/jira/browse/CASSANDRA-13680?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jason Brown resolved CASSANDRA-13680.
-------------------------------------
Resolution: Not A Problem
> readBytes needs to clone its data
> ---------------------------------
>
> Key: CASSANDRA-13680
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13680
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Reporter: Hao Zhong
>
> The code of the ByteBufferUtil_readBytes method is as follow:
> {code}
> public static ByteBuffer readBytes(ByteBuffer bb, int length)
> {
> ByteBuffer copy = bb.duplicate();
> copy.limit(copy.position() + length);
> bb.position(bb.position() + length);
> return copy;
> }
> {code}
> I found that CASSANDRA-3179 fixed a related bug. The buggy code is as follow:
> {code}
> public synchronized ByteBuffer readBytes(int length) throws IOException
> {
> int remaining = buffer.remaining() - position;
> if (length > remaining)
> throw new IOException(String.format("mmap segment underflow;
> remaining is %d but %d requested",
> remaining, length));
> ByteBuffer bytes = buffer.duplicate();
> bytes.position(buffer.position() + position).limit(buffer.position()
> + position + length);
> position += length;
> return bytes;
> }
> {code}
> The fixed code is:
> {code}
> public synchronized ByteBuffer readBytes(int length) throws IOException
> {
> int remaining = buffer.remaining() - position;
> if (length > remaining)
> throw new IOException(String.format("mmap segment underflow;
> remaining is %d but %d requested",
> remaining, length));
> if (length == 0)
> return ByteBufferUtil.EMPTY_BYTE_BUFFER;
> ByteBuffer bytes = buffer.duplicate();
> bytes.position(buffer.position() + position).limit(buffer.position()
> + position + length);
> position += length;
> // we have to copy the data in case we unreference the underlying
> sstable. See CASSANDRA-3179
> ByteBuffer clone = ByteBuffer.allocate(bytes.remaining());
> clone.put(bytes);
> clone.flip();
> return clone;
> }
> {code}
> The ByteBufferUtil_readBytes method may be modified in the same way to handle
> the similar problem.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]