[ 
https://issues.apache.org/jira/browse/CASSANDRA-13657?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Fridtjof Sander updated CASSANDRA-13657:
----------------------------------------
    Description: 
{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)

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

  was:
```
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)

-- deleting the base-entry doesn't help, because the view-key can not be 
constructed anymore (a=10 already expired)
```

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.


> 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
>
> {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)
> -- 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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to