Sure thing, Here is a console dump showing the error. Notice that column '9801' is NOT NULL on the first two queries but IS NULL on the last query. I get this behavior constantly on any writes that coincide with a flush. The column is always readable by itself but disappears depending on the other columns being queried.
$ $ bin/cqlsh –2 cqlsh> cqlsh> SELECT '9801' FROM BUGS.Test WHERE KEY='a'; 9801 --------------------- 0.02271159951509616 cqlsh> SELECT '9801','6814' FROM BUGS.Test WHERE KEY='a'; 9801 | 6814 ---------------------+-------------------- 0.02271159951509616 | 0.6612351709326891 cqlsh> SELECT '9801','6814','3333' FROM BUGS.Test WHERE KEY='a'; 9801 | 6814 | 3333 ------+--------------------+-------------------- null | 0.6612351709326891 | 0.8921380283891902 cqlsh> exit; $ $ From: aaron morton <aa...@thelastpickle.com<mailto:aa...@thelastpickle.com>> Reply-To: "user@cassandra.apache.org<mailto:user@cassandra.apache.org>" <user@cassandra.apache.org<mailto:user@cassandra.apache.org>> Date: Tuesday, January 29, 2013 12:21 AM To: "user@cassandra.apache.org<mailto:user@cassandra.apache.org>" <user@cassandra.apache.org<mailto:user@cassandra.apache.org>> Subject: Re: Cass returns Incorrect column data on writes during flushing Ie. Query for a single column works but the column does not appear in slice queries depending on the other columns in the query cfq.getKey("foo").getColumn("A") returns "A" cfq.getKey("foo").withColumnSlice("A", "B") returns "B" only cfq.getKey("foo").withColumnSlice("A","B","C") returns "A","B" and "C" Can you replicate this using cassandra-cli or CQL ? Makes it clearer what's happening and removes any potential issues with the client or your code. If you cannot repo it show you astynax code. Cheers ----------------- Aaron Morton Freelance Cassandra Developer New Zealand @aaronmorton http://www.thelastpickle.com On 29/01/2013, at 1:15 PM, Elden Bishop <ebis...@exacttarget.com<mailto:ebis...@exacttarget.com>> wrote: I'm trying to track down some really worrying behavior. It appears that writing multiple columns while a table flush is occurring can result in Cassandra recording its data in a way that makes columns visible only to some queries but not others. Ie. Query for a single column works but the column does not appear in slice queries depending on the other columns in the query cfq.getKey("foo").getColumn("A") returns "A" cfq.getKey("foo").withColumnSlice("A", "B") returns "B" only cfq.getKey("foo").withColumnSlice("A","B","C") returns "A","B" and "C" This is a permanent condition meaning that even hours later with no reads or writes the DB will return the same results. I can reproduce this 100% of the time by writing multiple columns and then reading a different set of multiple columns. Columns written during the flush may or may not appear. Details # There are no log errors # All single column queries return correct data. # Slice queries may or may not return the column depending on which other columns are in the query. # This is on a stock "unzip and run" installation of Cassandra using default options only; basically doing the cassandra getting started tutorial and using the Demo table described in that tutorial. # Cassandra 1.2.0 using Astynax and Java 1.6.0_37. # There are no errors but there is always a "flushing high traffic column family" that happens right before the incoherent state occurs # to reproduce just update multiple columns at the same time, using random rows and then verify the writes by reading multiple columns. I get can generate the error on 100% of runs. Once the state is screwed up, the multi column read will not contain the column but the single column read will. Log snippet INFO 15:47:49,066 GC for ParNew: 320 ms for 1 collections, 207199992 used; max is 1052770304 INFO 15:47:58,076 GC for ParNew: 330 ms for 1 collections, 232839680 used; max is 1052770304 INFO 15:48:00,374 flushing high-traffic column family CFS(Keyspace='BUGS', ColumnFamily='Test') (estimated 50416978 bytes) INFO 15:48:00,374 Enqueuing flush of Memtable-Test@1575891161(4529586/50416978 serialized/live bytes, 279197 ops) INFO 15:48:00,378 Writing Memtable-Test@1575891161(4529586/50416978 serialized/live bytes, 279197 ops) INFO 15:48:01,142 GC for ParNew: 654 ms for 1 collections, 239478568 used; max is 1052770304 INFO 15:48:01,474 Completed flushing /var/lib/cassandra/data/BUGS/Test/BUGS-Test-ia-45-Data.db (4580066 bytes) for commitlog position ReplayPosition(segmentId=1359415964165, position=7462737) Any ideas on what could be going on? I could not find anything like this in the open bugs and the only workaround seems to be never doing multi-column reads or writes. I'm concerned that the DB can get into a state where different queries can return such inconsistent results. All with no warning or errors. There is no way to even verify data correctness; every column can seem correct when queried and then disappear during slice queries depending on the other columns in the query. Thanks