cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex Petrov (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CASSANDRA-13302) last row of previous page == first row of next page while querying data using SASI index
Date Fri, 12 May 2017 07:54:04 GMT

     [ https://issues.apache.org/jira/browse/CASSANDRA-13302?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Alex Petrov updated CASSANDRA-13302:
------------------------------------
       Resolution: Fixed
    Fix Version/s: 3.11.x
                   4.0
           Status: Resolved  (was: Ready to Commit)

> last row of previous page == first row of next page while querying data using SASI index
> ----------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-13302
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13302
>             Project: Cassandra
>          Issue Type: Bug
>         Environment: Tested with C* 3.9 and 3.10.
>            Reporter: Andy Tolbert
>            Assignee: Alex Petrov
>             Fix For: 4.0, 3.11.x
>
>
> Apologies if this is a duplicate (couldn't track down an existing bug).
> Similarly to [CASSANDRA-11208], it appears it is possible to retrieve duplicate rows
when paging using a SASI index as documented in [JAVA-1413|https://datastax-oss.atlassian.net/browse/JAVA-1413],
the following test demonstrates that data is repeated while querying using a SASI index:
> {code:java}
> public class TestPagingBug
> {
> 	public static void main(String[] args)
> 	{
> 		Cluster.Builder builder = Cluster.builder();
> 		Cluster c = builder.addContactPoints("192.168.98.190").build();		
> 		Session s = c.connect();
> 		
> 		s.execute("CREATE KEYSPACE IF NOT EXISTS test WITH replication = { 'class' : 'SimpleStrategy',
'replication_factor' : 3 }");
> 		s.execute("CREATE TABLE IF NOT EXISTS test.test_table_sec(sec BIGINT PRIMARY KEY, id
INT)");
>                 //create secondary index on ID column, used for select statement
>                 String index = "CREATE CUSTOM INDEX test_table_sec_idx ON test.test_table_sec
(id) USING 'org.apache.cassandra.index.sasi.SASIIndex' "
>                 + "WITH OPTIONS = { 'mode': 'PREFIX' }";
>                 s.execute(index);
> 		
> 		PreparedStatement insert = s.prepare("INSERT INTO test.test_table_sec (id, sec) VALUES
(1, ?)");		
> 		for (int i = 0; i < 1000; i++)
> 			s.execute(insert.bind((long) i));
> 		
> 		PreparedStatement select = s.prepare("SELECT sec FROM test.test_table_sec WHERE id
= 1");
> 		
> 		long lastSec = -1;		
> 		for (Row row : s.execute(select.bind().setFetchSize(300)))
> 		{
> 			long sec = row.getLong("sec");
> 			if (sec == lastSec)
> 				System.out.println(String.format("Duplicated id %d", sec));
> 			
> 			lastSec = sec;
> 		}
> 		System.exit(0);
> 	}
> }
> {code}
> The program outputs the following:
> {noformat}
> Duplicated id 23
> Duplicated id 192
> Duplicated id 684
> {noformat}
> Note that the simple primary key is required to reproduce this.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


Mime
View raw message