[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cassandra-commits
Subject:    [jira] [Commented] (CASSANDRA-7465) DecoratedKey assertion error on reads
From:       "Jason Brown (JIRA)" <jira () apache ! org>
Date:       2014-06-30 20:52:25
Message-ID: JIRA.12724228.1403904858246.75935.1404161545364 () arcas
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/CASSANDRA-7465?page=com.atlassian.jira.plu \
gin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14048143#comment-14048143 \
] 

Jason Brown commented on CASSANDRA-7465:
----------------------------------------

Actually, we don't always copy keys for the cache. KeyCacheKey's constructor calls \
ByteBufferUtil.getArray(key) to create a local copy of the key (as a byte array). \
BBU.getArray() has a case where it simply returns the BB's backing byte array:

{code}
    public static byte[] getArray(ByteBuffer buffer)
    {
        int length = buffer.remaining();

        if (buffer.hasArray())
        {
            int boff = buffer.arrayOffset() + buffer.position();
            if (boff == 0 && length == buffer.array().length)
                return buffer.array();    <----- this returns buffer's byte array
            else
                return Arrays.copyOfRange(buffer.array(), boff, boff + length);
        }
        ....
{code}

That said, I agree with [~tjake] that just copying the key should be the best to get \
past these niggling problems. We can always revisit and optimize in the future.

> DecoratedKey assertion error on reads
> -------------------------------------
> 
> Key: CASSANDRA-7465
> URL: https://issues.apache.org/jira/browse/CASSANDRA-7465
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Environment: 3 nodes
> Oracle Linux Server 6.3 
> kernel ver 2.6.39
> Reporter: Jason Brown
> Priority: Blocker
> Fix For: 2.1.0
> 
> 
> Getting the following exception when running read stress:
> {code}WARN  [SharedPool-Worker-31] 2014-06-27 21:25:51,391 \
> AbstractTracingAwareExecutorService.java:166 - Uncaught exception on thread \
>                 Thread[SharedPool-Worker-31,10,main]: {}
> java.lang.AssertionError: DecoratedKey(-5397116645141815707, 30303031393143364639) \
> != DecoratedKey(-5397116645141815707, 30303031343439443233) in \
> /u/sdd/cassandra-jasobrown/data/Keyspace1/Standard1-6ab9bd90fe3b11e385edff96c2ef2fd6/Keyspace1-Standard1-ka-73-Data.db
>   at org.apache.cassandra.db.columniterator.SSTableNamesIterator.read(SSTableNamesIterator.java:111) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.columniterator.SSTableNamesIterator.<init>(SSTableNamesIterator.java:59) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.filter.NamesQueryFilter.getSSTableColumnIterator(NamesQueryFilter.java:89) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:62) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.CollationController.collectTimeOrderedData(CollationController.java:125) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:59) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1873) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1681) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:341) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.db.SliceByNamesReadCommand.getRow(SliceByNamesReadCommand.java:55) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:1393) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2060) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) \
> ~[na:1.7.0_13]  at \
> org.apache.cassandra.concurrent.AbstractTracingAwareExecutorService$FutureTask.run(AbstractTracingAwareExecutorService.java:162) \
> ~[apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:103) \
> [apache-cassandra-2.1.0-rc2-SNAPSHOT.jar:2.1.0-rc2-SNAPSHOT]  at \
> java.lang.Thread.run(Thread.java:722) [na:1.7.0_13] {code}
> I have a three node cluster, which I populate with the following stress command:
> {code}
> cassandra-stress write n=60000000 -schema replication\(factor\=2\) -key \
> populate=1..60000000 -rate threads=42  -mode native prepared cql3 -port native=9043 \
> thrift=9161  -node athena06-a,athena06-b,athena06-c -col n=fixed\(21\) \
> size=exp\(11..42\) {code}
> Then I run the read stress:
> {code}
> cassandra-stress read n=100000000  -key dist=extr\(1..600000000,2\)  -mode native \
> prepared cql3 -port native=9043 thrift=9161  -node athena06-b,athena06-c,athena06-a \
> -col n=fixed\(21\) -rate threads=64 {code}
> The above exception occurs semi-frequently (several to ~50 times a minute, but \
> seems to depend on amount of data in cluster - anecdotal evidence only).



--
This message was sent by Atlassian JIRA
(v6.2#6252)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic