[
https://issues.apache.org/jira/browse/CASSANDRA-5619?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13701216#comment-13701216
]
Jonathan Ellis commented on CASSANDRA-5619:
-------------------------------------------
The problem with adding a column to the resultset is that it can conflict with
a user-defined column of the same name.
Rather than deal with rules to escape this or rely on conventions like "we'll
force boolean success to the first entry in the resultset," I think I'm coming
to prefer what I suggested earlier for Thrift -- that is, an exception for
failure at the protocol level.
I note that this is also what we do for normal writes, so it feels more
consistent to me in that respect as well. (I'm not sure that I buy that CAS
failure is all that much more exceptional than failure to achieve
ConsistencyLevel, at least conceptually.)
> CAS UPDATE for a lost race: save round trip by returning column values
> ----------------------------------------------------------------------
>
> Key: CASSANDRA-5619
> URL: https://issues.apache.org/jira/browse/CASSANDRA-5619
> Project: Cassandra
> Issue Type: Improvement
> Components: Core
> Affects Versions: 2.0 beta 1
> Reporter: Blair Zajac
> Assignee: Sylvain Lebresne
> Fix For: 2.0 beta 1
>
> Attachments: 0001-Add-back-boolean-result-column.txt,
> 5619_thrift_fixup.txt, 5619.txt
>
>
> Looking at the new CAS CQL3 support examples [1], if one lost a race for an
> UPDATE, to save a round trip to get the current values to decide if you need
> to perform your work, could the columns that were used in the IF clause also
> be returned to the caller? Maybe the columns values as part of the SET part
> could also be returned.
> I don't know if this is generally useful though.
> In the case of creating a new user account with a given username which is the
> partition key, if one lost the race to another person creating an account
> with the same username, it doesn't matter to the loser what the column values
> are, just that they lost.
> I'm new to Cassandra, so maybe there's other use cases, such as doing
> incremental amount of work on a row. In pure Java projects I've done while
> loops around AtomicReference.html#compareAndSet() until the work was done on
> the referenced object to handle multiple threads each making forward progress
> in updating the references object.
> [1] https://github.com/riptano/cassandra-dtest/blob/master/cql_tests.py#L3044
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira