Github user dineshjoshi commented on a diff in the pull request:
https://github.com/apache/cassandra/pull/239#discussion_r202488581
--- Diff:
src/java/org/apache/cassandra/net/async/RebufferingByteBufDataInputPlus.java ---
@@ -249,4 +250,42 @@ public ByteBufAllocator getAllocator()
{
return channelConfig.getAllocator();
}
+
+ /**
+ * Consumes bytes in the stream until the given length
+ *
+ * @param writer
+ * @param len
+ * @return
+ * @throws IOException
+ */
+ public long consumeUntil(BufferedDataOutputStreamPlus writer, long
len) throws IOException
+ {
+ long copied = 0; // number of bytes copied
+ while (copied < len)
+ {
+ if (buffer.remaining() == 0)
+ {
+ try
+ {
+ reBuffer();
+ }
+ catch (EOFException e)
+ {
+ throw new EOFException("EOF after " + copied + " bytes
out of " + len);
+ }
+ if (buffer.remaining() == 0)
+ return copied == 0 ? -1 : copied;
--- End diff --
Here -
https://github.com/dineshjoshi/cassandra/blob/f9573ccef63535b787e91e46fa886f3e3ff2eee8/src/java/org/apache/cassandra/io/sstable/format/big/BigTableBlockWriter.java#L213
`reBuffer()` could likely fail due to network or channel being closed by
the other side. It could be treated as a normal `IOException` as we're not
guaranteed that we would get those many bytes from the other end. It feels a
bit weird that rest of `RebufferingByteBufDataInputPlus` throws `EOFException`
and this method would throw an `AssertionError` when there may be a network
issue.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]