[
https://issues.apache.org/jira/browse/CASSANDRA-6524?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13856788#comment-13856788
]
akshat commented on CASSANDRA-6524:
-----------------------------------
Hi David,
I was able to get rid of error and able to persist into index column family
having CompositeType comparator. The fix was in my Trigger code: to convert
CompositeType to ByteBuffer, which is accepted by RowMutation.
List<AbstractType<?>> keyTypes = new ArrayList<AbstractType<?>>();
keyTypes.add(UTF8Type.instance);
keyTypes.add(UTF8Type.instance);
CompositeType compositeKey = CompositeType.getInstance(keyTypes);
CompositeType.Builder builder = new CompositeType.Builder(compositeKey);
builder.add(ByteBuffer.wrap("part1".getBytes()));
builder.add(ByteBuffer.wrap("part2".getBytes()));
ByteBuffer columnName = builder.build();
This column name above will be added into row mutation.
> Trigger ERROR with java.lang.IllegalArgumentException at
> java.nio.Buffer.limit(Buffer.java:267)
> -----------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-6524
> URL: https://issues.apache.org/jira/browse/CASSANDRA-6524
> Project: Cassandra
> Issue Type: Bug
> Environment: Cassandra 2.0.2 - Windows 7 64bit
> Reporter: David Viet
>
> I follow the Trigger example of Cassandra.
> *My test Column Family*
> CREATE TABLE test (
> key text,
> value text,
> PRIMARY KEY (key)
> )
> *My index for test Column Family*
> CREATE TABLE sampleindex (
> name text,
> value text,
> PRIMARY KEY (name)
> )
> Instead of cell.name(), I use ByteBufferUtil.bytes("value"):
> *mutation.add("sampleindex", ByteBufferUtil.bytes("value"), key
> ,System.currentTimeMillis());*
> This line of code always cause error:
> WARN 14:19:00,854 Exception
> java.lang.IllegalArgumentException
> at java.nio.Buffer.limit(Buffer.java:267)
> at
> org.apache.cassandra.db.marshal.AbstractCompositeType.getBytes(AbstractCompositeType.java:55)
> at
> org.apache.cassandra.db.marshal.AbstractCompositeType.getWithShortLength(AbstractCompositeType.java:64)
> at
> org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:82)
> at
> org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:35)
> at java.util.TreeMap.compare(TreeMap.java:1188)
> at java.util.TreeMap.put(TreeMap.java:531)
> at
> org.apache.cassandra.db.TreeMapBackedSortedColumns.addColumn(TreeMapBackedSortedColumns.java:90)
> at
> org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:116)
> at
> org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:128)
> at org.apache.cassandra.db.RowMutation.add(RowMutation.java:144)
> at org.apache.cassandra.db.RowMutation.add(RowMutation.java:154)
> at
> org.apache.cassandra.triggers.InvertedIndex.augment(InvertedIndex.java:83)
> at
> org.apache.cassandra.triggers.TriggerExecutor.execute(TriggerExecutor.java:123)
> at
> org.apache.cassandra.triggers.TriggerExecutor.execute(TriggerExecutor.java:73)
> at
> org.apache.cassandra.service.StorageProxy.mutateWithTriggers(StorageProxy.java:567)
> at
> org.apache.cassandra.cql3.statements.ModificationStatement.executeWithoutCondition(ModificationStatement.java:379)
> at
> org.apache.cassandra.cql3.statements.ModificationStatement.execute(ModificationStatement.java:363)
> at
> org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:129)
> at
> org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:145)
> at
> org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:136)
> at
> org.apache.cassandra.thrift.CassandraServer.execute_cql3_query(CassandraServer.java:1936)
> at
> org.apache.cassandra.thrift.Cassandra$Processor$execute_cql3_query.getResult(Cassandra.java:4394)
> at
> org.apache.cassandra.thrift.Cassandra$Processor$execute_cql3_query.getResult(Cassandra.java:4378)
> at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
> at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
> at
> org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:194)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> at java.lang.Thread.run(Thread.java:722)
> I think the main reason is from
> https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java
> {code:title=AbstractCompositeType.java|borderStyle=solid}
> public static ByteBuffer getBytes(ByteBuffer bb, int length)
> {
> ByteBuffer copy = bb.duplicate();
> copy.limit(copy.position() + length);
> bb.position(bb.position() + length);
> return copy;
> }
> {code}
> Please consider this problem. Thank you.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)