cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fridtjof Sander (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-13657) Materialized Views: Index MV on TTL'ed column produces orphanized view entry if another column keeps entry live
Date Wed, 12 Jul 2017 08:18:00 GMT

    [ 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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


Mime
View raw message