The atomic batches feature is all about moving the multi-statement application 
to the server side to avoid having to worry about retry logic on the client 
side.  I'm glad that the client doesn't have to worry about it.

An earlier thread about consistency level and atomic batches broke the 
execution of atomic batches into two steps (with an assumed final 3rd step):
1) writing the batch to the batch log
2) applying the individual statements in the batch
3) deleting the batch from the batch log

The question for me is what #2 does, and what guarantees are in place if the 
batch execution returns successfully.  In addition, I wondered how the 
consistency level used when executing the batch affects what is done in step #2.

>From what I can tell from cassandra server code, there is an additional step 
>#0, and there are more guarantees than I thought.

http://fossies.org/linux/misc/apache-cassandra-2.0.8-src.tar.gz/apache-cassandra-2.0.8-src/src/java/org/apache/cassandra/service/StorageProxy.java#l_537

Here is a revised and enhanced order of operations:
a) pre-check replicas for all statements in the batch, assuring that the 
correct number of nodes are available for the consistency level passed from the 
client with the batch
b) write batch to 2 nodes in the local datacenter, unless you have a 
single-node datacenter and use CL.ANY, and wait until those writes are complete 
-- where the batch is written, and how many copies of the batch are written has 
nothing much to do with the consistency level passed from the client with the 
batch -- an attempt is made to get two nodes from two separate racks to write 
the batch
c) for each statement in the batch, execute that statement with the consistency 
level passed from the client with the batch, and wait until the consistency 
level is satisfied on those writes
d) remove the batch from where it had been written, but don't wait

This is interesting, because there are a few guarantees here:
- step a) implies that no writes (including the batch) will occur if any 
consistency-level-required replica is unavailable right before starting to 
submit the writes
- step c) implies that all writes will be complete using the consistency level 
passed with the batch
- steps a), b), and c) will be complete BEFORE the batch execution is 
acknowledged to the client

If I've understood this correctly, please let me know.  If I've come to the 
wrong conclusions, please help me understand.

John...


 NOTICE: This email message is for the sole use of the intended recipient(s) 
and may contain confidential and privileged information. Any unauthorized 
review, use, disclosure or distribution is prohibited. If you are not the 
intended recipient, please contact the sender by reply email and destroy all 
copies of the original message.

Reply via email to