Bohdan Siryk created CASSGO-100:
-----------------------------------

             Summary: Add frames batching into a single segment
                 Key: CASSGO-100
                 URL: https://issues.apache.org/jira/browse/CASSGO-100
             Project: Apache Cassandra Go driver
          Issue Type: Improvement
          Components: Core
            Reporter: Bohdan Siryk


Support for protocol v5 was introduced in CASSGO-1. However, a current 
implementation lacks the batching feature of proto v5, which allows wrapping 
multiple frames into a single *self-contained* segment. It allows the driver to 
reduce the number of messages to the C*.

Currently, gocql wraps frames into a segment/segments as [a part of the 
framer|https://github.com/apache/cassandra-gocql-driver/blob/f1e31a58f7e0c25e58e2e2a0a0c6de358e643e8b/frame.go#L2390],
 which is not the right way to handle this. Ideally, we should have a wrapper 
around {_}writerContext{_}, which is responsible for preparing segments and 
probably passing them to the writeCoalescer...


So the call chain would be:
Conn.execInternal() -> segmentWriter.writeContext() 
->writeCoalscer.writeContext() -> etc.

However, I'm unsure what it should look like from a design perspective. 
Currently, _writeCoalscer_ in a separate go-routine runs a timer with a 
{_}WriteCoalesceWaitTime{_}, and for each tick, it triggers flushing of the 
underlying frame buffers, which are populated by _writeCoalscer.writeContext()_ 
method... So, actually making a wrapper around the _writeCoalescer_ won't allow 
us to reuse the existing flush-by-time approach, as segmentWriter will have its 
own internal state.


I see 2 potential approaches to resolve this:
 # Implement segmentWriter with coalesce to trigger flushing segments. The 
problem here is that we introduce a new writer who won't reuse existing 
_writeCoalscer_
 # Refactor writeContext to take a data provider instead of a raw bytes slice 
to play around with this, which is a much more complex change

Reference in Java Driver:
[https://github.com/apache/cassandra-java-driver/blob/595cb29912dc8b55663cc13bafe3f17dc4f91ce6/core/src/main/java/com/datastax/oss/driver/internal/core/protocol/ByteBufSegmentBuilder.java#L39]

[https://github.com/apache/cassandra-java-driver/blob/595cb29912dc8b55663cc13bafe3f17dc4f91ce6/core/src/main/java/com/datastax/oss/driver/internal/core/channel/ProtocolInitHandler.java#L386]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to