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:17: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:16 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 this ticket, in the update statement, there is no row-liveness info associated with
update. ( so no base row liveness info...).  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.




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. 

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

> 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