[ 
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]

Reply via email to