Alex Petrov created CASSANDRA-16988:
---------------------------------------

             Summary: BufferOverflowException when writing during ALTER
                 Key: CASSANDRA-16988
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-16988
             Project: Cassandra
          Issue Type: Bug
            Reporter: Alex Petrov


This is somewhat tricky to reproduce, but Harry tests throw 
BufferOverflowException from time to time. It looks like it happens on the node 
that ALTER is happening on, about the time ALTER is happening. A race condition 
arises from the fact that in 3.0 we can compute the buffer size with one set of 
columns, but serialise a different one, resulting into a buffer overflow. 4.0 
is not susceptible to this problem because of immutable metadata.

{code}
java.lang.RuntimeException: java.nio.BufferOverflowException
   at 
org.apache.cassandra.distributed.impl.IsolatedExecutor.waitOn(IsolatedExecutor.java)
   at 
org.apache.cassandra.distributed.impl.IsolatedExecutor.lambda$sync$5(IsolatedExecutor.java)
   at 
org.apache.cassandra.distributed.impl.Instance.executeInternalWithResult(Instance.java)
   at 
org.apache.cassandra.distributed.api.IInstance.executeInternal(IInstance.java)
   at 
org.apache.cassandra.distributed.impl.DelegatingInvokableInstance.executeInternal(DelegatingInvokableInstance.java)
   at 
org.apache.cassandra.distributed.fuzz.InJvmSutBase.execute(InJvmSutBase.java)
   at 
org.apache.cassandra.distributed.fuzz.InJvmSutBase.execute(InJvmSutBase.java)
   at 
org.apache.cassandra.distributed.fuzz.InJvmSutBase.lambda$executeAsync$0(InJvmSutBase.java)
   at 
java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java)
   at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java)
   at java.lang.Thread.run(Thread.java:748)
Caused by: java.nio.BufferOverflowException
   at 
org.apache.cassandra.io.util.DataOutputBufferFixed.doFlush(DataOutputBufferFixed.java)
   at 
org.apache.cassandra.io.util.BufferedDataOutputStreamPlus.write(BufferedDataOutputStreamPlus.java)
   at 
org.apache.cassandra.io.util.BufferedDataOutputStreamPlus.write(BufferedDataOutputStreamPlus.java)
   at 
org.apache.cassandra.utils.ByteBufferUtil.writeWithVIntLength(ByteBufferUtil.java)
   at 
org.apache.cassandra.db.marshal.CollectionType$CollectionPathSerializer.serialize(CollectionType.java)
   at 
org.apache.cassandra.db.rows.BufferCell$Serializer.serialize(BufferCell.java)
   at 
org.apache.cassandra.db.rows.UnfilteredSerializer.writeComplexColumn(UnfilteredSerializer.java)
   at 
org.apache.cassandra.db.rows.UnfilteredSerializer.lambda$serializeRowBody$0(UnfilteredSerializer.java)
   at org.apache.cassandra.utils.btree.BTree.applyLeaf(BTree.java)
   at org.apache.cassandra.utils.btree.BTree.apply(BTree.java)
   at org.apache.cassandra.utils.btree.BTree.apply(BTree.java)
   at org.apache.cassandra.utils.btree.BTree.apply(BTree.java)
   at org.apache.cassandra.db.rows.BTreeRow.apply(BTreeRow.java)
   at 
org.apache.cassandra.db.rows.UnfilteredSerializer.serializeRowBody(UnfilteredSerializer.java)
   at 
org.apache.cassandra.db.rows.UnfilteredSerializer.serialize(UnfilteredSerializer.java)
   at 
org.apache.cassandra.db.rows.UnfilteredSerializer.serialize(UnfilteredSerializer.java)
   at 
org.apache.cassandra.db.rows.UnfilteredSerializer.serialize(UnfilteredSerializer.java)
   at 
org.apache.cassandra.db.rows.UnfilteredRowIteratorSerializer.serialize(UnfilteredRowIteratorSerializer.java)
   at 
org.apache.cassandra.db.rows.UnfilteredRowIteratorSerializer.serialize(UnfilteredRowIteratorSerializer.java)
   at 
org.apache.cassandra.db.partitions.PartitionUpdate$PartitionUpdateSerializer.serialize(PartitionUpdate.java)
   at 
org.apache.cassandra.db.Mutation$MutationSerializer.serialize(Mutation.java)
   at org.apache.cassandra.db.commitlog.CommitLog.add(CommitLog.java)
   at org.apache.cassandra.db.Keyspace.applyInternal(Keyspace.java)
   at org.apache.cassandra.db.Keyspace.apply(Keyspace.java)
   at org.apache.cassandra.db.Mutation.apply(Mutation.java)
   at org.apache.cassandra.db.Mutation.apply(Mutation.java)
   at org.apache.cassandra.db.Mutation.apply(Mutation.java)
   at 
org.apache.cassandra.cql3.statements.BatchStatement.executeInternalWithoutCondition(BatchStatement.java)
   at 
org.apache.cassandra.cql3.statements.BatchStatement.executeInternal(BatchStatement.java)
   at 
org.apache.cassandra.distributed.impl.Instance.lambda$executeInternalWithResult$1(Instance.java)
   at java.util.concurrent.FutureTask.run(FutureTask.java)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java)
   at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java)
   at 
org.apache.cassandra.concurrent.NamedThreadFactory.lambda$threadLocalDeallocator$0(NamedThreadFactory.java8)
   ... 1 more
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to