cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "DOAN DuyHai (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (CASSANDRA-6668) Inconsistent handling of row expiration using TTL in collections
Date Tue, 25 Feb 2014 10:10:20 GMT

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

DOAN DuyHai edited comment on CASSANDRA-6668 at 2/25/14 10:08 AM:
------------------------------------------------------------------

bq. we should probably reject TTL = 0

 Please don't. 

bq. but it's perfectly possible that someone uses a prepared statement with a bind marker
for the TTL, sometimes binding a strictly positive TTL and sometimes binding 0 to get no expiration

 It's the case for *Achilles*. It prepares a bunch of Insert/Update statements before-hand
with TTL and just set strictly positive value when there is an TTLed insert/update

bq. my preferred semantic (all notion of backward compatibility aside) would be to just never
insert a row marker in UPDATE

 +1 for that. Although I'm quite familiar with CQL3, I got caught with the TTL subtlety related
to the row TTL marker. I guess lots of people will also get caught too on it. 
 


was (Author: doanduyhai):
bq. we should probably reject TTL = 0

 Please don't. 

bq. but it's perfectly possible that someone uses a prepared statement with a bind marker
for the TTL, sometimes binding a strictly positive TTL and sometimes binding 0 to get no expiration

 It's the case for **Achilles**. It prepares a bunch of Insert/Update statements before-hand
with TTL and just set strictly positive value when there is an TTLed insert/update

bq. my preferred semantic (all notion of backward compatibility aside) would be to just never
insert a row marker in UPDATE

 +1 for that. Although I'm quite familiar with CQL3, I got caught with the TTL subtlety related
to the row TTL marker. I guess lots of people will also get caught too on it. 
 

> Inconsistent handling of row expiration using TTL in collections
> ----------------------------------------------------------------
>
>                 Key: CASSANDRA-6668
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6668
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>         Environment: Apache Cassandra 2.0.3
> Apache Cassandra 1.2.8
> CQLSH client 3.1.6
>            Reporter: DOAN DuyHai
>            Priority: Critical
>
> The expiration of row when all TTLed columns have expired is inconsistent
> Scenario 1)
> {code:sql}
> cqlsh:test> create table ttl_issue(id int primary key,collection set<text>);
> cqlsh:test> update ttl_issue USING TTL 2 set collection = collection + {'test_2'}
where id=10;
> cqlsh:test> update ttl_issue USING TTL 3 set collection = collection + {'test_3'}
where id=10;
> cqlsh:test> select * from ttl_issue;
>  id | collection
> ----+----------------------
>  10 | {'test_2', 'test_3'}
> cqlsh:test> select * from ttl_issue;
>  id | collection
> ----+----------------------
>  10 | {'test_2', 'test_3'}
> cqlsh:test> select * from ttl_issue;
>  id | collection
> ----+------------
>  10 | {'test_3'}
> cqlsh:test> select * from ttl_issue;
> cqlsh:test> 
> {code}
>  As we can see, after a few seconds, both columns of the collection are expired. When
all columns of the set have expired, the SELECT * FROM ttl_issue *returns no result, meaning
that the whole row has expired.*
> Scenario 2)
> {code:sql}
> cqlsh:test> update ttl_issue USING TTL 3 set collection = collection + {'test_3'}
where id=11;
> cqlsh:test> update ttl_issue USING TTL 1000 set collection = collection + {'test_1000'}
where id=11;
> cqlsh:test> update ttl_issue set collection = collection - {'test_1000'} where id=11;
> cqlsh:test> select * from ttl_issue;
>  id | collection
> ----+------------
>  11 | {'test_3'}
> cqlsh:test> select * from ttl_issue;
>  id | collection
> ----+------------
>  11 | {'test_3'}
> cqlsh:test> select * from ttl_issue;
>  id | collection
> ----+------------
>  11 | {'test_3'}
> cqlsh:test> select * from ttl_issue;
>  id | collection
> ----+------------
>  11 |       null
> {code}
>  In this second scenario. We add elements to the collection with TTL but then remove
one of them. *After a while, although all TTLed columns have expired, the row is till there
with only the primary key present.*
>  One should expect to get the same behavior as in scenario 1), e.g. the complete row
should expire.
>  I've also tried removing one element from collection using TTL 0 ({code:sql}update ttl_issue
USING TTL 0 set collection = collection - {'test_1000'} where id=11;{code})  but the result
is the same.
>  Quick guest: bug on row deletion marker for specific collection element append/remove
?



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Mime
View raw message