[ https://issues.apache.org/jira/browse/CASSANDRA-13657?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16083116#comment-16083116 ]
Kurt Greaves commented on CASSANDRA-13657: ------------------------------------------ [~fsander] That seems like it might work, however I'm not sure special casing liveness info for MV's is a good idea in general. Currently it would work because we require all MV primary key columns to be {{NOT NULL}}, however this means if we ever want to remove that restriction we would need to change the definition of liveness-info again. Generally I'm not keen on having liveness info mean 2 completely different things depending on the use case. It might be cheap and effective in this case but I can see how this would be a source of confusion for anyone trying to work out why their row isn't showing up. [~jasonstack] what do you think? Will your proposal on CASSANDRA-11500 help here? > 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