Search in sources :

Example 6 with IdentityQueryFilter

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

the class StreamingTransferTest method testTransferTable.

@Test
public void testTransferTable() throws Exception {
    final Table table = Table.open("Keyspace1");
    final ColumnFamilyStore cfs = table.getColumnFamilyStore("Indexed1");
    List<String> keys = createAndTransfer(table, cfs, new Mutator() {

        public void mutate(String key, String col, long timestamp) throws Exception {
            long val = key.hashCode();
            RowMutation rm = new RowMutation("Keyspace1", ByteBufferUtil.bytes(key));
            ColumnFamily cf = ColumnFamily.create(table.name, cfs.columnFamily);
            cf.addColumn(column(col, "v", timestamp));
            cf.addColumn(new Column(ByteBufferUtil.bytes("birthdate"), ByteBufferUtil.bytes(val), timestamp));
            rm.add(cf);
            logger.debug("Applying row to transfer " + rm);
            rm.apply();
        }
    });
    // confirm that the secondary index was recovered
    for (String key : keys) {
        long val = key.hashCode();
        IPartitioner p = StorageService.getPartitioner();
        IndexExpression expr = new IndexExpression(ByteBufferUtil.bytes("birthdate"), IndexOperator.EQ, ByteBufferUtil.bytes(val));
        List<IndexExpression> clause = Arrays.asList(expr);
        IFilter filter = new IdentityQueryFilter();
        Range<RowPosition> range = Util.range("", "");
        List<Row> rows = cfs.search(clause, range, 100, filter);
        assertEquals(1, rows.size());
        assert rows.get(0).key.key.equals(ByteBufferUtil.bytes(key));
    }
}
Also used : IndexExpression(org.apache.cassandra.thrift.IndexExpression) IdentityQueryFilter(org.apache.cassandra.db.columniterator.IdentityQueryFilter) IFilter(org.apache.cassandra.db.filter.IFilter) IPartitioner(org.apache.cassandra.dht.IPartitioner) Test(org.junit.Test)

Example 7 with IdentityQueryFilter

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

the class RowRepairResolver method resolveSuperset.

static ColumnFamily resolveSuperset(Iterable<ColumnFamily> versions) {
    assert Iterables.size(versions) > 0;
    ColumnFamily resolved = null;
    for (ColumnFamily cf : versions) {
        if (cf == null)
            continue;
        if (resolved == null)
            resolved = cf.cloneMeShallow();
        else
            resolved.delete(cf);
    }
    if (resolved == null)
        return null;
    // mimic the collectCollatedColumn + removeDeleted path that getColumnFamily takes.
    // this will handle removing columns and subcolumns that are supressed by a row or
    // supercolumn tombstone.
    QueryFilter filter = new QueryFilter(null, new QueryPath(resolved.metadata().cfName), new IdentityQueryFilter());
    List<CloseableIterator<IColumn>> iters = new ArrayList<CloseableIterator<IColumn>>();
    for (ColumnFamily version : versions) {
        if (version == null)
            continue;
        iters.add(FBUtilities.closeableIterator(version.iterator()));
    }
    filter.collateColumns(resolved, iters, Integer.MIN_VALUE);
    return ColumnFamilyStore.removeDeleted(resolved, Integer.MIN_VALUE);
}
Also used : QueryPath(org.apache.cassandra.db.filter.QueryPath) IdentityQueryFilter(org.apache.cassandra.db.columniterator.IdentityQueryFilter) QueryFilter(org.apache.cassandra.db.filter.QueryFilter) IdentityQueryFilter(org.apache.cassandra.db.columniterator.IdentityQueryFilter) CloseableIterator(org.apache.cassandra.utils.CloseableIterator) ArrayList(java.util.ArrayList)

Example 8 with IdentityQueryFilter

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

the class ColumnFamilyStoreTest method testIndexScanWithLimitOne.

// See CASSANDRA-2628
@Test
public void testIndexScanWithLimitOne() throws IOException {
    RowMutation rm;
    rm = new RowMutation("Keyspace1", ByteBufferUtil.bytes("kk1"));
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("notbirthdate")), ByteBufferUtil.bytes(1L), 0);
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(1L), 0);
    rm.apply();
    rm = new RowMutation("Keyspace1", ByteBufferUtil.bytes("kk2"));
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("notbirthdate")), ByteBufferUtil.bytes(2L), 0);
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(1L), 0);
    rm.apply();
    rm = new RowMutation("Keyspace1", ByteBufferUtil.bytes("kk3"));
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("notbirthdate")), ByteBufferUtil.bytes(2L), 0);
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(1L), 0);
    rm.apply();
    rm = new RowMutation("Keyspace1", ByteBufferUtil.bytes("kk4"));
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("notbirthdate")), ByteBufferUtil.bytes(2L), 0);
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(1L), 0);
    rm.apply();
    // basic single-expression query
    IndexExpression expr1 = new IndexExpression(ByteBufferUtil.bytes("birthdate"), IndexOperator.EQ, ByteBufferUtil.bytes(1L));
    IndexExpression expr2 = new IndexExpression(ByteBufferUtil.bytes("notbirthdate"), IndexOperator.GT, ByteBufferUtil.bytes(1L));
    List<IndexExpression> clause = Arrays.asList(new IndexExpression[] { expr1, expr2 });
    IFilter filter = new IdentityQueryFilter();
    IPartitioner p = StorageService.getPartitioner();
    Range<RowPosition> range = Util.range("", "");
    List<Row> rows = Table.open("Keyspace1").getColumnFamilyStore("Indexed1").search(clause, range, 1, filter);
    assert rows != null;
    assert rows.size() == 1 : StringUtils.join(rows, ",");
}
Also used : IdentityQueryFilter(org.apache.cassandra.db.columniterator.IdentityQueryFilter) IPartitioner(org.apache.cassandra.dht.IPartitioner) Test(org.junit.Test)

