cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ZhaoYang (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (CASSANDRA-13127) Materialized Views: View row expires too soon
Date Tue, 09 May 2017 14:18:04 GMT

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

ZhaoYang edited comment on CASSANDRA-13127 at 5/9/17 2:17 PM:
--------------------------------------------------------------

"UPDATE" semantic was designed to be different from "INSERT" to solve some TTL issue which
will remove entire PK when only ttl of column is updated. 

There are two issues here:

1. In the update statement, there is no row-liveness info associated with update. ( so no
base row liveness info because of Update semantic).  it thinks this update query won't affect
view, thus no view update is generated.

if we need to fix it, it means we have to generate view update for more kinds of base modifications.
( "View.mayBeAffectedBy" will mostly return true)

2. another issue is in Row.Merger: 

{quote}
                if (row.primaryKeyLivenessInfo().supersedes(rowInfo))
                    rowInfo = row.primaryKeyLivenessInfo();
{quote} 

This comparison isn't enough.  timestamp could be the same but TTL/expireTime is different.




was (Author: jasonstack):
"UPDATE" semantic was designed to be different from "INSERT" to solve some TTL issue which
will remove entire PK when only ttl of column is updated. 

There are two issues here:

1. In the update statement, there is no row-liveness info associated with update. ( so no
base row liveness info because of Update semantic).  it thinks this update query won't affect
view, thus no view update is generated.

if we need to fix it, it means we have to generate view update for more kinds of base modifications.
( "View.mayBeAffectedBy" will mostly return true)

2. another issue is in Row.Merger: 

{quote}
                if (row.primaryKeyLivenessInfo().supersedes(rowInfo))
                    rowInfo = row.primaryKeyLivenessInfo();
{quote} 

This comparison isn't enough.  timestamp could be the same but TTL is different.



> Materialized Views: View row expires too soon
> ---------------------------------------------
>
>                 Key: CASSANDRA-13127
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13127
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Local Write-Read Paths, Materialized Views
>            Reporter: Duarte Nunes
>
> Consider the following commands, ran against trunk:
> {code}
> echo "DROP MATERIALIZED VIEW ks.mv; DROP TABLE ks.base;" | bin/cqlsh
> echo "CREATE TABLE ks.base (p int, c int, v int, PRIMARY KEY (p, c));" | bin/cqlsh
> echo "CREATE MATERIALIZED VIEW ks.mv AS SELECT p, c FROM base WHERE p IS NOT NULL AND
c IS NOT NULL PRIMARY KEY (c, p);" | bin/cqlsh
> echo "INSERT INTO ks.base (p, c) VALUES (0, 0) USING TTL 10;" | bin/cqlsh
> # wait for row liveness to get closer to expiration
> sleep 6;
> echo "UPDATE ks.base USING TTL 8 SET v = 0 WHERE p = 0 and c = 0;" | bin/cqlsh
> echo "SELECT p, c, ttl(v) FROM ks.base; SELECT * FROM ks.mv;" | bin/cqlsh
>  p | c | ttl(v)
> ---+---+--------
>  0 | 0 |      7
> (1 rows)
>  c | p
> ---+---
>  0 | 0
> (1 rows)
> # wait for row liveness to expire
> sleep 4;
> echo "SELECT p, c, ttl(v) FROM ks.base; SELECT * FROM ks.mv;" | bin/cqlsh
>  p | c | ttl(v)
> ---+---+--------
>  0 | 0 |      3
> (1 rows)
>  c | p
> ---+---
> (0 rows)
> {code}
> Notice how the view row is removed even though the base row is still live. I would say
this is because in ViewUpdateGenerator#computeLivenessInfoForEntry the TTLs are compared instead
of the expiration times, but I'm not sure I'm getting that far ahead in the code when updating
a column that's not in the view.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

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


Mime
View raw message