[
https://issues.apache.org/jira/browse/CASSANDRA-1130?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sylvain Lebresne updated CASSANDRA-1130:
----------------------------------------
Attachment: TestSuperColumnTTL.java
Sorry but I'm still unable to reproduce.
I'm attaching a small insert script (in java) that, as far as I can see,
seems to do what you say triggers the bug. Could you look if this fails
on your side. If I haven't understand the steps correctly, would you mind
updating this test so that it reproduce the bug you see ?
(the script uses raw thrift and requires a very recent trunk)
{quote}
Also I believe ExpiringColumn contains some more data compared to
DeletedColumn. Correct? In my testing I found that length of each
DeletedColumn was similar to ExpiringColumn and once a complete DeletedColumn
record was read there were some more extra bytes at the
end of the record which is causing all this issue?
When you convert a ExpiringColumn to DeletedColumn, is it in place replacement
or the old record is marked for deletion by just
changing the EXPIRING_MASK to DELETED_MASK.
{quote}
File on disk are not updated in place. So we never change on disk an
ExpiringColumn to a DeletedColumn. There only is a small optimisation in the
deserialization code that, after having fully deserialize an ExpiringColumn,
will return an equivalent DeletedColumn if the column is expired. But we always
read exactly what we have written (or it's a bug).
> Cassandra throws Exceptions at startup when using TTL in SuperColumns
> ---------------------------------------------------------------------
>
> Key: CASSANDRA-1130
> URL: https://issues.apache.org/jira/browse/CASSANDRA-1130
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Affects Versions: 0.7
> Reporter: Jignesh Dhruv
> Assignee: Sylvain Lebresne
> Fix For: 0.7
>
> Attachments: TestSuperColumnTTL.java
>
>
> Hello,
> I am trying to use TTL (timeToLive) feature in SuperColumns.
> My usecase is:
> - I have a SuperColumn and 3 subcolumns.
> - I try to expire data after 60 seconds.
> While Cassandra is up and running, I am successfully able to push and read
> data without any problems. Data compaction and all occurs fine. After
> inserting say about 100000 records, I stop Cassandra while data is still
> coming.
> On startup Cassandra throws an exception and won't start up. (This happens 1
> in every 3 times). Exception varies like:
> - EOFException while reading data
> - negative value encountered exception
> - Heap Space Exception
> Cassandra simply won't start up.
> Again I get this problem only when I use TTL with SuperColumns. There are no
> issues with using TTL with regular Columns.
> I tried to diagnose the problem and it seems to happen on startup when it
> sees a Column that is marked Deleted and its trying to read data. Its off by
> some bytes and hence all these exceptions.
> Caused by: java.io.IOException: Corrupt (negative) value length encountered
> at
> org.apache.cassandra.utils.FBUtilities.readByteArray(FBUtilities.java:317)
> at
> org.apache.cassandra.db.ColumnSerializer.deserialize(ColumnSerializer.java:84)
> at
> org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:336)
> at
> org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:285)
> at
> org.apache.cassandra.db.filter.SSTableSliceIterator$ColumnGroupReader.getNextBlock(SSTableSliceIterator.java:235)
> at
> org.apache.cassandra.db.filter.SSTableSliceIterator$ColumnGroupReader.pollColumn(SSTableSliceIterator.java:195)
> ... 18 more
> Let me know if you need more information.
> Thanks,
> Jignesh
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.