[ 
https://issues.apache.org/jira/browse/CASSANDRA-14556?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16558427#comment-16558427
 ] 

ASF GitHub Bot commented on CASSANDRA-14556:
--------------------------------------------

Github user iamaleksey commented on a diff in the pull request:

    https://github.com/apache/cassandra/pull/239#discussion_r205416649
  
    --- Diff: 
src/java/org/apache/cassandra/io/sstable/format/big/BigTableBlockWriter.java ---
    @@ -48,51 +47,61 @@
     import org.apache.cassandra.schema.TableId;
     import org.apache.cassandra.schema.TableMetadataRef;
     
    +import static java.lang.String.format;
    +import static org.apache.cassandra.utils.FBUtilities.prettyPrintMemory;
    +
     public class BigTableBlockWriter extends SSTable implements 
SSTableMultiWriter
     {
    +    private static final Logger logger = 
LoggerFactory.getLogger(BigTableBlockWriter.class);
    +
         private final TableMetadataRef metadata;
    -    private final LifecycleTransaction txn;
         private volatile SSTableReader finalReader;
         private final Map<Component.Type, SequentialWriter> componentWriters;
     
    -    private final Logger logger = 
LoggerFactory.getLogger(BigTableBlockWriter.class);
    -
    -    private final SequentialWriterOption writerOption = 
SequentialWriterOption.newBuilder()
    -                                                                           
   .trickleFsync(false)
    -                                                                           
   .bufferSize(2 * 1024 * 1024)
    -                                                                           
   .bufferType(BufferType.OFF_HEAP)
    -                                                                           
   .build();
    -    public static final ImmutableSet<Component> supportedComponents = 
ImmutableSet.of(Component.DATA, Component.PRIMARY_INDEX, Component.STATS,
    -                                                                           
    Component.COMPRESSION_INFO, Component.FILTER, Component.SUMMARY,
    -                                                                           
    Component.DIGEST, Component.CRC);
    +    private static final SequentialWriterOption WRITER_OPTION =
    +        SequentialWriterOption.newBuilder()
    +                              .trickleFsync(false)
    +                              .bufferSize(2 << 20)
    +                              .bufferType(BufferType.OFF_HEAP)
    +                              .build();
    +
    +    private static final ImmutableSet<Component> SUPPORTED_COMPONENTS =
    +        ImmutableSet.of(Component.DATA,
    +                        Component.PRIMARY_INDEX,
    +                        Component.SUMMARY,
    +                        Component.STATS,
    +                        Component.COMPRESSION_INFO,
    +                        Component.FILTER,
    +                        Component.DIGEST,
    +                        Component.CRC);
     
         public BigTableBlockWriter(Descriptor descriptor,
                                    TableMetadataRef metadata,
                                    LifecycleTransaction txn,
                                    final Set<Component> components)
         {
    -        super(descriptor, ImmutableSet.copyOf(components), metadata,
    -              DatabaseDescriptor.getDiskOptimizationStrategy());
    +        super(descriptor, ImmutableSet.copyOf(components), metadata, 
DatabaseDescriptor.getDiskOptimizationStrategy());
    +
             txn.trackNew(this);
             this.metadata = metadata;
    -        this.txn = txn;
    -        this.componentWriters = new HashMap<>(components.size());
    +        this.componentWriters = new EnumMap<>(Component.Type.class);
     
    -        assert supportedComponents.containsAll(components) : 
String.format("Unsupported streaming component detected %s",
    -                                                                           
new HashSet(components).removeAll(supportedComponents));
    +        if (!SUPPORTED_COMPONENTS.containsAll(components))
    +            throw new AssertionError(format("Unsupported streaming 
component detected %s",
    +                                            Sets.difference(components, 
SUPPORTED_COMPONENTS)));
    --- End diff --
    
    Neat. I either forgot, or didn't know that `Sets.difference()` was a thing. 
This is nicer than the way I proposed (:


> 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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to