incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tyler Hobbs <ty...@datastax.com>
Subject Re: Cassandra LongType data insertion problem for secondary index usage
Date Thu, 10 Mar 2011 18:01:32 GMT
I looked again at the original
email<http://mail-archives.apache.org/mod_mbox//cassandra-user/201101.mbox/raw/%3CAANLkTik4Z_6OfvT4ByQ8_kpX_=thXYL39-BxwmQpCWo4@mail.gmail.com%3E/1>and
noticed that besides the bit-shift issue that gets corrected in the
next
email in the thread, there is another problem.  The long is being created in
little-endian order instead of big endian.

Here's the fully correct way to pack a long:

int64_t my_long = 12345678;
char chars[8];
for(int i = 7; i >= 0; i--) {
chars[i] = my_long & 0xff;
my_long = my_long >> 8;
}

std::string str_long(chars, 8);

Column c1;
c1.name = str_long;
// etc ...


On Thu, Mar 10, 2011 at 11:05 AM, Adi <adi.pandit@gmail.com> wrote:

> Environment: Cassandra 0.7.0 , C++ Thrift client on windows
>
> I have a column family with a secondary index
>  ColumnFamily: Page
>       Columns sorted by: org.apache.cassandra.db.marshal.BytesType
>       Built indexes: [Page.index_domain, Page.index_content_size]
>       Column Metadata:
>         Column Name: domain (646f6d61696e)
>           Validation Class: org.apache.cassandra.db.marshal.UTF8Type
>           Index Name: index_domain
>           Index Type: KEYS
>         Column Name: original_content_size
> (6f726967696e616c5f636f6e74656e745f73697a65)
>           Validation Class: org.apache.cassandra.db.marshal.LongType
>           Index Name: index_content_size
>           Index Type: KEYS
>
> As suggested by thobbs in an earlier posting I am sending the
> original_content_size as binary strings. I am able to write and read from
> the c++ client correctly.
> But on the cassandra-cli I am not able to see the values of
> original_content_size as longs. following are the results seen for a value 5
> that was sent.
>
> get Page['test1234'][original_content_size];
> => (column=6f726967696e616c5f636f6e74656e745f73697a65,
> value=360287970189639680, timestamp=1299773217120)
>
> get Page['test1234'][original_content_size] as bytes;
> => (column=6f726967696e616c5f636f6e74656e745f73697a65,
> value=0500000000000000, timestamp=1299773217120)
>
> Similarly the queries do not work as expected. Example get Page where
> domain = 'testabc.com' and original_content_size = 5; does not return the
> row that was inserted.
>
> Any suggestions on what I might be doing incorrectly either in schema
> definition or the way I am sending the values are welcome.
>
> -Adi
>
>

-- 
Tyler Hobbs
Software Engineer, DataStax <http://datastax.com/>
Maintainer of the pycassa <http://github.com/pycassa/pycassa> Cassandra
Python client library

Mime
View raw message