[
https://issues.apache.org/jira/browse/KUDU-352?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15530674#comment-15530674
]
Alexey Serbin commented on KUDU-352:
------------------------------------
As [~jdcryans] mentioned, Java client provides ordering guarantee, as I can see.
For the C++ client:
* As for the within-one-batch ordering, the issue has been fixed a long time
ago (as mentioned earlier) and now we have ordering guarantee there.
* As for the across-batches ordering:
** if the limit on number of batchers is to 1, then we have strict ordering
** if the limit on number of batchers is 2 (default) or more, then operations
can be re-ordered across different batches.
> Decide on and implement within-batch ordering for client API
> ------------------------------------------------------------
>
> Key: KUDU-352
> URL: https://issues.apache.org/jira/browse/KUDU-352
> Project: Kudu
> Issue Type: New Feature
> Components: client
> Affects Versions: M5
> Reporter: Vladimir Feinberg
>
> Currently, the when the client applies a sequence of WriteOperations to a
> session without flushing (within a single batch), the batcher runs tablet
> location lookup asynchronously (see method Batcher::TabletLookupFinished).
> Thus, it is possible that within the same batch, even with manual flushing,
> the PerTSBuffer is flushed out of order (causing operations to arrive
> out-of-order on the server side).
> A contract needs to be designed (and applied to both C++ and Java APIs)
> regarding the strength of the ordering within the batches.
> Some options:
> 1. No order guaranteed (current). Client must manually flush between batches
> to ensure order.
> 2. Per-row order guarantee - operations are sent to the server where for a
> given key, the sequence of operations is preserved.
> 3. Strict ordering guarantee. Independent of keys, order of batch is matched.
> Things to consider:
> -> Is (2) different from (3)? With HybridTime, the client should only see
> changes atomically on a per-batch level with concurrent reads. Then
> between-row operations do not matter (until multi-row transactions are
> introduced).
> -> A flexible version of the API that could include BarrierWriteOperations
> which would allow the user to control order within batches themselves.
> -> Simplifying things entirely, removing all order (force the client to use a
> transaction or flushes to ensure order).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)