[ 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)