Example 9 with IdentityQueryFilter

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

the class ColumnFamilyStoreTest method queryBirthdate.

private void queryBirthdate(Table table) throws CharacterCodingException {
    IndexExpression expr = new IndexExpression(ByteBufferUtil.bytes("birthdate"), IndexOperator.EQ, ByteBufferUtil.bytes(1L));
    List<IndexExpression> clause = Arrays.asList(expr);
    IFilter filter = new IdentityQueryFilter();
    IPartitioner p = StorageService.getPartitioner();
    List<Row> rows = table.getColumnFamilyStore("Indexed2").search(clause, Util.range("", ""), 100, filter);
    assert rows.size() == 1 : StringUtils.join(rows, ",");
    assertEquals("k1", ByteBufferUtil.string(rows.get(0).key.key));
}
Also used : IdentityQueryFilter(org.apache.cassandra.db.columniterator.IdentityQueryFilter) IPartitioner(org.apache.cassandra.dht.IPartitioner)

Example 10 with IdentityQueryFilter

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

the class ColumnFamilyStoreTest method testIndexUpdate.

@Test
public void testIndexUpdate() throws IOException {
    Table table = Table.open("Keyspace2");
    // create a row and update the birthdate value, test that the index query fetches the new version
    RowMutation rm;
    rm = new RowMutation("Keyspace2", ByteBufferUtil.bytes("k1"));
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(1L), 1);
    rm.apply();
    rm = new RowMutation("Keyspace2", ByteBufferUtil.bytes("k1"));
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(2L), 2);
    rm.apply();
    IndexExpression expr = new IndexExpression(ByteBufferUtil.bytes("birthdate"), IndexOperator.EQ, ByteBufferUtil.bytes(1L));
    List<IndexExpression> clause = Arrays.asList(expr);
    IFilter filter = new IdentityQueryFilter();
    IPartitioner p = StorageService.getPartitioner();
    Range<RowPosition> range = Util.range("", "");
    List<Row> rows = table.getColumnFamilyStore("Indexed1").search(clause, range, 100, filter);
    assert rows.size() == 0;
    expr = new IndexExpression(ByteBufferUtil.bytes("birthdate"), IndexOperator.EQ, ByteBufferUtil.bytes(2L));
    clause = Arrays.asList(expr);
    rows = table.getColumnFamilyStore("Indexed1").search(clause, range, 100, filter);
    String key = ByteBufferUtil.string(rows.get(0).key.key);
    assert "k1".equals(key);
    // update the birthdate value with an OLDER timestamp, and test that the index ignores this
    rm = new RowMutation("Keyspace2", ByteBufferUtil.bytes("k1"));
    rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(3L), 0);
    rm.apply();
    rows = table.getColumnFamilyStore("Indexed1").search(clause, range, 100, filter);
    key = ByteBufferUtil.string(rows.get(0).key.key);
    assert "k1".equals(key);
}
Also used : SSTable(org.apache.cassandra.io.sstable.SSTable) IdentityQueryFilter(org.apache.cassandra.db.columniterator.IdentityQueryFilter) IPartitioner(org.apache.cassandra.dht.IPartitioner) Test(org.junit.Test)

Aggregations

IdentityQueryFilter (org.apache.cassandra.db.columniterator.IdentityQueryFilter)11 IPartitioner (org.apache.cassandra.dht.IPartitioner)9 Test (org.junit.Test)8 IndexExpression (org.apache.cassandra.thrift.IndexExpression)3 IFilter (org.apache.cassandra.db.filter.IFilter)2 ByteBuffer (java.nio.ByteBuffer)1 ArrayList (java.util.ArrayList)1 QueryFilter (org.apache.cassandra.db.filter.QueryFilter)1 QueryPath (org.apache.cassandra.db.filter.QueryPath)1 SecondaryIndex (org.apache.cassandra.db.index.SecondaryIndex)1 BytesToken (org.apache.cassandra.dht.BytesToken)1 SSTable (org.apache.cassandra.io.sstable.SSTable)1 TokenMetadata (org.apache.cassandra.locator.TokenMetadata)1 CloseableIterator (org.apache.cassandra.utils.CloseableIterator)1 NodeId (org.apache.cassandra.utils.NodeId)1