Search in sources :

Example 81 with Keyspace

use of org.apache.cassandra.db.Keyspace in project cassandra by apache.

the class ViewFiltering1Test method testMVFilteringWithComplexColumn.

// TODO will revise the non-pk filter condition in MV, see CASSANDRA-11500
@Ignore
@Test
public void testMVFilteringWithComplexColumn() throws Throwable {
    createTable("CREATE TABLE %s (a int, b int, c int, l list<int>, s set<int>, m map<int,int>, PRIMARY KEY (a, b))");
    String mv1 = createView("CREATE MATERIALIZED VIEW %s AS SELECT a,b,c FROM %%s " + "WHERE a IS NOT NULL AND b IS NOT NULL AND c IS NOT NULL AND l contains (1) " + "AND s contains (1) AND m contains key (1) " + "PRIMARY KEY (a, b, c)");
    String mv2 = createView("CREATE MATERIALIZED VIEW %s AS SELECT a,b FROM %%s " + "WHERE a IS NOT NULL and b IS NOT NULL AND l contains (1) " + "PRIMARY KEY (a, b)");
    String mv3 = createView("CREATE MATERIALIZED VIEW %s AS SELECT a,b FROM %%s " + "WHERE a IS NOT NULL AND b IS NOT NULL AND s contains (1) " + "PRIMARY KEY (a, b)");
    String mv4 = createView("CREATE MATERIALIZED VIEW %s AS SELECT a,b FROM %%s " + "WHERE a IS NOT NULL AND b IS NOT NULL AND m contains key (1) " + "PRIMARY KEY (a, b)");
    // not able to drop base column filtered in view
    assertInvalidMessage("Cannot drop column l, depended on by materialized views", "ALTER TABLE %s DROP l");
    assertInvalidMessage("Cannot drop column s, depended on by materialized views", "ALTER TABLE %S DROP s");
    assertInvalidMessage("Cannot drop column m, depended on by materialized views", "ALTER TABLE %s DROP m");
    Keyspace ks = Keyspace.open(keyspace());
    ks.getColumnFamilyStore(mv1).disableAutoCompaction();
    ks.getColumnFamilyStore(mv2).disableAutoCompaction();
    ks.getColumnFamilyStore(mv3).disableAutoCompaction();
    ks.getColumnFamilyStore(mv4).disableAutoCompaction();
    execute("INSERT INTO %s (a, b, c, l, s, m) VALUES (?, ?, ?, ?, ?, ?) ", 1, 1, 1, list(1, 1, 2), set(1, 2), map(1, 1, 2, 2));
    Util.flush(ks);
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv1), row(1, 1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv2), row(1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv3), row(1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv4), row(1, 1));
    execute("UPDATE %s SET l=l-[1] WHERE a = 1 AND b = 1");
    Util.flush(ks);
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv2));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv3), row(1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv4), row(1, 1));
    execute("UPDATE %s SET s=s-{2}, m=m-{2} WHERE a = 1 AND b = 1");
    Util.flush(ks);
    assertRowsIgnoringOrder(execute("SELECT a,b,c FROM %s"), row(1, 1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv2));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv3), row(1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv4), row(1, 1));
    execute("UPDATE %s SET  m=m-{1} WHERE a = 1 AND b = 1");
    Util.flush(ks);
    assertRowsIgnoringOrder(execute("SELECT a,b,c FROM %s"), row(1, 1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv2));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv3), row(1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv4));
    // filter conditions result not changed
    execute("UPDATE %s SET  l=l+[2], s=s-{0}, m=m+{3:3} WHERE a = 1 AND b = 1");
    Util.flush(ks);
    assertRowsIgnoringOrder(execute("SELECT a,b,c FROM %s"), row(1, 1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv2));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv3), row(1, 1));
    assertRowsIgnoringOrder(execute("SELECT * FROM " + mv4));
}
Also used : Keyspace(org.apache.cassandra.db.Keyspace) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 82 with Keyspace

