You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by George Ciubotaru <ge...@skillpages.com> on 2011/04/01 10:24:15 UTC

RE: Using RowMutations with super columns

Hello,

The exception from the previous email was caused by a mistake of mine, sorry for that. I've fixed it, no more exceptions of the client (bulk loader) side but I'm getting now an exception in Cassandra. My configuration is simple: I have a single Cassandra instance running and I launch the bulk loader from a different box (using version 0.7.0).

ERROR 00:20:17,877 Fatal exception in thread Thread[MutationStage:33,5,main]
java.lang.RuntimeException: java.io.IOException: Invalid localDeleteTime read: 0
        at org.apache.cassandra.db.BinaryVerbHandler.doVerb(BinaryVerbHandler.java:54)
        at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:63)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Invalid localDeleteTime read: 0
        at org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:356)
        at org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:313)
        at org.apache.cassandra.db.ColumnFamilySerializer.deserializeColumns(ColumnFamilySerializer.java:129)
        at org.apache.cassandra.db.ColumnFamilySerializer.deserialize(ColumnFamlySerializer.java:120)
        at org.apache.cassandra.db.RowMutationSerializer.defreezeTheMaps(RowMutation.java:385)
        at org.apache.cassandra.db.RowMutationSerializer.deserialize(RowMutation.java:395)
        at org.apache.cassandra.db.RowMutationSerializer.deserialize(RowMutation.java:353)
        at org.apache.cassandra.db.RowMutationMessageSerializer.deserialize(RowMutationMessage.java:81)
        at org.apache.cassandra.db.BinaryVerbHandler.doVerb(BinaryVerbHandler.java:42)
        ... 4 more

I have found some other discussion thread with e similar error but unfortunately no concrete response: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/Cassandra-0-7-beta3-BinaryMemtable-and-Supercolumns-td5730324.html

Thanks,
George

From: aaron morton [mailto:aaron@thelastpickle.com]
Sent: 31 March 2011 14:03
To: user@cassandra.apache.org
Subject: Re: Using RowMutations with super columns

The CassandraBulkLoader example is written to use Super Columns, so seems odd.

Do you have the rest of the error stack ?

Aaron


On 31 Mar 2011, at 04:54, George Ciubotaru wrote:


Hello,

I'm using CassandraBulkLoader.java (https://svn.apache.org/repos/asf/cassandra/trunk/contrib/bmt_example/CassandraBulkLoader.java) as base to build a bulk loader. Everything works fine for standard column families but it fails when trying to insert data in super columns throwing this exception:

Exception in thread "main" java.lang.UnsupportedOperationException: This operation is not supported for Super Columns.
                at org.apache.cassandra.db.SuperColumn.timestamp(SuperColumn.java:143)
                at org.apache.cassandra.db.ColumnSerializer.serialize(ColumnSerializer.java:55)
                at org.apache.cassandra.db.ColumnSerializer.serialize(ColumnSerializer.java:35)
                at org.apache.cassandra.db.ColumnFamilySerializer.serializeForSSTable(ColumnFamilySerializer.java:87)
                at org.apache.cassandra.db.ColumnFamilySerializer.serializeWithIndexes(ColumnFamilySerializer.java:106)

Any idea here?

Thank you,
George


Re: Using RowMutations with super columns

Posted by aaron morton <aa...@thelastpickle.com>.
I've not used that binary memtable example before, but reading the contrib example (from 0.7.4) there is something odd.

We build a CF in the reduce() function and then serialise it in the createMessage() function and hide it inside another Column. So that eventually Table.load() can use that column name which is the CF ID and it's value to call ColumnFamilyStore.applyBinary()

But the CF we are bulk loading is a Super CF and createMessage() creates a CF instance using the ctor and forces it to be Standard so the trick above will work. When the message is created from the RowMutation it uses the hacked CF that writes out the CF ID for the super CF but writes Columns instead of SuperColumns. 

