[ https://issues.apache.org/jira/browse/CASSANDRA-14556?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16543835#comment-16543835 ]
ASF GitHub Bot commented on CASSANDRA-14556: -------------------------------------------- Github user dineshjoshi commented on a diff in the pull request: https://github.com/apache/cassandra/pull/239#discussion_r202489810 --- 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 -- Re-reading the code, the check on [line 227](https://github.com/dineshjoshi/cassandra/blob/f9573ccef63535b787e91e46fa886f3e3ff2eee8/src/java/org/apache/cassandra/net/async/RebufferingByteBufDataInputPlus.java#L277) is just being over cautious in case the `reBuffer` implementation changes and can return a empty buffer. > Optimize streaming path in Cassandra > ------------------------------------ > > Key: CASSANDRA-14556 > URL: https://issues.apache.org/jira/browse/CASSANDRA-14556 > Project: Cassandra > Issue Type: Improvement > Components: Streaming and Messaging > Reporter: Dinesh Joshi > Assignee: Dinesh Joshi > Priority: Major > Labels: Performance > Fix For: 4.x > > > During streaming, Cassandra reifies the sstables into objects. This creates > unnecessary garbage and slows down the whole streaming process as some > sstables can be transferred as a whole file rather than individual > partitions. The objective of the ticket is to detect when a whole sstable can > be transferred and skip the object reification. We can also use a zero-copy > path to avoid bringing data into user-space on both sending and receiving > side. -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org