Hi all... I am having a pretty tough time retrieving binary values out of my DB... I am using cassandra 0.5.1 on Centos 5.4 with java 1.6.0-19
Here is the simple test I am trying to run in C++ /* snip initialization */ { transport->open(); ColumnPath new_col; new_col.__isset.column = true; /* this is required! */ new_col.column_family.assign("Standard2"); new_col.super_column.assign(""); new_col.column.assign("testing"); char *data_cstr="this\0 is\0 data!"; std::string data; data.assign(data_cstr, 15); printf("Data '%s' has length %lu\n", data.c_str(), data.length()); // This properly returns 15 client.insert("Keyspace1","newone",new_col,data,55,ONE); ColumnOrSuperColumn ret_val; client.get(ret_val,"Keyspace1","newone",new_col,ONE); printf("Column name retrieved is: %s\n", ret_val.column.name.c_str()); printf("Value in column retrieved is: %s\n", ret_val.column.value.c_str()); // This only ever returns 'this' (i.e., everything before the first \0) // I understand null termination in %s... see below printf("Value has length %lu\n", ret_val.column.value.length()); // and this gives me 4 transport->close(); } /* snip the rest too! */ Am I missing something major in proceeding this way? I have tried GDB and eventually all I get back is a string containing 'this'. Here is the dumped content of Keyspace1/Standard2-1-Data.db... od -c /u01/cassandra/data/Keyspace1/Standard2-1-Data.db 0000000 \0 - 1 1 5 5 7 1 6 5 7 6 3 3 4 2 0000020 7 0 7 9 0 1 4 5 2 8 3 5 8 0 2 3 0000040 7 5 1 9 9 5 2 8 : n e w o n e \0 0000060 \0 \0 264 \0 \0 \0 U \0 \0 \0 003 254 355 \0 005 s 0000100 r \0 020 j a v a . u t i l . B i t 0000120 S e t n 375 210 ~ 9 4 253 ! 003 \0 001 [ \0 0000140 004 b i t s t \0 002 [ J x p u r \0 002 0000160 [ J x 004 265 022 261 u 223 002 \0 \0 x p \0 0000200 \0 \0 001 \0 202 \b \0 \0 \0 \0 \0 x \0 \0 \0 " 0000220 \0 \a t e s t i n g \0 \a t e s t i 0000240 n g \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000260 \0 % 200 \0 \0 \0 200 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000300 \0 001 \0 \a t e s t i n g \0 \0 \0 \0 \0 0000320 \0 \0 \0 7 \0 \0 \0 017 t h i s \0 i s 0000340 \0 d a t a ! 0000347 This shows that the data is stored properly to the db file. # bin/cassandra-cli -host localhost Connected to localhost/9160 Welcome to cassandra CLI. cassandra> get Keyspace1.Standard2['newone'] => (column=testing, value=this is data!, timestamp=55) Returned 1 results. Shows the same thing! It's there !!! I would lean towards a Thrift interface problem... In any case... I'd be thankful if someone had a pointer/workaround to this show-stopper of mine... Best Chris.