use of org.apache.cassandra.db.Keyspace in project cassandra by apache.

the class ViewComplexDeletionsPartialTest method testPartialDeleteUnselectedColumn.

private void testPartialDeleteUnselectedColumn(boolean flush) throws Throwable {
    createTable("CREATE TABLE %s (k int, c int, a int, b int, PRIMARY KEY (k, c))");
    createView("CREATE MATERIALIZED VIEW %s AS " + "SELECT k,c FROM %s WHERE k IS NOT NULL AND c IS NOT NULL PRIMARY KEY (k,c)");
    Keyspace ks = Keyspace.open(keyspace());
    ks.getColumnFamilyStore(currentView()).disableAutoCompaction();
    updateView("UPDATE %s USING TIMESTAMP 10 SET b=1 WHERE k=1 AND c=1");
    if (flush)
        Util.flush(ks);
    assertRows(execute("SELECT * from %s"), row(1, 1, null, 1));
    assertRows(executeView("SELECT * FROM %s"), row(1, 1));
    updateView("DELETE b FROM %s USING TIMESTAMP 11 WHERE k=1 AND c=1");
    if (flush)
        Util.flush(ks);
    assertEmpty(execute("SELECT * from %s"));
    assertEmpty(executeView("SELECT * FROM %s"));
    updateView("UPDATE %s USING TIMESTAMP 1 SET a=1 WHERE k=1 AND c=1");
    if (flush)
        Util.flush(ks);
    assertRows(execute("SELECT * from %s"), row(1, 1, 1, null));
    assertRows(executeView("SELECT * FROM %s"), row(1, 1));
    execute("truncate %s;");
    // removal generated by unselected column should not shadow PK update with smaller timestamp
    updateViewWithFlush("UPDATE %s USING TIMESTAMP 18 SET a=1 WHERE k=1 AND c=1", flush);
    assertRows(execute("SELECT * from %s"), row(1, 1, 1, null));
    assertRows(executeView("SELECT * FROM %s"), row(1, 1));
    updateViewWithFlush("UPDATE %s USING TIMESTAMP 20 SET a=null WHERE k=1 AND c=1", flush);
    assertRows(execute("SELECT * from %s"));
    assertRows(executeView("SELECT * FROM %s"));
    updateViewWithFlush("INSERT INTO %s(k,c) VALUES(1,1) USING TIMESTAMP 15", flush);
    assertRows(execute("SELECT * from %s"), row(1, 1, null, null));
    assertRows(executeView("SELECT * FROM %s"), row(1, 1));
}
Also used : Keyspace(org.apache.cassandra.db.Keyspace)

Example 83 with Keyspace

use of org.apache.cassandra.db.Keyspace in project cassandra by apache.

the class ViewComplexDeletionsTest method complexTimestampWithbasePKColumnsInViewPKDeletionTest.

