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: pr-unsubscr...@cassandra.apache.org For additional commands, e-mail: pr-h...@cassandra.apache.org