Search in sources :

Example 1 with QueryProcessor.executeInternal

use of org.apache.cassandra.cql3.QueryProcessor.executeInternal in project cassandra by apache.

the class ScrubTest method testFilterOutDuplicates.

/**
     * Tests with invalid sstables (containing duplicate entries in 2.0 and 3.0 storage format),
     * that were caused by upgrading from 2.x with duplicate range tombstones.
     *
     * See CASSANDRA-12144 for details.
     */
@Test
public void testFilterOutDuplicates() throws Exception {
    DatabaseDescriptor.setPartitionerUnsafe(Murmur3Partitioner.instance);
    QueryProcessor.process(String.format("CREATE TABLE \"%s\".cf_with_duplicates_3_0 (a int, b int, c int, PRIMARY KEY (a, b))", KEYSPACE), ConsistencyLevel.ONE);
    Keyspace keyspace = Keyspace.open(KEYSPACE);
    ColumnFamilyStore cfs = keyspace.getColumnFamilyStore("cf_with_duplicates_3_0");
    Path legacySSTableRoot = Paths.get(System.getProperty(INVALID_LEGACY_SSTABLE_ROOT_PROP), "Keyspace1", "cf_with_duplicates_3_0");
    for (String filename : new String[] { "mb-3-big-CompressionInfo.db", "mb-3-big-Digest.crc32", "mb-3-big-Index.db", "mb-3-big-Summary.db", "mb-3-big-Data.db", "mb-3-big-Filter.db", "mb-3-big-Statistics.db", "mb-3-big-TOC.txt" }) {
        Files.copy(Paths.get(legacySSTableRoot.toString(), filename), cfs.getDirectories().getDirectoryForNewSSTables().toPath().resolve(filename));
    }
    cfs.loadNewSSTables();
    cfs.scrub(true, true, true, 1);
    UntypedResultSet rs = QueryProcessor.executeInternal(String.format("SELECT * FROM \"%s\".cf_with_duplicates_3_0", KEYSPACE));
    assertEquals(1, rs.size());
    QueryProcessor.executeInternal(String.format("DELETE FROM \"%s\".cf_with_duplicates_3_0 WHERE a=1 AND b =2", KEYSPACE));
    rs = QueryProcessor.executeInternal(String.format("SELECT * FROM \"%s\".cf_with_duplicates_3_0", KEYSPACE));
    assertEquals(0, rs.size());
}
Also used : Path(java.nio.file.Path) UntypedResultSet(org.apache.cassandra.cql3.UntypedResultSet) SchemaLoader.createKeyspace(org.apache.cassandra.SchemaLoader.createKeyspace) Test(org.junit.Test)

Example 2 with QueryProcessor.executeInternal

use of org.apache.cassandra.cql3.QueryProcessor.executeInternal in project cassandra by apache.

the class ScrubTest method testValidationCompactStorage.

/**
     * For CASSANDRA-6892 too, check that for a compact table with one cluster column, we can insert whatever
     * we want as value for the clustering column, including something that would conflict with a CQL column definition.
     */
