You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Gavin (JIRA)" <ji...@apache.org> on 2014/01/31 15:08:09 UTC

[jira] [Commented] (CASSANDRA-6612) Query failing due to AssertionError

    [ https://issues.apache.org/jira/browse/CASSANDRA-6612?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13887773#comment-13887773 ] 

Gavin commented on CASSANDRA-6612:
----------------------------------

There seem to be some issues with indexing on fields that are part of your primary key (see also https://issues.apache.org/jira/browse/CASSANDRA-6470).  You may want to try revising your schema and/or query to remove the need to index key columns.

I was also able to reproduce this error in cassandra 2.0.1 and 2.0.4 using cqlsh or the java driver (I tried two versions of the 2.0.0rc, reproduction code below).

public static void main(String[] args) {
	com.datastax.driver.core.Session session = null;
	try {
		String address = "localhost";
		session = new com.datastax.driver.core.Cluster.Builder().addContactPoint(address).build().connect();
		//create keyspace, table, and indices
		session.execute("create keyspace if not exists testing  with replication = { 'class':'SimpleStrategy', 'replication_factor':1 }");
		session.execute("drop table if exists testing.timerangetest");
		//creating the table using "i_end" as a partition key reproduces https://issues.apache.org/jira/browse/CASSANDRA-6612
		session.execute("create table if not exists testing.timerangetest (id text, end timestamp, i_eq_dummy blob, i_start timestamp, i_end timestamp, primary key ((id, end)))");
		//creating the table using "i_end" as a cluster key reproduces https://issues.apache.org/jira/browse/CASSANDRA-6470
		//session.execute("create table if not exists testing.timerangetest (id text, i_eq_dummy blob, i_start timestamp, i_end timestamp, primary key (id, i_end))");

		session.execute("create index if not exists on testing.timerangetest (i_start)");
		session.execute("create index if not exists on testing.timerangetest (i_end)");
		session.execute("create index if not exists on testing.timerangetest (i_eq_dummy)");
		//insert some values
		session.execute("insert into testing.timerangetest (id, end, i_eq_dummy, i_start, i_end) values ('row1', 5, 0x00, 1, 5)");
		session.execute("insert into testing.timerangetest (id, end, i_eq_dummy, i_start, i_end) values ('row2', 13, 0x00, 3, 13)");
		session.execute("insert into testing.timerangetest (id, end, i_eq_dummy, i_start, i_end) values ('row3', 17, 0x00, 12, 17)");
		session.execute("insert into testing.timerangetest (id, end, i_eq_dummy, i_start, i_end) values ('row4', 22, 0x00, 16, 22)");
		session.execute("insert into testing.timerangetest (id, end, i_eq_dummy, i_start, i_end) values ('row5', 24, 0x00, 21, 24)");
		session.execute("insert into testing.timerangetest (id, end, i_eq_dummy, i_start, i_end) values ('row6', 23, 0x00, 4, 23)");
		//query for everything
		System.out.println("all records:");
		for (com.datastax.driver.core.Row r : session.execute("select * from testing.timerangetest").all()) {
			System.out.println("  " + r.getString("id") + " @ " + r.getDate("i_start").getTime() + "-" + r.getDate("i_end").getTime());
		}
		//query for records that were active between 10 and 20
		System.out.println("active records from 10-20:");
		for (com.datastax.driver.core.Row r : session.execute("select * from testing.timerangetest where i_eq_dummy=0x00 and i_end >= 10 and i_start <= 20 allow filtering").all()) {
			System.out.println("  " + r.getString("id") + " @ " + r.getDate("i_start").getTime() + "-" + r.getDate("i_end").getTime());
		}
		//query for records that were active between 10 and 20 where id='row2'
		System.out.println("active records from 10-20 where id='row2' and end=13:");
		for (com.datastax.driver.core.Row r : session.execute("select * from testing.timerangetest where id='row2' and end=13 and i_eq_dummy=0x00 and i_end >= 10 and i_start <= 20 allow filtering").all()) {
			System.out.println("  " + r.getString("id") + " @ " + r.getDate("i_start").getTime() + "-" + r.getDate("i_end").getTime());
		}
	} finally {
		if (session != null) {
			com.datastax.driver.core.Cluster c = session.getCluster();
			session.close();
			c.close();
		}
	}
}

> Query failing due to AssertionError
> -----------------------------------
>
>                 Key: CASSANDRA-6612
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6612
>             Project: Cassandra
>          Issue Type: Bug
>         Environment: Cassandra-2.0.4, CQL3, datastax driver 2.0.0-rc2
>            Reporter: A Verma
>
> I am trying out Cassandra for the first time and running it locally for simple session management db. [Cassandra-2.0.4, CQL3, datastax driver 2.0.0-rc2]
> The following count query works fine when there is no data in the table:
> {code}
> select count(*) from session_data where app_name=? and account=? and last_access > ?
> {code}
> But after even a single row is inserted into the table, the query fails with the following error:
> {code}
>     java.lang.AssertionError
> 	at org.apache.cassandra.db.filter.ExtendedFilter$WithClauses.getExtraFilter(ExtendedFilter.java:258)
> 	at org.apache.cassandra.db.ColumnFamilyStore.filter(ColumnFamilyStore.java:1719)
> 	at org.apache.cassandra.db.ColumnFamilyStore.getRangeSlice(ColumnFamilyStore.java:1674)
> 	at org.apache.cassandra.db.PagedRangeCommand.executeLocally(PagedRangeCommand.java:111)
> 	at org.apache.cassandra.service.StorageProxy$LocalRangeSliceRunnable.runMayThrow(StorageProxy.java:1418)
> 	at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1931)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:744)
> {code}
> Here is the schema I am using:
> {code}
>     CREATE KEYSPACE session WITH replication= {'class': 'SimpleStrategy', 'replication_factor': 1};
>     CREATE TABLE session_data (
>     username text,
>     session_id text,
>     app_name text,
>     account text,
>     last_access timestamp,
>     created_on timestamp,
>     PRIMARY KEY (username, session_id, app_name, account)
>     );
>     create index sessionIndex ON session_data (session_id);
>     create index sessionAppName ON session_data (app_name);
>     create index lastAccessIndex ON session_data (last_access);
> {code}



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)