However when the BinaryVerbHandler tries to deserialise the RowMutation message a correct super CF is created by the ColumnFamilySerialiser using the CF ID and it fails because columns were serialised instead of super columns. 

So we are trying to sneak columns that contain serialised super columns through a super column family.

Has anyone had the bmt_example working ? What am I missing ? Should the bmt feature use a super column when the target is CF is a super column. 

Cheers
Aaron
  
On 1 Apr 2011, at 19:24, George Ciubotaru wrote:

> Hello,
>  
> The exception from the previous email was caused by a mistake of mine, sorry for that. I’ve fixed it, no more exceptions of the client (bulk loader) side but I’m getting now an exception in Cassandra. My configuration is simple: I have a single Cassandra instance running and I launch the bulk loader from a different box (using version 0.7.0).
>  
> ERROR 00:20:17,877 Fatal exception in thread Thread[MutationStage:33,5,main]
> java.lang.RuntimeException: java.io.IOException: Invalid localDeleteTime read: 0
>         at org.apache.cassandra.db.BinaryVerbHandler.doVerb(BinaryVerbHandler.java:54)
>         at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:63)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>         at java.lang.Thread.run(Unknown Source)
> Caused by: java.io.IOException: Invalid localDeleteTime read: 0
>         at org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:356)
>         at org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:313)
>         at org.apache.cassandra.db.ColumnFamilySerializer.deserializeColumns(ColumnFamilySerializer.java:129)
>         at org.apache.cassandra.db.ColumnFamilySerializer.deserialize(ColumnFamlySerializer.java:120)
>         at org.apache.cassandra.db.RowMutationSerializer.defreezeTheMaps(RowMutation.java:385)
>         at org.apache.cassandra.db.RowMutationSerializer.deserialize(RowMutation.java:395)
>         at org.apache.cassandra.db.RowMutationSerializer.deserialize(RowMutation.java:353)
>         at org.apache.cassandra.db.RowMutationMessageSerializer.deserialize(RowMutationMessage.java:81)
>         at org.apache.cassandra.db.BinaryVerbHandler.doVerb(BinaryVerbHandler.java:42)
>         ... 4 more
>  
> I have found some other discussion thread with e similar error but unfortunately no concrete response: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/Cassandra-0-7-beta3-BinaryMemtable-and-Supercolumns-td5730324.html
>  
> Thanks,
> George
>  
> From: aaron morton [mailto:aaron@thelastpickle.com] 
> Sent: 31 March 2011 14:03
> To: user@cassandra.apache.org
> Subject: Re: Using RowMutations with super columns
>  
> The CassandraBulkLoader example is written to use Super Columns, so seems odd.  
>  
> Do you have the rest of the error stack ? 
>  
> Aaron
>  
>  
> On 31 Mar 2011, at 04:54, George Ciubotaru wrote:
> 
> 
> Hello,
>  
> I’m using CassandraBulkLoader.java (https://svn.apache.org/repos/asf/cassandra/trunk/contrib/bmt_example/CassandraBulkLoader.java) as base to build a bulk loader. Everything works fine for standard column families but it fails when trying to insert data in super columns throwing this exception:
>  
> Exception in thread "main" java.lang.UnsupportedOperationException: This operation is not supported for Super Columns.
>                 at org.apache.cassandra.db.SuperColumn.timestamp(SuperColumn.java:143)
>                 at org.apache.cassandra.db.ColumnSerializer.serialize(ColumnSerializer.java:55)
>                 at org.apache.cassandra.db.ColumnSerializer.serialize(ColumnSerializer.java:35)
>                 at org.apache.cassandra.db.ColumnFamilySerializer.serializeForSSTable(ColumnFamilySerializer.java:87)
>                 at org.apache.cassandra.db.ColumnFamilySerializer.serializeWithIndexes(ColumnFamilySerializer.java:106)
>  
> Any idea here?
>  
> Thank you,
> George
>