Search in sources :

Example 1 with Table

use of org.apache.cassandra.db.Table in project eiger by wlloyd.

the class CompactionsPurgeTest method testMinorCompactionPurge.

@Test
public void testMinorCompactionPurge() throws IOException, ExecutionException, InterruptedException {
    CompactionManager.instance.disableAutoCompaction();
    Table table = Table.open(TABLE2);
    String cfName = "Standard1";
    ColumnFamilyStore cfs = table.getColumnFamilyStore(cfName);
    RowMutation rm;
    for (int k = 1; k <= 2; ++k) {
        DecoratedKey key = Util.dk("key" + k);
        // inserts
        rm = new RowMutation(TABLE2, key.key);
        for (int i = 0; i < 10; i++) {
            rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes(String.valueOf(i))), ByteBufferUtil.EMPTY_BYTE_BUFFER, 0);
        }
        rm.apply();
        cfs.forceBlockingFlush();
        // deletes
        for (int i = 0; i < 10; i++) {
            rm = new RowMutation(TABLE2, key.key);
            rm.delete(new QueryPath(cfName, null, ByteBufferUtil.bytes(String.valueOf(i))), 1);
            rm.apply();
        }
        cfs.forceBlockingFlush();
    }
    DecoratedKey key1 = Util.dk("key1");
    DecoratedKey key2 = Util.dk("key2");
    // flush, remember the current sstable and then resurrect one column
    // for first key. Then submit minor compaction on remembered sstables.
    cfs.forceBlockingFlush();
    Collection<SSTableReader> sstablesIncomplete = cfs.getSSTables();
    rm = new RowMutation(TABLE2, key1.key);
    rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes(String.valueOf(5))), ByteBufferUtil.EMPTY_BYTE_BUFFER, 2);
    rm.apply();
    cfs.forceBlockingFlush();
    new CompactionTask(cfs, sstablesIncomplete, Integer.MAX_VALUE).execute(null);
    // verify that minor compaction does not GC when key is present
    // in a non-compacted sstable
    ColumnFamily cf = cfs.getColumnFamily(QueryFilter.getIdentityFilter(key1, new QueryPath(cfName)));
    assert cf.getColumnCount() == 10;
    // verify that minor compaction does GC when key is provably not
    // present in a non-compacted sstable
    cf = cfs.getColumnFamily(QueryFilter.getIdentityFilter(key2, new QueryPath(cfName)));
    assert cf == null;
}
Also used : QueryPath(org.apache.cassandra.db.filter.QueryPath) SSTableReader(org.apache.cassandra.io.sstable.SSTableReader) Table(org.apache.cassandra.db.Table) DecoratedKey(org.apache.cassandra.db.DecoratedKey) ColumnFamilyStore(org.apache.cassandra.db.ColumnFamilyStore) RowMutation(org.apache.cassandra.db.RowMutation) ColumnFamily(org.apache.cassandra.db.ColumnFamily) Test(org.junit.Test)

Example 2 with Table

use of org.apache.cassandra.db.Table in project eiger by wlloyd.

the class CompactionsPurgeTest method testMajorCompactionPurge.

@Test
public void testMajorCompactionPurge() throws IOException, ExecutionException, InterruptedException {
    CompactionManager.instance.disableAutoCompaction();
    Table table = Table.open(TABLE1);
    String cfName = "Standard1";
    ColumnFamilyStore cfs = table.getColumnFamilyStore(cfName);
    DecoratedKey key = Util.dk("key1");
    RowMutation rm;
    // inserts
    rm = new RowMutation(TABLE1, key.key);
    for (int i = 0; i < 10; i++) {
        rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes(String.valueOf(i))), ByteBufferUtil.EMPTY_BYTE_BUFFER, 0);
    }
    rm.apply();
    cfs.forceBlockingFlush();
    // deletes
    for (int i = 0; i < 10; i++) {
        rm = new RowMutation(TABLE1, key.key);
        rm.delete(new QueryPath(cfName, null, ByteBufferUtil.bytes(String.valueOf(i))), 1);
        rm.apply();
    }
    cfs.forceBlockingFlush();
    // resurrect one column
    rm = new RowMutation(TABLE1, key.key);
    rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes(String.valueOf(5))), ByteBufferUtil.EMPTY_BYTE_BUFFER, 2);
    rm.apply();
    cfs.forceBlockingFlush();
    // major compact and test that all columns but the resurrected one is completely gone
    CompactionManager.instance.submitMaximal(cfs, Integer.MAX_VALUE).get();
    cfs.invalidateCachedRow(key);
    ColumnFamily cf = cfs.getColumnFamily(QueryFilter.getIdentityFilter(key, new QueryPath(cfName)));
    assertColumns(cf, "5");
    assert cf.getColumn(ByteBufferUtil.bytes(String.valueOf(5))) != null;
}
Also used : QueryPath(org.apache.cassandra.db.filter.QueryPath) Table(org.apache.cassandra.db.Table) DecoratedKey(org.apache.cassandra.db.DecoratedKey) ColumnFamilyStore(org.apache.cassandra.db.ColumnFamilyStore) RowMutation(org.apache.cassandra.db.RowMutation) ColumnFamily(org.apache.cassandra.db.ColumnFamily) Test(org.junit.Test)

Example 3 with Table

use of org.apache.cassandra.db.Table in project eiger by wlloyd.

