You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jonathan Ellis (Resolved) (JIRA)" <ji...@apache.org> on 2011/11/08 19:03:51 UTC

[jira] [Resolved] (CASSANDRA-3467) get_slice, super column family with UUIDType as column comparator

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

Jonathan Ellis resolved CASSANDRA-3467.
---------------------------------------

    Resolution: Fixed
      Reviewer: jbellis
      Assignee: Rick Branson

CASSANDRA-3446 fixed this in passing, but I committed the test to prevent future regressions.  Thanks!
                
> get_slice, super column family with UUIDType as column comparator
> -----------------------------------------------------------------
>
>                 Key: CASSANDRA-3467
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3467
>             Project: Cassandra
>          Issue Type: Bug
>          Components: API
>    Affects Versions: 1.0.0
>         Environment: ubuntu 11.04
> java version "1.6.0_26"
> Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
> Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
> php interface build with thrift 0.7.0
>            Reporter: alesl
>            Assignee: Rick Branson
>            Priority: Minor
>             Fix For: 1.0.3
>
>         Attachments: 3467-get-slice-on-scf-with-uuidtype-comparator.patch
>
>
> get_slice with more than one column selected by predicate fails, when comparator is set to (Lexical|Time)UUIDType and more than one column is being selected.
> {code}
> // Sample data:
> create column family A with column_type = Super and comparator = LexicalUUIDType and subcomparator = UTF8Type and default_validation_class = UTF8Type;
> set A[ascii('key')][lexicaluuid('b139337e-fb6d-41e1-a868-1db7f2a52a42')]['a'] = 'A';
> set A[ascii('key')][lexicaluuid('b139337e-fb6d-41e1-a868-1db7f2a52a42')]['b'] = 'B';
> set A[ascii('key')][lexicaluuid('b139337e-fb6d-41e1-a868-1db7f2a52a42')]['c'] = 'C';
> set A[ascii('key')][lexicaluuid('b139337e-fb6d-41e1-a868-1db7f2a52a42')]['d'] = 'D';
> set A[ascii('key')][lexicaluuid('b139337e-fb6d-41e1-a868-1db7f2a52a42')]['e'] = 'E';
> // Failed call
> $client->get_slice(
>     'key', 
>     new ColumnParent(array(
>         'column_family'=>'A', 
>         'super_column'=>base64_decode('sTkzfvttQeGoaB238qUqQg==')
>     )), 
>     new SlicePredicate(array(
>         'column_names'=>array('a', 'b')
>     )), 
>     1
> );
> // Exception thrown
> ERROR [ReadStage:302] 2011-11-07 21:29:30,339 AbstractCassandraDaemon.java (line 133) Fatal exception in thread Thread[ReadStage:302,5,main]
> java.lang.RuntimeException: java.lang.IndexOutOfBoundsException
> 	at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1269)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 	at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.IndexOutOfBoundsException
> 	at java.nio.Buffer.checkIndex(Buffer.java:520)
> 	at java.nio.HeapByteBuffer.getLong(HeapByteBuffer.java:391)
> 	at org.apache.cassandra.utils.UUIDGen.getUUID(UUIDGen.java:67)
> 	at org.apache.cassandra.db.marshal.LexicalUUIDType.compare(LexicalUUIDType.java:58)
> 	at org.apache.cassandra.db.marshal.LexicalUUIDType.compare(LexicalUUIDType.java:31)
> 	at java.util.TreeMap.put(TreeMap.java:530)
> 	at java.util.TreeSet.add(TreeSet.java:238)
> 	at java.util.AbstractCollection.addAll(AbstractCollection.java:305)
> 	at java.util.TreeSet.addAll(TreeSet.java:295)
> 	at org.apache.cassandra.db.CollationController.collectTimeOrderedData(CollationController.java:98)
> 	at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:61)
> 	at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1278)
> 	at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1164)
> 	at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1131)
> 	at org.apache.cassandra.db.Table.getRow(Table.java:378)
> 	at org.apache.cassandra.db.SliceByNamesReadCommand.getRow(SliceByNamesReadCommand.java:58)
> 	at org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:797)
> 	at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1265)
> 	... 3 more
> // This works though
> $client->get_slice(
>     'key', 
>     new ColumnParent(array(
>         'column_family'=>'A', 
>         'super_column'=>base64_decode('sTkzfvttQeGoaB238qUqQg==')
>     )), 
>     new SlicePredicate(array(
>         'column_names'=>array('a')
>     )), 
>     1
> );
> // This works too
> $client->get_slice('key', 
> 	new ColumnParent(array(
> 		'column_family'=>'A', 
> 		'super_column'=>base64_decode('sTkzfvttQeGoaB238qUqQg==')
> 	)), 
> 	new SlicePredicate(array(
> 		'slice_range'=>new SliceRange(array(
> 			'start'=>'', 
> 			'finish'=>'',
> 			'reversed'=>false,
> 			'count'=>100
> 		))
> 	)), 1);
> {code}
> Regards
> ales

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira