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

ZhaoYang commented on CASSANDRA-14071:
--------------------------------------

Thanks for the report. This is indeed an issue from CASSANDRA-11500.

In 11500, an expired livenessInfo concept is introduced to MV, in order to mark 
entire view row as dead without purging row cells as tombstone.
When table has default ttl, the MV row to be removed has a bigger 
{{localDeletionTime}} than the generated expired livenessInfo's. (see 
LivenessInfo.supersedes())

The fix will be: when livenessInfo timestamp ties,  MV expired livenessInfo (by 
checking TTL==MAX) will supersedes another. I will check again if there is 
anything left for MV reconciliation.

> Materialized view on table with TTL issue
> -----------------------------------------
>
>                 Key: CASSANDRA-14071
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-14071
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Coordination, Materialized Views
>         Environment: Cassandra 3
>            Reporter: Silviu Butnariu
>            Assignee: ZhaoYang
>              Labels: correctness
>
> Materialized views that cluster by a column that is not part of table's PK 
> and are created from tables that have *default_time_to_live* seems to 
> malfunction.
> Having this table
> {code:java}
> CREATE TABLE sbutnariu.test_bug (
>     field1 smallint,
>     field2 smallint,
>     date timestamp,
>     PRIMARY KEY ((field1), field2)
> ) WITH default_time_to_live = 1000;
> {code}
> and the materialized view
> {code:java}
> CREATE MATERIALIZED VIEW sbutnariu.test_bug_by_date AS SELECT * FROM 
> sbutnariu.test_bug WHERE field1 IS NOT NULL AND field2 IS NOT NULL AND date 
> IS NOT NULL PRIMARY KEY ((field1), date, field2) WITH CLUSTERING ORDER BY 
> (date desc, field2 asc);
> {code}
> After inserting 3 rows with same PK (should upsert), the materialized view 
> will have 3 rows.
> {code:java}
> insert into sbutnariu.test_bug(field1, field2, date) values (1, 2, 
> toTimestamp(now()));
> insert into sbutnariu.test_bug(field1, field2, date) values (1, 2, 
> toTimestamp(now()));
> insert into sbutnariu.test_bug(field1, field2, date) values (1, 2, 
> toTimestamp(now()));
> select * from sbutnariu.test_bug; /*1 row*/
> select * from sbutnariu.test_bug_by_date;/*3 rows*/
> {code}
> If I remove the ttl and try again, it works as expected:
> {code:java}
> truncate sbutnariu.test_bug;
> alter table sbutnariu.test_bug with default_time_to_live = 0;
> select * from sbutnariu.test_bug; /*1 row*/
> select * from sbutnariu.test_bug_by_date;/*1 row*/
> {code}
> I've tested on versions 3.0.14 and 3.0.15. The bug was introduced in 3.0.15, 
> as in 3.0.14 it works as expected.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to