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

Aleksey Yeschenko commented on CASSANDRA-7801:
----------------------------------------------

We definitely shouldn't be committing it to 2.0, but I'm wondering if we should 
commit this at all.

If you want CAS to work on a particular cell/row, you should always be updating 
those cells/rows using CAS, or else there is no way we can guarantee any 
deterministic result.

'Fixing' this for a single node case would only mask the issue, and make tests 
pass, wrongly, on single-node test clusters, giving false sense of security. 
Tests would pass on a single node, but stuff would blow up in production.

Using IF EXISTS there is the real fix for that use case, IMO.

> A successful INSERT with CAS does not always store data in the DB after a 
> DELETE
> --------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-7801
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7801
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>         Environment: PC with Windows 7 and on Linux installation.
> Have seen the fault on Cassandra 2.0.9 and Cassandra 2.1.0-rc5 
>            Reporter: Martin Fransson
>            Assignee: Sylvain Lebresne
>             Fix For: 2.0.11
>
>         Attachments: 7801.txt, cas.zip
>
>
> When I run a loop with CQL statements to DELETE, INSERT with CAS and then a 
> GET.
> The INSERT opertion is successful (Applied), but no data is stored in the 
> database. I have checked the database manually after the test to verify that 
> the DB is empty.
>         for (int i = 0; i < 10000; ++i)
>         {
>             try
>             {
>                 t.del();
>                 t.cas();
>                 t.select();
>             }
>             catch (Exception e)
>             {
>                 System.err.println("i=" + i);
>                 e.printStackTrace();
>                 break;
>             }
>         }
>         myCluster = 
> Cluster.builder().addContactPoint("localhost").withPort(12742).build();
>         mySession = myCluster.connect();
>         mySession.execute("CREATE KEYSPACE IF NOT EXISTS castest WITH 
> REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };");
>         mySession.execute("CREATE TABLE IF NOT EXISTS castest.users (userid 
> text PRIMARY KEY, name text)");
>         myInsert = mySession.prepare("INSERT INTO castest.users (userid, 
> name) values ('user1', 'calle') IF NOT EXISTS");
>         myDelete = mySession.prepare("DELETE FROM castest.users where 
> userid='user1'");
>         myGet = mySession.prepare("SELECT * FROM castest.users where 
> userid='user1'");
>     }
> I can reproduce the fault with the attached program on a PC with windows 7.
> You need a cassandra runing and you need to set the port in the program.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to