Github user iamaleksey commented on a diff in the pull request: https://github.com/apache/cassandra/pull/239#discussion_r204437695 --- Diff: src/java/org/apache/cassandra/db/streaming/CassandraOutgoingFile.java --- @@ -114,13 +155,51 @@ public void write(StreamSession session, DataOutputStreamPlus out, int version) CassandraStreamHeader.serializer.serialize(header, out, version); out.flush(); - CassandraStreamWriter writer = header.compressionInfo == null ? - new CassandraStreamWriter(sstable, header.sections, session) : - new CompressedCassandraStreamWriter(sstable, header.sections, - header.compressionInfo, session); + IStreamWriter writer; + if (shouldStreamFullSSTable()) + { + writer = new CassandraBlockStreamWriter(sstable, session, components); + } + else + { + writer = (header.compressionInfo == null) ? + new CassandraStreamWriter(sstable, header.sections, session) : + new CompressedCassandraStreamWriter(sstable, header.sections, + header.compressionInfo, session); + } writer.write(out); } + @VisibleForTesting + public boolean shouldStreamFullSSTable() + { + return isFullSSTableTransfersEnabled && isFullyContained; + } + + @VisibleForTesting + public boolean fullyContainedIn(List<Range<Token>> normalizedRanges, SSTableReader sstable) + { + if (normalizedRanges == null) + return false; + + RangeOwnHelper rangeOwnHelper = new RangeOwnHelper(normalizedRanges); + try (KeyIterator iter = new KeyIterator(sstable.descriptor, sstable.metadata())) + { + while (iter.hasNext()) + { + DecoratedKey key = iter.next(); + try + { + rangeOwnHelper.check(key); + } catch(RuntimeException e) --- End diff -- Catching `RuntimeException` is really not the way we should be using `RangeOwnHelper` here. Can you refactor `RangeOwnHelper` to introduce a method that would return a `boolean` instead?
--- --------------------------------------------------------------------- To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org For additional commands, e-mail: pr-h...@cassandra.apache.org