Friday, February 8, 2013

Set to host the first Philly Cassandra Users Group!

We finally got around to arranging the first Philly Cassandra User's Group meetup. 

Sign up here:

I plan to give a brief Cassandra overview.  Then I'll hand off to Taylor Goetz who will talk about storm-cassandra.  Food and drink will be provided by Datastax.

All are welcome.

Wednesday, February 6, 2013

InvalidRequestException(why:Too many bytes for comparator)

In the spirit of trying to save people time, I thought I would directly address the numerous "Too many bytes" errors that bubble up out of Astyanax when using Composites, especially when trying to perform range queries.

First, see my last two posts about connecting the dots:

After that, you'll probably still have issues.  If you see a "Too many bytes for comparator" it most likely means that you have a mistmatch between your PRIMARY KEY declaration in your CQL CREATE TABLE statement, and the composite you are using in Astyanax.

You have to be really careful that all of the components in the primary key are declared in your class *in order* and that all fields in your class are part of your primary key.  Otherwise, when Cassandra goes to compare two column keys/names, it will generate the bytes for that column name (from all the components) and it will end up with too many or too few.  (Hence the error you are seeing)

If you have too many, there is a good chance that you have a field declared in your annotated composite class, that is not part of your primary key declaration.

Hopefully that helps.  If you want the underlying theory/reasoning, see:

If it still takes you a while to get sorted out, accessing a CQL table from a thrift-based client, no worries... you are in good company:

Activiti TimerEvent only firing once.

This is just a mental note since I wasted hours on it a few months ago.  Then a colleague just did the same.

If you are developing a business process in Activiti, and your TimerEvent is only firing once, add the following parameter to your Activiti config:

<property name="jobExectuorActivate" value="true"/>

This is mentioned in the documentation, but only as a very small note:

"Note: timers are only fired when the job executor is enabled (i.e. jobExecutorActivate needs to be set to true in the activiti.cfg.xml, since the job executor is disabled by default)"

Hopefully this saves people some time.