[
https://issues.apache.org/jira/browse/CASSANDRA-21152?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18056900#comment-18056900
]
Dmitry Konstantinov commented on CASSANDRA-21152:
-------------------------------------------------
It seems we have the test broken after merging of cursor compaction.
Cursor compaction and iterator compaction have different behavior in a corner
case for materialised views + TTLs. I've extracted the essential part from the
failing python test as a JUnit reproducer. It fails when
cassandra.cursor_compaction_enabled=true and passes in case of
cassandra.cursor_compaction_enabled=false
{code:java}
package org.apache.cassandra.cql3;
import java.util.Collections;
import org.junit.Test;
import org.apache.cassandra.Util;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.Keyspace;
public class ViewFlushTest extends ViewAbstractTest
{
@Test
public void testView() throws Throwable
{
createTable("CREATE TABLE %s (k int, a int, b int, c int, primary
key(k, a)) with default_time_to_live=6000");
createView("CREATE MATERIALIZED VIEW %s AS SELECT k,a,b FROM %s WHERE k
IS NOT NULL AND a IS NOT NULL PRIMARY KEY (a, k)");
execute("UPDATE %s SET c=2 WHERE k=1 AND a=1");
flushView();
assertRows(execute("SELECT k,a,b,c FROM %s"), row(1, 1, null, 2));
assertRows(executeView("SELECT k,a,b FROM %s"), row(1, 1, null));
// view mutation on update
// [cql_test_keyspace.mv_testview_01] key=1 partition_deletion=LIVE
columns=[[] | [b]]
// Row[info=[ts=1770378054212000 ttl=6000, let=1770384054] ]: k=1 |
// view mutation on delete
// [cql_test_keyspace.mv_testview_01] key=1 partition_deletion=LIVE
columns=[[] | [b]]
// Row[info=[ts=1770377809808000 ttl=2147483647, let=1770377924] ]:
k=1 |
execute("DELETE c FROM %s WHERE k=1 AND a=1");
flushView();
assertRows(execute("SELECT k,a,b,c FROM %s"), Collections.emptyList());
assertRows(executeView("SELECT k,a,b FROM %s"),
Collections.emptyList());
compact(keyspace(), currentView());
assertRows(execute("SELECT k,a,b,c FROM %s"), Collections.emptyList());
assertRows(executeView("SELECT k,a,b FROM %s"),
Collections.emptyList()); // <== for cursor compaction we fail here
}
private void flushView()
{
ColumnFamilyStore cfs =
Keyspace.open(keyspace()).getColumnFamilyStore(currentView());
Util.flush(cfs);
}
}
{code}
> Test failure: dtest.TestMaterializedViews.test_mv_with_default_ttl_with_flush
> ------------------------------------------------------------------------------
>
> Key: CASSANDRA-21152
> URL: https://issues.apache.org/jira/browse/CASSANDRA-21152
> Project: Apache Cassandra
> Issue Type: Bug
> Reporter: Dmitry Konstantinov
> Assignee: Dmitry Konstantinov
> Priority: Normal
> Fix For: 5.x
>
> Attachments: breaking_point.png
>
>
> It fails consistently now, example:
> [https://ci-cassandra.apache.org/job/Cassandra-trunk/2391/testReport/junit/dtest.materialized_views_test/TestMaterializedViews/Tests___dtest_jdk11_1_64___test_mv_with_default_ttl_with_flush/]
> {code:java}
> self = <materialized_views_test.TestMaterializedViews object at
> 0x7f808eb3b3d0>
> @since('3.0')
> def test_mv_with_default_ttl_with_flush(self):
> > self._test_mv_with_default_ttl(True)
> materialized_views_test.py:1333:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> materialized_views_test.py:1368: in _test_mv_with_default_ttl
> assert_none(session, "SELECT k,a,b FROM mv2")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> session = <cassandra.cluster.Session object at 0x7f808dcc1d60>
> query = 'SELECT k,a,b FROM mv2', cl = None
> def assert_none(session, query, cl=None):
> """
> Assert query returns nothing
> @param session Session to use
> @param query Query to run
> @param cl Optional Consistency Level setting. Default ONE
>
> Examples:
> assert_none(self.session1, "SELECT * FROM test where key=2;")
> assert_none(cursor, "SELECT * FROM test WHERE k=2",
> cl=ConsistencyLevel.SERIAL)
> """
> simple_query = SimpleStatement(query, consistency_level=cl)
> res = session.execute(simple_query)
> list_res = _rows_to_list(res)
> > assert list_res == [], "Expected nothing from {}, but got
> > {}".format(query, list_res)
> E AssertionError: Expected nothing from SELECT k,a,b FROM mv2, but got
> [[1, 1, None]]
> tools/assertions.py:149: AssertionError
> {code}
> !breaking_point.png|width=700!
> it was broken between 2364 and 2367 Cassandra trunk runs.
> [https://butler.cassandra.apache.org/#/ci/upstream/workflow/Cassandra-trunk/failure/materialized_views_test/TestMaterializedViews/test_mv_with_default_ttl_with_flush]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]