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

Fridtjof Sander commented on CASSANDRA-13657:
---------------------------------------------

[~KurtG] From my understanding that is not possible, since all PK parts must be 
{{NOT NULL}}. But if there is way, or the logic is changed that way, then 
you're right. My assumption was: The view-rows's liveness is defined by the 
indexed column's liveness. If we want to index on values of dead cells that 
doesn't work anymore. Are there any thoughts or discussions going into that 
direction, though?

The way I see it, a view-row's liveness _is actually_ different from an 
ordinary row's liveness. So, it makes sense to have code representing that 
difference, instead of squeezing the new definition into the old mechanism and 
constantly having to patch stuff left and right.

> Materialized Views: Index MV on TTL'ed column produces orphanized view entry 
> if another column keeps entry live
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-13657
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13657
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Materialized Views
>            Reporter: Fridtjof Sander
>            Assignee: Krishna Dattu Koneru
>              Labels: materializedviews, ttl
>
> {noformat}
> CREATE TABLE t (k int, a int, b int, PRIMARY KEY (k));
> CREATE MATERIALIZED VIEW mv AS SELECT * FROM t WHERE k IS NOT NULL AND a IS 
> NOT NULL PRIMARY KEY (a, k);
> INSERT INTO t (k) VALUES (1);
> UPDATE t USING TTL 5 SET a = 10 WHERE k = 1;
> UPDATE t SET b = 100 WHERE k = 1;
> SELECT * from t; SELECT * from mv;
>  k | a  | b
> ---+----+-----
>  1 | 10 | 100
> (1 rows)
>  a  | k | b
> ----+---+-----
>  10 | 1 | 100
> (1 rows)
> -- 5 seconds later
> SELECT * from t; SELECT * from mv;
>  k | a    | b
> ---+------+-----
>  1 | null | 100
> (1 rows)
>  a  | k | b
> ----+---+-----
>  10 | 1 | 100
> (1 rows)
> -- that view entry's liveness-info is (probably) dead, but the entry is kept 
> alive by b=100
> DELETE b FROM t WHERE k=1;
> SELECT * from t; SELECT * from mv;
>  k | a    | b
> ---+------+------
>  1 | null | null
> (1 rows)
>  a  | k | b
> ----+---+-----
>  10 | 1 | 100
> (1 rows)
> DELETE FROM t WHERE k=1;
> cqlsh:test> SELECT * from t; SELECT * from mv;
>  k | a | b
> ---+---+---
> (0 rows)
>  a  | k | b
> ----+---+-----
>  10 | 1 | 100
> (1 rows)
> -- deleting the base-entry doesn't help, because the view-key can not be 
> constructed anymore (a=10 already expired)
> {noformat}
> The problem here is that although the view-entry's liveness-info (probably) 
> expired correctly a regular column (`b`) keeps the view-entry live. It should 
> have disappeared since it's indexed column (`a`) expired in the corresponding 
> base-row. This is pretty severe, since that view-entry is now orphanized.



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