private void complexTimestampWithbasePKColumnsInViewPKDeletionTest(boolean flush) throws Throwable {
    createTable("create table %s (p1 int, p2 int, v1 int, v2 int, primary key(p1, p2))");
    Keyspace ks = Keyspace.open(keyspace());
    createView("create materialized view %s as select * from %s " + "where p1 is not null and p2 is not null primary key (p2, p1)");
    ks.getColumnFamilyStore(currentView()).disableAutoCompaction();
    // Set initial values TS=1
    updateView("Insert into %s (p1, p2, v1, v2) values (1, 2, 3, 4) using timestamp 1;");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v1, v2, WRITETIME(v2) from %s WHERE p1 = ? AND p2 = ?", 1, 2), row(3, 4, 1L));
    // remove row/mv TS=2
    updateView("Delete from %s using timestamp 2 where p1 = 1 and p2 = 2;");
    if (flush)
        Util.flush(ks);
    // view are empty
    assertRowsIgnoringOrder(executeView("SELECT * FROM %s"));
    // insert PK with TS=3
    updateView("Insert into %s (p1, p2) values (1, 2) using timestamp 3;");
    if (flush)
        Util.flush(ks);
    // deleted column in MV remained dead
    assertRowsIgnoringOrder(executeView("SELECT * FROM %s"), row(2, 1, null, null));
    ks.getColumnFamilyStore(currentView()).forceMajorCompaction();
    assertRowsIgnoringOrder(executeView("SELECT * FROM %s"), row(2, 1, null, null));
    // reset values
    updateView("Insert into %s (p1, p2, v1, v2) values (1, 2, 3, 4) using timestamp 10;");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v1, v2, WRITETIME(v2) from %s WHERE p1 = ? AND p2 = ?", 1, 2), row(3, 4, 10L));
    updateView("UPDATE %s using timestamp 20 SET v2 = 5 WHERE p1 = 1 and p2 = 2");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v1, v2, WRITETIME(v2) from %s WHERE p1 = ? AND p2 = ?", 1, 2), row(3, 5, 20L));
    updateView("DELETE FROM %s using timestamp 10 WHERE p1 = 1 and p2 = 2");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v1, v2, WRITETIME(v2) from %s WHERE p1 = ? AND p2 = ?", 1, 2), row(null, 5, 20L));
}
Also used : Keyspace(org.apache.cassandra.db.Keyspace) SystemKeyspace(org.apache.cassandra.db.SystemKeyspace)

Example 84 with Keyspace

use of org.apache.cassandra.db.Keyspace in project cassandra by apache.

the class ViewComplexDeletionsTest method testCommutativeRowDeletion.

private void testCommutativeRowDeletion(boolean flush) throws Throwable {
    // CASSANDRA-13409 new update should not resurrect previous deleted data in view
    createTable("create table %s (p int primary key, v1 int, v2 int)");
    Keyspace ks = Keyspace.open(keyspace());
    createView("create materialized view %s as select * from %s " + "where p is not null and v1 is not null primary key (v1, p)");
    ks.getColumnFamilyStore(currentView()).disableAutoCompaction();
    // sstable-1, Set initial values TS=1
    updateView("Insert into %s (p, v1, v2) values (3, 1, 3) using timestamp 1;");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v2, WRITETIME(v2) from %s WHERE v1 = ? AND p = ?", 1, 3), row(3, 1L));
    // sstable-2
    updateView("Delete from %s using timestamp 2 where p = 3;");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v1, p, v2, WRITETIME(v2) from %s"));
    // sstable-3
    updateView("Insert into %s (p, v1) values (3, 1) using timestamp 3;");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v1, p, v2, WRITETIME(v2) from %s"), row(1, 3, null, null));
    // sstable-4
    updateView("UPdate %s using timestamp 4 set v1 = 2 where p = 3;");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v1, p, v2, WRITETIME(v2) from %s"), row(2, 3, null, null));
    // sstable-5
    updateView("UPdate %s using timestamp 5 set v1 = 1 where p = 3;");
    if (flush)
        Util.flush(ks);
    assertRowsIgnoringOrder(executeView("SELECT v1, p, v2, WRITETIME(v2) from %s"), row(1, 3, null, null));
    if (flush) {
        // compact sstable 2 and 4, 5;
        ColumnFamilyStore cfs = ks.getColumnFamilyStore(currentView());
        List<String> sstables = cfs.getLiveSSTables().stream().sorted(SSTableReader.idComparator).map(SSTableReader::getFilename).collect(Collectors.toList());
        String dataFiles = String.join(",", Arrays.asList(sstables.get(1), sstables.get(3), sstables.get(4)));
        CompactionManager.instance.forceUserDefinedCompaction(dataFiles);
        assertEquals(3, cfs.getLiveSSTables().size());
    }
    // regular tombstone should be retained after compaction
    assertRowsIgnoringOrder(executeView("SELECT v1, p, v2, WRITETIME(v2) from %s"), row(1, 3, null, null));
}
Also used : Keyspace(org.apache.cassandra.db.Keyspace) SystemKeyspace(org.apache.cassandra.db.SystemKeyspace) ColumnFamilyStore(org.apache.cassandra.db.ColumnFamilyStore)

