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

Jeff Jirsa edited comment on CASSANDRA-9198 at 4/20/15 4:37 PM:
----------------------------------------------------------------

Attaching patch that was previously option #2 on CASSANDRA-9077. Addresses this 
without modification (though I'll also attach an update shortly that ALSO 
addresses the now-failing unit tests that expected the older behavior)

{noformat}
cqlsh> create keyspace IF NOT EXISTS test WITH replication = {'class': 
'SimpleStrategy', 'replication_factor': 1};
cqlsh> USE test;
cqlsh:test> create table foo (k int primary key, v list<int>);
cqlsh:test> insert into foo(k,v) values (1, [1,2]);
cqlsh:test> update foo set v = v - [1] where k = 1;
cqlsh:test> update foo set v = v - [1] where k = 1;
cqlsh:test> update foo set v = v - [2] where k = 1;
cqlsh:test> update foo set v = v - [2] where k = 1;
cqlsh:test> 
cqlsh:test> select * from foo;

 k | v
---+------
 1 | null

(1 rows)
{noformat}




was (Author: jjirsa):
Attaching patch that was previously option #2 on CASSANDRA-9077. Addresses this 
without modification:

{noformat}
cqlsh> create keyspace IF NOT EXISTS test WITH replication = {'class': 
'SimpleStrategy', 'replication_factor': 1};
cqlsh> USE test;
cqlsh:test> create table foo (k int primary key, v list<int>);
cqlsh:test> insert into foo(k,v) values (1, [1,2]);
cqlsh:test> update foo set v = v - [1] where k = 1;
cqlsh:test> update foo set v = v - [1] where k = 1;
cqlsh:test> update foo set v = v - [2] where k = 1;
cqlsh:test> update foo set v = v - [2] where k = 1;
cqlsh:test> 
cqlsh:test> select * from foo;

 k | v
---+------
 1 | null

(1 rows)
{noformat}



> Deleting from an empty list produces an error
> ---------------------------------------------
>
>                 Key: CASSANDRA-9198
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9198
>             Project: Cassandra
>          Issue Type: Bug
>          Components: API
>            Reporter: Olivier Michallat
>            Assignee: Benjamin Lerer
>            Priority: Minor
>             Fix For: 3.0
>
>         Attachments: 9198.txt
>
>
> While deleting an element from a list that does not contain it is a no-op, 
> deleting it from an empty list causes an error.
> This edge case is a bit inconsistent, because it makes list deletion non 
> idempotent:
> {code}
> cqlsh:test> create table foo (k int primary key, v list<int>);
> cqlsh:test> insert into foo(k,v) values (1, [1,2]);
> cqlsh:test> update foo set v = v - [1] where k = 1;
> cqlsh:test> update foo set v = v - [1] where k = 1;
> cqlsh:test> update foo set v = v - [2] where k = 1;
> cqlsh:test> update foo set v = v - [2] where k = 1;
> InvalidRequest: code=2200 [Invalid query] message="Attempted to delete an 
> element from a list which is null"
> {code}
> With speculative retries coming to the drivers, idempotency becomes more 
> important because it determines which query we might retry or not. So it 
> would be better if deleting from an empty list succeeded.



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

Reply via email to