Jon Haddad created CASSANDRA-21065:
--------------------------------------

             Summary: ConcurrentModificationException during nodetool 
garbagecollect with UnifiedCompactionStrategy and 
only_purge_repaired_tombstones enabled
                 Key: CASSANDRA-21065
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-21065
             Project: Apache Cassandra
          Issue Type: Bug
          Components: Local/Compaction/UCS
            Reporter: Jon Haddad


When running nodetool garbagecollect on a table configured with 
UnifiedCompactionStrategy and only_purge_repaired_tombstones: true, a 
ConcurrentModificationException is thrown. This occurs regardless of whether 
any other repairs or compactions are running in parallel.

Failing configuration:


{noformat}
Compaction = {
    'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy',
    'only_purge_repaired_tombstones': 'true',
    'scaling_parameters': 'L10'
}
{noformat}


The issue has been reproduced across 3 separate clusters.

This stack trace is thrown when attempting to run nodetool garbagecollect:


{noformat}
 error: null

-- StackTrace --

java.util.ConcurrentModificationException

at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597)

at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1620)

at 
java.base/java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1055)

at 
org.apache.cassandra.db.compaction.CompactionManager$6.filterSSTables(CompactionManager.java:691)

at 
org.apache.cassandra.db.compaction.CompactionManager.lambda$parallelAllSSTableOperation$0(CompactionManager.java:441)

at 
org.apache.cassandra.db.ColumnFamilyStore.withAllSSTables(ColumnFamilyStore.java:2940)

at 
org.apache.cassandra.db.compaction.CompactionManager.parallelAllSSTableOperation(CompactionManager.java:432)

at 
org.apache.cassandra.db.compaction.CompactionManager.performGarbageCollection(CompactionManager.java:683)

at 
org.apache.cassandra.db.ColumnFamilyStore.garbageCollect(ColumnFamilyStore.java:1823)

at 
org.apache.cassandra.service.StorageService.garbageCollect(StorageService.java:4285)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)

at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:569)

at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:72)

at jdk.internal.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)

at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:569)

at java.base/sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:262)

at 
java.management/com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)

at 
java.management/com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)

at 
java.management/com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)

at 
java.management/com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)

at 
java.management/com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)

at 
java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814)

at 
java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802)

at 
java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:472)

at 
java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1472)

at 
java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1310)

at 
java.base/java.security.AccessController.doPrivileged(AccessController.java:712)

at 
java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1412)

at 
java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)

at java.base/jdk.internal.reflect.GeneratedMethodAccessor33.invoke(Unknown 
Source)

at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:569)

at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)

at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)

at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)

at 
java.base/java.security.AccessController.doPrivileged(AccessController.java:712)

at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)

at 
java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)

at 
java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)

at 
java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)

at 
java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

at 
java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)

at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)

at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)

at java.base/java.lang.Thread.run(Thread.java:840)
{noformat}





--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to