the class CompactionsPurgeTest method testCompactionPurgeOneFile.

@Test
public void testCompactionPurgeOneFile() throws IOException, ExecutionException, InterruptedException {
    CompactionManager.instance.disableAutoCompaction();
    Table table = Table.open(TABLE1);
    String cfName = "Standard2";
    ColumnFamilyStore cfs = table.getColumnFamilyStore(cfName);
    DecoratedKey key = Util.dk("key1");
    RowMutation rm;
    // inserts
    rm = new RowMutation(TABLE1, key.key);
    for (int i = 0; i < 5; i++) {
        rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes(String.valueOf(i))), ByteBufferUtil.EMPTY_BYTE_BUFFER, 0);
    }
    rm.apply();
    // deletes
    for (int i = 0; i < 5; i++) {
        rm = new RowMutation(TABLE1, key.key);
        rm.delete(new QueryPath(cfName, null, ByteBufferUtil.bytes(String.valueOf(i))), 1);
        rm.apply();
    }
    cfs.forceBlockingFlush();
    // inserts & deletes were in the same memtable -> only deletes in sstable
    assert cfs.getSSTables().size() == 1 : cfs.getSSTables();
    // compact and test that the row is completely gone
    Util.compactAll(cfs).get();
    assert cfs.getSSTables().isEmpty();
    ColumnFamily cf = table.getColumnFamilyStore(cfName).getColumnFamily(QueryFilter.getIdentityFilter(key, new QueryPath(cfName)));
    assert cf == null : cf;
}
Also used : QueryPath(org.apache.cassandra.db.filter.QueryPath) Table(org.apache.cassandra.db.Table) DecoratedKey(org.apache.cassandra.db.DecoratedKey) ColumnFamilyStore(org.apache.cassandra.db.ColumnFamilyStore) RowMutation(org.apache.cassandra.db.RowMutation) ColumnFamily(org.apache.cassandra.db.ColumnFamily) Test(org.junit.Test)

Example 4 with Table

use of org.apache.cassandra.db.Table in project eiger by wlloyd.

the class StorageService method getValidColumnFamilies.

public Iterable<ColumnFamilyStore> getValidColumnFamilies(String tableName, String... cfNames) throws IOException {
    Table table = getValidTable(tableName);
    if (cfNames.length == 0)
        // all stores are interesting
        return table.getColumnFamilyStores();
    // filter out interesting stores
    Set<ColumnFamilyStore> valid = new HashSet<ColumnFamilyStore>();
    for (String cfName : cfNames) {
        ColumnFamilyStore cfStore = table.getColumnFamilyStore(cfName);
        if (cfStore == null) {
            // this means there was a cf passed in that is not recognized in the keyspace. report it and continue.
            logger_.warn(String.format("Invalid column family specified: %s. Proceeding with others.", cfName));
            continue;
        }
        valid.add(cfStore);
    }
    return valid;
}
Also used : Table(org.apache.cassandra.db.Table)

Example 5 with Table

use of org.apache.cassandra.db.Table in project eiger by wlloyd.

the class StorageService method getSplits.

/**
 * @return list of Tokens (_not_ keys!) breaking up the data this node is responsible for into pieces of roughly keysPerSplit
 */
public List<Token> getSplits(String table, String cfName, Range<Token> range, int keysPerSplit) {
    List<Token> tokens = new ArrayList<Token>();
    // we use the actual Range token for the first and last brackets of the splits to ensure correctness
    tokens.add(range.left);
    List<DecoratedKey> keys = new ArrayList<DecoratedKey>();
    Table t = Table.open(table);
    ColumnFamilyStore cfs = t.getColumnFamilyStore(cfName);
    for (DecoratedKey sample : cfs.allKeySamples()) {
        if (range.contains(sample.token))
            keys.add(sample);
    }
    FBUtilities.sortSampledKeys(keys, range);
    int splits = keys.size() * DatabaseDescriptor.getIndexInterval() / keysPerSplit;
    if (keys.size() >= splits) {
        for (int i = 1; i < splits; i++) {
            int index = i * (keys.size() / splits);
            tokens.add(keys.get(index).token);
        }
    }
    tokens.add(range.right);
    return tokens;
}
Also used : Table(org.apache.cassandra.db.Table)

Aggregations

Table (org.apache.cassandra.db.Table)17 ColumnFamilyStore (org.apache.cassandra.db.ColumnFamilyStore)9 RowMutation (org.apache.cassandra.db.RowMutation)8 QueryPath (org.apache.cassandra.db.filter.QueryPath)8 DecoratedKey (org.apache.cassandra.db.DecoratedKey)7 ColumnFamily (org.apache.cassandra.db.ColumnFamily)6 Test (org.junit.Test)6 IOException (java.io.IOException)5 IColumn (org.apache.cassandra.db.IColumn)2 InetAddress (java.net.InetAddress)1 ByteBuffer (java.nio.ByteBuffer)1 HashSet (java.util.HashSet)1 DebuggableScheduledThreadPoolExecutor (org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor)1 SuperColumn (org.apache.cassandra.db.SuperColumn)1 Descriptor (org.apache.cassandra.io.sstable.Descriptor)1 SSTable (org.apache.cassandra.io.sstable.SSTable)1 SSTableReader (org.apache.cassandra.io.sstable.SSTableReader)1 WrappedRunnable (org.apache.cassandra.utils.WrappedRunnable)1