@Test
public void testValidationCompactStorage() throws Exception {
    QueryProcessor.process(String.format("CREATE TABLE \"%s\".test_compact_dynamic_columns (a int, b text, c text, PRIMARY KEY (a, b)) WITH COMPACT STORAGE", KEYSPACE), ConsistencyLevel.ONE);
    Keyspace keyspace = Keyspace.open(KEYSPACE);
    ColumnFamilyStore cfs = keyspace.getColumnFamilyStore("test_compact_dynamic_columns");
    QueryProcessor.executeInternal(String.format("INSERT INTO \"%s\".test_compact_dynamic_columns (a, b, c) VALUES (0, 'a', 'foo')", KEYSPACE));
    QueryProcessor.executeInternal(String.format("INSERT INTO \"%s\".test_compact_dynamic_columns (a, b, c) VALUES (0, 'b', 'bar')", KEYSPACE));
    QueryProcessor.executeInternal(String.format("INSERT INTO \"%s\".test_compact_dynamic_columns (a, b, c) VALUES (0, 'c', 'boo')", KEYSPACE));
    cfs.forceBlockingFlush();
    CompactionManager.instance.performScrub(cfs, true, true, 2);
    // Scrub is silent, but it will remove broken records. So reading everything back to make sure nothing to "scrubbed away"
    UntypedResultSet rs = QueryProcessor.executeInternal(String.format("SELECT * FROM \"%s\".test_compact_dynamic_columns", KEYSPACE));
    assertEquals(3, rs.size());
    Iterator<UntypedResultSet.Row> iter = rs.iterator();
    assertEquals("foo", iter.next().getString("c"));
    assertEquals("bar", iter.next().getString("c"));
    assertEquals("boo", iter.next().getString("c"));
}
Also used : UntypedResultSet(org.apache.cassandra.cql3.UntypedResultSet) SchemaLoader.createKeyspace(org.apache.cassandra.SchemaLoader.createKeyspace) Test(org.junit.Test)

Example 3 with QueryProcessor.executeInternal

use of org.apache.cassandra.cql3.QueryProcessor.executeInternal in project cassandra by apache.

the class CompactionsPurgeTest method testRowTombstoneObservedBeforePurging.

@Test
public void testRowTombstoneObservedBeforePurging() {
    String keyspace = "cql_keyspace";
    String table = "table1";
    ColumnFamilyStore cfs = Keyspace.open(keyspace).getColumnFamilyStore(table);
    cfs.disableAutoCompaction();
    // write a row out to one sstable
    QueryProcessor.executeInternal(String.format("INSERT INTO %s.%s (k, v1, v2) VALUES (%d, '%s', %d)", keyspace, table, 1, "foo", 1));
    cfs.forceBlockingFlush();
    UntypedResultSet result = QueryProcessor.executeInternal(String.format("SELECT * FROM %s.%s WHERE k = %d", keyspace, table, 1));
    assertEquals(1, result.size());
    // write a row tombstone out to a second sstable
    QueryProcessor.executeInternal(String.format("DELETE FROM %s.%s WHERE k = %d", keyspace, table, 1));
    cfs.forceBlockingFlush();
    // basic check that the row is considered deleted
    assertEquals(2, cfs.getLiveSSTables().size());
    result = QueryProcessor.executeInternal(String.format("SELECT * FROM %s.%s WHERE k = %d", keyspace, table, 1));
    assertEquals(0, result.size());
    // compact the two sstables with a gcBefore that does *not* allow the row tombstone to be purged
    FBUtilities.waitOnFutures(CompactionManager.instance.submitMaximal(cfs, (int) (System.currentTimeMillis() / 1000) - 10000, false));
    // the data should be gone, but the tombstone should still exist
    assertEquals(1, cfs.getLiveSSTables().size());
    result = QueryProcessor.executeInternal(String.format("SELECT * FROM %s.%s WHERE k = %d", keyspace, table, 1));
    assertEquals(0, result.size());
    // write a row out to one sstable
    QueryProcessor.executeInternal(String.format("INSERT INTO %s.%s (k, v1, v2) VALUES (%d, '%s', %d)", keyspace, table, 1, "foo", 1));
    cfs.forceBlockingFlush();
    assertEquals(2, cfs.getLiveSSTables().size());
    result = QueryProcessor.executeInternal(String.format("SELECT * FROM %s.%s WHERE k = %d", keyspace, table, 1));
    assertEquals(1, result.size());
    // write a row tombstone out to a different sstable
    QueryProcessor.executeInternal(String.format("DELETE FROM %s.%s WHERE k = %d", keyspace, table, 1));
    cfs.forceBlockingFlush();
    // compact the two sstables with a gcBefore that *does* allow the row tombstone to be purged
    FBUtilities.waitOnFutures(CompactionManager.instance.submitMaximal(cfs, (int) (System.currentTimeMillis() / 1000) + 10000, false));
    // both the data and the tombstone should be gone this time
    assertEquals(0, cfs.getLiveSSTables().size());
    result = QueryProcessor.executeInternal(String.format("SELECT * FROM %s.%s WHERE k = %d", keyspace, table, 1));
    assertEquals(0, result.size());
}
Also used : UntypedResultSet(org.apache.cassandra.cql3.UntypedResultSet) Test(org.junit.Test)