Example 85 with Keyspace

use of org.apache.cassandra.db.Keyspace in project cassandra by apache.

the class ViewComplexLivenessLimitTest method testExpiredLivenessLimit.

private void testExpiredLivenessLimit(boolean flush) throws Throwable {
    createTable("CREATE TABLE %s (k int PRIMARY KEY, a int, b int);");
    Keyspace ks = Keyspace.open(keyspace());
    String mv1 = createView("CREATE MATERIALIZED VIEW %s AS SELECT * FROM %s " + "WHERE k IS NOT NULL AND a IS NOT NULL PRIMARY KEY (k, a)");
    String mv2 = createView("CREATE MATERIALIZED VIEW %s AS SELECT * FROM %s " + "WHERE k IS NOT NULL AND a IS NOT NULL PRIMARY KEY (a, k)");
    ks.getColumnFamilyStore(mv1).disableAutoCompaction();
    ks.getColumnFamilyStore(mv2).disableAutoCompaction();
    for (int i = 1; i <= 100; i++) updateView("INSERT INTO %s(k, a, b) VALUES (?, ?, ?);", i, i, i);
    for (int i = 1; i <= 100; i++) {
        if (i % 50 == 0)
            continue;
        // create expired liveness
        updateView("DELETE a FROM %s WHERE k = ?;", i);
    }
    if (flush) {
        Util.flushTable(ks, mv1);
        Util.flushTable(ks, mv2);
    }
    for (String view : Arrays.asList(mv1, mv2)) {
        // paging
        assertEquals(1, executeNetWithPaging(String.format("SELECT k,a,b FROM %s limit 1", view), 1).all().size());
        assertEquals(2, executeNetWithPaging(String.format("SELECT k,a,b FROM %s limit 2", view), 1).all().size());
        assertEquals(2, executeNetWithPaging(String.format("SELECT k,a,b FROM %s", view), 1).all().size());
        assertRowsNet(executeNetWithPaging(String.format("SELECT k,a,b FROM %s ", view), 1), row(50, 50, 50), row(100, 100, 100));
        // limit
        assertEquals(1, execute(String.format("SELECT k,a,b FROM %s limit 1", view)).size());
        assertRowsIgnoringOrder(execute(String.format("SELECT k,a,b FROM %s limit 2", view)), row(50, 50, 50), row(100, 100, 100));
    }
}
Also used : Keyspace(org.apache.cassandra.db.Keyspace)

Aggregations

Keyspace (org.apache.cassandra.db.Keyspace)173 ColumnFamilyStore (org.apache.cassandra.db.ColumnFamilyStore)107 Test (org.junit.Test)77 SSTableReader (org.apache.cassandra.io.sstable.format.SSTableReader)66 Token (org.apache.cassandra.dht.Token)35 RowUpdateBuilder (org.apache.cassandra.db.RowUpdateBuilder)29 LifecycleTransaction (org.apache.cassandra.db.lifecycle.LifecycleTransaction)27 DecoratedKey (org.apache.cassandra.db.DecoratedKey)23 TableMetadata (org.apache.cassandra.schema.TableMetadata)21 Range (org.apache.cassandra.dht.Range)19 InetAddressAndPort (org.apache.cassandra.locator.InetAddressAndPort)19 ArrayList (java.util.ArrayList)18 SystemKeyspace (org.apache.cassandra.db.SystemKeyspace)18 Set (java.util.Set)17 HashMap (java.util.HashMap)16 List (java.util.List)16 Map (java.util.Map)16 DatabaseDescriptor (org.apache.cassandra.config.DatabaseDescriptor)16 Collectors (java.util.stream.Collectors)15 TableId (org.apache.cassandra.schema.TableId)15