Hi Aaron, the fix does the trick. I wonder why nobody else ran into this before... I checked org/apache/cassandra/db/ColumnIndexer.java in 0.7.9, 0.8.7 and 1.0.0-rc2 and all seem to be affected.
Looks like public Jira is readonly - so I'm not sure about how to continue. Best, Thomas On 10/13/2011 10:52 AM, Thomas Richter wrote: > Hi Aaron, > > I guess i found it :-). > > I added logging for the used IndexInfo to > SSTableNamesIterator.readIndexedColumns and got negative index postions > for the missing columns. This is the reason why the columns are not > loaded from sstable. > > So I had a look at ColumnIndexer.serializeInternal and there it is: > > int endPosition = 0, startPosition = -1; > > Should be: > > long endPosition = 0, startPosition = -1; > > I'm currently running a compaction with a fixed version to verify. > > Best, > > Thomas > > On 10/12/2011 11:54 PM, aaron morton wrote: >> Sounds a lot like the column is deleted. >> >> IIRC this is where the columns from various SSTables are reduced >> https://github.com/apache/cassandra/blob/cassandra-0.8/src/java/org/apache/cassandra/db/filter/QueryFilter.java#L117 >> >> The call to ColumnFamily.addColumn() is where the column instance may be >> merged with other instances. >> >> A >> >> ----------------- >> Aaron Morton >> Freelance Cassandra Developer >> @aaronmorton >> http://www.thelastpickle.com >> >> ----------------- >> Aaron Morton >> Freelance Cassandra Developer >> @aaronmorton >> http://www.thelastpickle.com >> >> On 13/10/2011, at 5:33 AM, Thomas Richter wrote: >> >>> Hi Aaron, >>> >>> I cannot read the column with a slice query. >>> The slice query only returns data till a certain column and after that i >>> only get empty results. >>> >>> I added log output to QueryFilter.isRelevant to see if the filter is >>> dropping the column(s) but it doesn't even show up there. >>> >>> Next thing i will check check is the diff between columns contained in >>> json export and columns fetched with the slice query, maybe this gives >>> more clue... >>> >>> Any other ideas where to place more debugging output to see what's >>> happening? >>> >>> Best, >>> >>> Thomas >>> >>> On 10/11/2011 12:46 PM, aaron morton wrote: >>>> kewl, >>>> >>>>> * Row is not deleted (other columns can be read, row survives compaction >>>>> with GCGraceSeconds=0) >>>> >>>> IIRC row tombstones can hang around for a while (until gc grace has >>>> passed), and they only have an effect on columns that have a lower >>>> timstamp. So it's possible to read columns from a row with a tombstone. >>>> >>>> Can you read the column using a slice range rather than specifying it's >>>> name ? >>>> >>>> Aaron >>>> >>>> ----------------- >>>> Aaron Morton >>>> Freelance Cassandra Developer >>>> @aaronmorton >>>> http://www.thelastpickle.com >>>> >>>> On 11/10/2011, at 11:15 PM, Thomas Richter wrote: >>>> >>>>> Hi Aaron, >>>>> >>>>> i invalidated the caches but nothing changed. I didn't get the mentioned >>>>> log line either, but as I read the code SliceByNamesReadCommand uses >>>>> NamesQueryFilter and not SliceQueryFilter. >>>>> >>>>> Next, there is only one SSTable. >>>>> >>>>> I can rule out that the row is deleted because I deleted all other rows >>>>> in that CF to reduce data size and speed up testing. I set >>>>> GCGraceSeconds to zero and ran a compaction. All other rows are gone, >>>>> but i can still access at least one column from the left row. >>>>> So as far as I understand it, there should not be a tombstone on row >>>>> level. >>>>> >>>>> To make it a list: >>>>> >>>>> * One SSTable, one row >>>>> * >>>>> * Row is not deleted (other columns can be read, row survives compaction >>>>> with GCGraceSeconds=0) >>>>> * Most columns can be read by get['row']['col'] from cassandra-cli >>>>> * Some columns can not be read by get['row']['col'] from cassandra-cli >>>>> but can be found in output of sstable2json >>>>> * unreadable data survives compaction with GCGraceSeconds=0 (checked >>>>> with sstable2json) >>>>> * Invalidation caches does not help >>>>> * Nothing in the logs >>>>> >>>>> Does that point into any direction where i should look next? >>>>> >>>>> Best, >>>>> >>>>> Thomas >>>>> >>>>> On 10/11/2011 10:30 AM, aaron morton wrote: >>>>>> Nothing jumps out. The obvious answer is that the column has been >>>>>> deleted. Did you check all the SSTables ? >>>>>> >>>>>> It looks like query returned from row cache, otherwise you would see >>>>>> this as well… >>>>>> >>>>>> DEBUG [ReadStage:34] 2011-10-11 21:11:11,484 SliceQueryFilter.java (line >>>>>> 123) collecting 0 of 2147483647: >>>>>> 1318294191654059:false:354@1318294191654861 >>>>>> >>>>>> Which would mean a version of the column was found. >>>>>> >>>>>> If you invalidate the cache with nodetool and run the query and the log >>>>>> message appears it will mean the column was read from (all of the) >>>>>> sstables. If you do not get a column returned I would say there is a >>>>>> tombstone in place. It's either a row level or a column level one. >>>>>> >>>>>> Hope that helps. >>>>>> >>>>>> ----------------- >>>>>> Aaron Morton >>>>>> Freelance Cassandra Developer >>>>>> @aaronmorton >>>>>> http://www.thelastpickle.com >>>>>> >>>>>> On 11/10/2011, at 10:35 AM, Thomas Richter wrote: >>>>>> >>>>>>> Hi Aaron, >>>>>>> >>>>>>> normally we use hector to access cassandra, but for debugging I switched >>>>>>> to cassandra-cli. >>>>>>> >>>>>>> Column can not be read by a simple >>>>>>> get CFName['rowkey']['colname']; >>>>>>> >>>>>>> Response is "Value was not found" >>>>>>> if i query another column, everything is just fine. >>>>>>> >>>>>>> Serverlog for unsuccessful read (keyspace and CF names replaced): >>>>>>> >>>>>>> DEBUG [pool-1-thread-1] 2011-10-10 23:15:29,739 CassandraServer.java >>>>>>> (line 280) get >>>>>>> >>>>>>> DEBUG [pool-1-thread-1] 2011-10-10 23:15:29,744 StorageProxy.java (line >>>>>>> 320) Command/ConsistencyLevel is >>>>>>> SliceByNamesReadCommand(table='Keyspace', >>>>>>> key=61636162626139322d396638312d343562382d396637352d393162303337383030393762, >>>>>>> columnParent='QueryPath(columnFamilyName='ColumnFamily', >>>>>>> superColumnName='null', columnName='null')', >>>>>>> columns=[574c303030375030,])/ONE >>>>>>> >>>>>>> DEBUG [pool-1-thread-1] 2011-10-10 23:15:29,750 ReadCallback.java (line >>>>>>> 86) Blockfor/repair is 1/true; setting up requests to >>>>>>> localhost/127.0.0.1 >>>>>>> >>>>>>> DEBUG [pool-1-thread-1] 2011-10-10 23:15:29,750 StorageProxy.java (line >>>>>>> 343) reading data locally >>>>>>> >>>>>>> DEBUG [ReadStage:33] 2011-10-10 23:15:29,751 StorageProxy.java (line >>>>>>> 448) LocalReadRunnable reading SliceByNamesReadCommand(table='Keyspace', >>>>>>> key=61636162626139322d396638312d343562382d396637352d393162303337383030393762, >>>>>>> columnParent='QueryPath(columnFamilyName='ColumnFamily', >>>>>>> superColumnName='null', columnName='null')', >>>>>>> columns=[574c303030375030,]) >>>>>>> >>>>>>> DEBUG [pool-1-thread-1] 2011-10-10 23:15:29,818 StorageProxy.java (line >>>>>>> 393) Read: 67 ms. >>>>>>> >>>>>>> Log looks fine to me, but no result is returned. >>>>>>> >>>>>>> Best, >>>>>>> >>>>>>> Thomas >>>>>>> >>>>>>> On 10/10/2011 10:00 PM, aaron morton wrote: >>>>>>>> How are they unreadable ? You need to go into some details about what >>>>>>>> is going wrong. >>>>>>>> >>>>>>>> What sort of read ? >>>>>>>> What client ? >>>>>>>> What is in the logging on client and server side ? >>>>>>>> >>>>>>>> >>>>>>>> Try turning the logging up to DEBUG on the server to watch what >>>>>>>> happens. >>>>>>>> >>>>>>>> Cheers >>>>>>>> >>>>>>>> ----------------- >>>>>>>> Aaron Morton >>>>>>>> Freelance Cassandra Developer >>>>>>>> @aaronmorton >>>>>>>> http://www.thelastpickle.com >>>>>>>> >>>>>>>> On 10/10/2011, at 9:23 PM, Thomas Richter wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> no errors in the server logs. The columns are unreadable on all nodes >>>>>>>>> at >>>>>>>>> any consistency level (ONE, QUORUM, ALL). We started with 0.7.3 and >>>>>>>>> upgraded to 0.7.6-2 two months ago. >>>>>>>>> >>>>>>>>> Best, >>>>>>>>> >>>>>>>>> Thomas >>>>>>>>> >>>>>>>>> On 10/10/2011 10:03 AM, aaron morton wrote: >>>>>>>>>> What error are you seeing in the server logs ? Are the columns >>>>>>>>>> unreadable at all Consistency Levels ? i.e. are the columns >>>>>>>>>> unreadable on all nodes. >>>>>>>>>> >>>>>>>>>> What is the upgrade history of the cluster ? What version did it >>>>>>>>>> start at ? >>>>>>>>>> >>>>>>>>>> Cheers >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> ----------------- >>>>>>>>>> Aaron Morton >>>>>>>>>> Freelance Cassandra Developer >>>>>>>>>> @aaronmorton >>>>>>>>>> http://www.thelastpickle.com >>>>>>>>>> >>>>>>>>>> On 10/10/2011, at 7:42 AM, Thomas Richter wrote: >>>>>>>>>> >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> here is some further information. Compaction did not help, but data >>>>>>>>>>> is >>>>>>>>>>> still there when I dump the row with sstable2json. >>>>>>>>>>> >>>>>>>>>>> Best, >>>>>>>>>>> >>>>>>>>>>> Thomas >>>>>>>>>>> >>>>>>>>>>> On 10/08/2011 11:30 PM, Thomas Richter wrote: >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> we are running a 3 node cassandra (0.7.6-2) cluster and some of our >>>>>>>>>>>> column families contain quite large rows (400k+ columns, 4-6GB row >>>>>>>>>>>> size). >>>>>>>>>>>> Replicaton factor is 3 for all keyspaces. The cluster is running >>>>>>>>>>>> fine >>>>>>>>>>>> for several months now and we never experienced any serious >>>>>>>>>>>> trouble. >>>>>>>>>>>> >>>>>>>>>>>> Some days ago we noticed, that some previously written columns >>>>>>>>>>>> could not >>>>>>>>>>>> be read. This does not always happen, and only some dozen columns >>>>>>>>>>>> out of >>>>>>>>>>>> 400k are affected. >>>>>>>>>>>> >>>>>>>>>>>> After ruling out application logic as a cause I dumped the row in >>>>>>>>>>>> question with sstable2json and the columns are there (and are not >>>>>>>>>>>> marked >>>>>>>>>>>> for deletion). >>>>>>>>>>>> >>>>>>>>>>>> Next thing was setting up a fresh single node cluster and copying >>>>>>>>>>>> the >>>>>>>>>>>> column family data to that node. Columns could not be read either. >>>>>>>>>>>> Right now I'm running a nodetool compact for the cf to see if data >>>>>>>>>>>> could >>>>>>>>>>>> be read afterwards. >>>>>>>>>>>> >>>>>>>>>>>> Is there any explanation for such behavior? Are there any >>>>>>>>>>>> suggestions >>>>>>>>>>>> for further investigation? >>>>>>>>>>>> >>>>>>>>>>>> TIA, >>>>>>>>>>>> >>>>>>>>>>>> Thomas >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >> >