Example 4 with QueryProcessor.executeInternal

use of org.apache.cassandra.cql3.QueryProcessor.executeInternal in project cassandra by apache.

the class LegacySSTableTest method readSimpleTable.

private static void readSimpleTable(String legacyVersion, String compactSuffix, String pkValue) {
    logger.debug("Read simple: legacy_{}_simple{}", legacyVersion, compactSuffix);
    UntypedResultSet rs;
    rs = QueryProcessor.executeInternal(String.format("SELECT val FROM legacy_tables.legacy_%s_simple%s WHERE pk=?", legacyVersion, compactSuffix), pkValue);
    Assert.assertNotNull(rs);
    Assert.assertEquals(1, rs.size());
    Assert.assertEquals("foo bar baz", rs.one().getString("val"));
}
Also used : UntypedResultSet(org.apache.cassandra.cql3.UntypedResultSet)

Example 5 with QueryProcessor.executeInternal

use of org.apache.cassandra.cql3.QueryProcessor.executeInternal in project cassandra by apache.

the class MigrationManagerTest method addNewTable.

@Test
public void addNewTable() throws ConfigurationException {
    final String ksName = KEYSPACE1;
    final String tableName = "anewtable";
    KeyspaceMetadata original = Schema.instance.getKeyspaceMetadata(ksName);
    TableMetadata cfm = addTestTable(original.name, tableName, "A New Table");
    assertFalse(Schema.instance.getKeyspaceMetadata(ksName).tables.get(cfm.name).isPresent());
    MigrationManager.announceNewTable(cfm);
    assertTrue(Schema.instance.getKeyspaceMetadata(ksName).tables.get(cfm.name).isPresent());
    assertEquals(cfm, Schema.instance.getKeyspaceMetadata(ksName).tables.get(cfm.name).get());
    // now read and write to it.
    QueryProcessor.executeInternal(String.format("INSERT INTO %s.%s (key, col, val) VALUES (?, ?, ?)", ksName, tableName), "key0", "col0", "val0");
    // flush to exercise more than just hitting the memtable
    ColumnFamilyStore cfs = Keyspace.open(ksName).getColumnFamilyStore(tableName);
    assertNotNull(cfs);
    cfs.forceBlockingFlush();
    // and make sure we get out what we put in
    UntypedResultSet rows = QueryProcessor.executeInternal(String.format("SELECT * FROM %s.%s", ksName, tableName));
    assertRows(rows, row("key0", "col0", "val0"));
}
Also used : UntypedResultSet(org.apache.cassandra.cql3.UntypedResultSet) ColumnFamilyStore(org.apache.cassandra.db.ColumnFamilyStore) Test(org.junit.Test)

Aggregations

UntypedResultSet (org.apache.cassandra.cql3.UntypedResultSet)15 Test (org.junit.Test)7 SchemaLoader.createKeyspace (org.apache.cassandra.SchemaLoader.createKeyspace)3 ColumnFamilyStore (org.apache.cassandra.db.ColumnFamilyStore)3 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 File (java.io.File)1 Path (java.nio.file.Path)1 Range (org.apache.cassandra.dht.Range)1 Token (org.apache.cassandra.dht.Token)1 CQLSSTableWriter (org.apache.cassandra.io.sstable.CQLSSTableWriter)1 SSTableLoader (org.apache.cassandra.io.sstable.SSTableLoader)1 TableMetadataRef (org.apache.cassandra.schema.TableMetadataRef)1 OutputHandler (org.apache.cassandra.utils.OutputHandler)1