[ 
https://issues.apache.org/jira/browse/CASSANDRA-11958?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Blake Eggleston updated CASSANDRA-11958:
----------------------------------------
    Description: 
Saw this pop up in one of our tests:

{code}
09:34:53 ERROR [Strong-Reference-Leak-Detector:1] 2016-06-02 16:28:08,566  
NoSpamLogger.java:97 - Strong self-ref loop detected 
[/tmp/tier1/keyspace1/standard1-b56b52b128da11e6a2847ba8a8db3060/mb-97-big, 
private org.apache.cassandra.utils.concurrent.Ref 
org.apache.cassandra.io.sstable.format.SSTableReader$InstanceTidier.globalRef-org.apache.cassandra.utils.concurrent.Ref,
 
final org.apache.cassandra.utils.concurrent.Ref$State 
org.apache.cassandra.utils.concurrent.Ref.state-org.apache.cassandra.utils.concurrent.Ref$State,
 
final org.apache.cassandra.utils.concurrent.Ref$GlobalState 
org.apache.cassandra.utils.concurrent.Ref$State.globalState-org.apache.cassandra.utils.concurrent.Ref$GlobalState,
 
private final org.apache.cassandra.utils.concurrent.RefCounted$Tidy 
org.apache.cassandra.utils.concurrent.Ref$GlobalState.tidy-org.apache.cassandra.io.sstable.format.SSTableReader$GlobalTidy,
private volatile java.lang.Runnable 
org.apache.cassandra.io.sstable.format.SSTableReader$GlobalTidy.obsoletion-org.apache.cassandra.db.lifecycle.LogTransaction$SSTableTidier,
private final org.apache.cassandra.db.lifecycle.Tracker 
org.apache.cassandra.db.lifecycle.LogTransaction$SSTableTidier.tracker-org.apache.cassandra.db.lifecycle.Tracker,
public final java.util.Collection 
org.apache.cassandra.db.lifecycle.Tracker.subscribers-java.util.concurrent.CopyOnWriteArrayList,
public final java.util.Collection 
org.apache.cassandra.db.lifecycle.Tracker.subscribers-org.apache.cassandra.db.compaction.CompactionStrategyManager,
private final org.apache.cassandra.db.ColumnFamilyStore 
org.apache.cassandra.db.compaction.CompactionStrategyManager.cfs-org.apache.cassandra.db.ColumnFamilyStore,
public final org.apache.cassandra.db.Keyspace 
org.apache.cassandra.db.ColumnFamilyStore.keyspace-org.apache.cassandra.db.Keyspace,
private final java.util.concurrent.ConcurrentMap 
org.apache.cassandra.db.Keyspace.columnFamilyStores-java.util.concurrent.ConcurrentHashMap,
private final java.util.concurrent.ConcurrentMap 
org.apache.cassandra.db.Keyspace.columnFamilyStores-org.apache.cassandra.db.ColumnFamilyStore,
private final org.apache.cassandra.db.lifecycle.Tracker 
org.apache.cassandra.db.ColumnFamilyStore.data-org.apache.cassandra.db.lifecycle.Tracker,
final java.util.concurrent.atomic.AtomicReference 
org.apache.cassandra.db.lifecycle.Tracker.view-java.util.concurrent.atomic.AtomicReference,
private volatile java.lang.Object 
java.util.concurrent.atomic.AtomicReference.value-org.apache.cassandra.db.lifecycle.View,
public final java.util.List 
org.apache.cassandra.db.lifecycle.View.liveMemtables-com.google.common.collect.SingletonImmutableList,
final transient java.lang.Object 
com.google.common.collect.SingletonImmutableList.element-org.apache.cassandra.db.Memtable,
private final org.apache.cassandra.utils.memory.MemtableAllocator 
org.apache.cassandra.db.Memtable.allocator-org.apache.cassandra.utils.memory.SlabAllocator,
private final org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator 
org.apache.cassandra.utils.memory.MemtableAllocator.onHeap-org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator,
private final org.apache.cassandra.utils.memory.MemtablePool$SubPool 
org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator.parent-org.apache.cassandra.utils.memory.MemtablePool$SubPool,
final org.apache.cassandra.utils.memory.MemtablePool 
org.apache.cassandra.utils.memory.MemtablePool$SubPool.this$0-org.apache.cassandra.utils.memory.SlabPool,
final org.apache.cassandra.utils.memory.MemtableCleanerThread 
org.apache.cassandra.utils.memory.MemtablePool.cleaner-org.apache.cassandra.utils.memory.MemtableCleanerThread,
private java.lang.ThreadGroup java.lang.Thread.group-java.lang.ThreadGroup,
private final java.lang.ThreadGroup 
java.lang.ThreadGroup.parent-java.lang.ThreadGroup,
java.lang.Thread[] java.lang.ThreadGroup.threads-[Ljava.lang.Thread;,
java.lang.Thread[] java.lang.ThreadGroup.threads-java.lang.Thread,
private java.lang.Runnable 
java.lang.Thread.target-java.util.concurrent.ThreadPoolExecutor$Worker,
final java.util.concurrent.ThreadPoolExecutor 
java.util.concurrent.ThreadPoolExecutor$Worker.this$0-java.util.concurrent.ScheduledThreadPoolExecutor,
private final java.util.concurrent.BlockingQueue 
java.util.concurrent.ThreadPoolExecutor.workQueue-java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue,
private final java.util.concurrent.BlockingQueue 
java.util.concurrent.ThreadPoolExecutor.workQueue-java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask,
private java.util.concurrent.Callable 
java.util.concurrent.FutureTask.callable-java.util.concurrent.Executors$RunnableAdapter,
final java.lang.Runnable 
java.util.concurrent.Executors$RunnableAdapter.task-sun.rmi.transport.DGCImpl$1,
final sun.rmi.transport.DGCImpl 
sun.rmi.transport.DGCImpl$1.this$0-sun.rmi.transport.DGCImpl,
private java.util.Map sun.rmi.transport.DGCImpl.leaseTable-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
java.lang.Object 
java.util.HashMap$Node.value-sun.rmi.transport.DGCImpl$LeaseInfo,
java.util.Set sun.rmi.transport.DGCImpl$LeaseInfo.notifySet-java.util.HashSet,
private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
final java.lang.Object java.util.HashMap$Node.key-sun.rmi.transport.Target,
private final sun.rmi.transport.WeakRef 
sun.rmi.transport.Target.weakImpl-sun.rmi.transport.WeakRef,
private java.lang.Object 
sun.rmi.transport.WeakRef.strongRef-javax.management.remote.rmi.RMIJRMPServerImpl,
private javax.management.MBeanServer 
javax.management.remote.rmi.RMIServerImpl.mbeanServer-com.sun.jmx.mbeanserver.JmxMBeanServer,
private volatile javax.management.MBeanServer 
com.sun.jmx.mbeanserver.JmxMBeanServer.mbsInterceptor-com.sun.jmx.interceptor.DefaultMBeanServerInterceptor,
private final transient com.sun.jmx.mbeanserver.Repository 
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.repository-com.sun.jmx.mbeanserver.Repository,
private final java.util.Map 
com.sun.jmx.mbeanserver.Repository.domainTb-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
java.lang.Object java.util.HashMap$Node.value-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
java.lang.Object 
java.util.HashMap$Node.value-com.sun.jmx.mbeanserver.NamedObject,
private final javax.management.DynamicMBean 
com.sun.jmx.mbeanserver.NamedObject.object-com.sun.jmx.mbeanserver.StandardMBeanSupport,
private final java.lang.Object 
com.sun.jmx.mbeanserver.MBeanSupport.resource-org.apache.cassandra.metrics.CassandraMetricsRegistry$JmxGauge,
private final com.codahale.metrics.Gauge 
org.apache.cassandra.metrics.CassandraMetricsRegistry$JmxGauge.metric-org.apache.cassandra.metrics.ThreadPoolMetrics$4,
final java.util.concurrent.ThreadPoolExecutor 
org.apache.cassandra.metrics.ThreadPoolMetrics$4.val$executor-org.apache.cassandra.concurrent.JMXConfigurableThreadPoolExecutor,
private final java.util.HashSet 
java.util.concurrent.ThreadPoolExecutor.workers-java.util.HashSet,
private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
final java.lang.Object 
java.util.HashMap$Node.key-java.util.concurrent.ThreadPoolExecutor$Worker,
final java.lang.Thread 
java.util.concurrent.ThreadPoolExecutor$Worker.thread-java.lang.Thread,
private java.lang.ThreadGroup java.lang.Thread.group-java.lang.ThreadGroup,
java.lang.Thread[] java.lang.ThreadGroup.threads-[Ljava.lang.Thread;,
java.lang.Thread[] java.lang.ThreadGroup.threads-java.lang.Thread,
private java.lang.Runnable 
java.lang.Thread.target-org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler,
protected final org.apache.cassandra.streaming.StreamSession 
org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session-org.apache.cassandra.streaming.StreamSession,
private org.apache.cassandra.streaming.StreamResultFuture 
org.apache.cassandra.streaming.StreamSession.streamResult-org.apache.cassandra.streaming.StreamResultFuture,
private final java.util.Collection 
org.apache.cassandra.streaming.StreamResultFuture.eventListeners-java.util.concurrent.ConcurrentLinkedQueue,
private final java.util.Collection 
org.apache.cassandra.streaming.StreamResultFuture.eventListeners-org.apache.cassandra.repair.LocalSyncTask,
private final com.google.common.util.concurrent.ExecutionList 
com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
final java.lang.Runnable 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$CombinedFuture$2,
final com.google.common.util.concurrent.Futures$CombinedFuture 
com.google.common.util.concurrent.Futures$CombinedFuture$2.this$0-com.google.common.util.concurrent.Futures$CombinedFuture,
private final com.google.common.util.concurrent.ExecutionList 
com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
final java.lang.Runnable 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$ChainingListenableFuture$1,
final com.google.common.util.concurrent.Futures$ChainingListenableFuture 
com.google.common.util.concurrent.Futures$ChainingListenableFuture$1.this$0-com.google.common.util.concurrent.Futures$ChainingListenableFuture,
private final com.google.common.util.concurrent.ExecutionList 
com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
final java.lang.Runnable 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$6,
final com.google.common.util.concurrent.FutureCallback 
com.google.common.util.concurrent.Futures$6.val$callback-org.apache.cassandra.repair.RepairJob$3,
final org.apache.cassandra.repair.RepairJob 
org.apache.cassandra.repair.RepairJob$3.this$0-org.apache.cassandra.repair.RepairJob,
private final org.apache.cassandra.repair.RepairSession 
org.apache.cassandra.repair.RepairJob.session-org.apache.cassandra.repair.RepairSession,
private final com.google.common.util.concurrent.ExecutionList 
com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.next-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.next-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
final java.lang.Runnable 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-org.apache.cassandra.service.ActiveRepairService$1,
final org.apache.cassandra.service.ActiveRepairService 
org.apache.cassandra.service.ActiveRepairService$1.this$0-org.apache.cassandra.service.ActiveRepairService,
private final java.util.concurrent.ConcurrentMap 
org.apache.cassandra.service.ActiveRepairService.parentRepairSessions-java.util.concurrent.ConcurrentHashMap,
private final java.util.concurrent.ConcurrentMap 
org.apache.cassandra.service.ActiveRepairService.parentRepairSessions-org.apache.cassandra.service.ActiveRepairService$ParentRepairSession,
private final java.util.Map 
org.apache.cassandra.service.ActiveRepairService$ParentRepairSession.sstableMap-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
java.lang.Object java.util.HashMap$Node.value-java.util.HashSet,
private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
final java.lang.Object 
java.util.HashMap$Node.key-org.apache.cassandra.io.sstable.format.big.BigTableReader,
private final org.apache.cassandra.utils.concurrent.Ref 
org.apache.cassandra.io.sstable.format.SSTableReader.selfRef-org.apache.cassandra.utils.concurrent.Ref]
{code}

It looks like Ref.Visitor is run after an sstable has been obsoleted, and while 
there's a repair task in a threadpool which is streaming (or waiting to stream) 
the same sstable to another node. Strangely, the final few steps back to itself 
happens through ParentRepairSession.sstableMap, which maps uuids to sets of 
strings, so I'm not sure how that's possible.

This happened on cassandra-3.0, 5a5d0a1

  was:
Saw this pop up in one of our tests:

{code}
09:34:53 ERROR [Strong-Reference-Leak-Detector:1] 2016-06-02 16:28:08,566  
NoSpamLogger.java:97 - Strong self-ref loop detected 
[/tmp/tier1/keyspace1/standard1-b56b52b128da11e6a2847ba8a8db3060/mb-97-big, 
private org.apache.cassandra.utils.concurrent.Ref 
org.apache.cassandra.io.sstable.format.SSTableReader$InstanceTidier.globalRef-org.apache.cassandra.utils.concurrent.Ref,
 
final org.apache.cassandra.utils.concurrent.Ref$State 
org.apache.cassandra.utils.concurrent.Ref.state-org.apache.cassandra.utils.concurrent.Ref$State,
 
final org.apache.cassandra.utils.concurrent.Ref$GlobalState 
org.apache.cassandra.utils.concurrent.Ref$State.globalState-org.apache.cassandra.utils.concurrent.Ref$GlobalState,
 
private final org.apache.cassandra.utils.concurrent.RefCounted$Tidy 
org.apache.cassandra.utils.concurrent.Ref$GlobalState.tidy-org.apache.cassandra.io.sstable.format.SSTableReader$GlobalTidy,
private volatile java.lang.Runnable 
org.apache.cassandra.io.sstable.format.SSTableReader$GlobalTidy.obsoletion-org.apache.cassandra.db.lifecycle.LogTransaction$SSTableTidier,
private final org.apache.cassandra.db.lifecycle.Tracker 
org.apache.cassandra.db.lifecycle.LogTransaction$SSTableTidier.tracker-org.apache.cassandra.db.lifecycle.Tracker,
public final java.util.Collection 
org.apache.cassandra.db.lifecycle.Tracker.subscribers-java.util.concurrent.CopyOnWriteArrayList,
public final java.util.Collection 
org.apache.cassandra.db.lifecycle.Tracker.subscribers-org.apache.cassandra.db.compaction.CompactionStrategyManager,
private final org.apache.cassandra.db.ColumnFamilyStore 
org.apache.cassandra.db.compaction.CompactionStrategyManager.cfs-org.apache.cassandra.db.ColumnFamilyStore,
public final org.apache.cassandra.db.Keyspace 
org.apache.cassandra.db.ColumnFamilyStore.keyspace-org.apache.cassandra.db.Keyspace,
private final java.util.concurrent.ConcurrentMap 
org.apache.cassandra.db.Keyspace.columnFamilyStores-java.util.concurrent.ConcurrentHashMap,
private final java.util.concurrent.ConcurrentMap 
org.apache.cassandra.db.Keyspace.columnFamilyStores-org.apache.cassandra.db.ColumnFamilyStore,
private final org.apache.cassandra.db.lifecycle.Tracker 
org.apache.cassandra.db.ColumnFamilyStore.data-org.apache.cassandra.db.lifecycle.Tracker,
final java.util.concurrent.atomic.AtomicReference 
org.apache.cassandra.db.lifecycle.Tracker.view-java.util.concurrent.atomic.AtomicReference,
private volatile java.lang.Object 
java.util.concurrent.atomic.AtomicReference.value-org.apache.cassandra.db.lifecycle.View,
public final java.util.List 
org.apache.cassandra.db.lifecycle.View.liveMemtables-com.google.common.collect.SingletonImmutableList,
final transient java.lang.Object 
com.google.common.collect.SingletonImmutableList.element-org.apache.cassandra.db.Memtable,
private final org.apache.cassandra.utils.memory.MemtableAllocator 
org.apache.cassandra.db.Memtable.allocator-org.apache.cassandra.utils.memory.SlabAllocator,
private final org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator 
org.apache.cassandra.utils.memory.MemtableAllocator.onHeap-org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator,
private final org.apache.cassandra.utils.memory.MemtablePool$SubPool 
org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator.parent-org.apache.cassandra.utils.memory.MemtablePool$SubPool,
final org.apache.cassandra.utils.memory.MemtablePool 
org.apache.cassandra.utils.memory.MemtablePool$SubPool.this$0-org.apache.cassandra.utils.memory.SlabPool,
final org.apache.cassandra.utils.memory.MemtableCleanerThread 
org.apache.cassandra.utils.memory.MemtablePool.cleaner-org.apache.cassandra.utils.memory.MemtableCleanerThread,
private java.lang.ThreadGroup java.lang.Thread.group-java.lang.ThreadGroup,
private final java.lang.ThreadGroup 
java.lang.ThreadGroup.parent-java.lang.ThreadGroup,
java.lang.Thread[] java.lang.ThreadGroup.threads-[Ljava.lang.Thread;,
java.lang.Thread[] java.lang.ThreadGroup.threads-java.lang.Thread,
private java.lang.Runnable 
java.lang.Thread.target-java.util.concurrent.ThreadPoolExecutor$Worker,
final java.util.concurrent.ThreadPoolExecutor 
java.util.concurrent.ThreadPoolExecutor$Worker.this$0-java.util.concurrent.ScheduledThreadPoolExecutor,
private final java.util.concurrent.BlockingQueue 
java.util.concurrent.ThreadPoolExecutor.workQueue-java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue,
private final java.util.concurrent.BlockingQueue 
java.util.concurrent.ThreadPoolExecutor.workQueue-java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask,
private java.util.concurrent.Callable 
java.util.concurrent.FutureTask.callable-java.util.concurrent.Executors$RunnableAdapter,
final java.lang.Runnable 
java.util.concurrent.Executors$RunnableAdapter.task-sun.rmi.transport.DGCImpl$1,
final sun.rmi.transport.DGCImpl 
sun.rmi.transport.DGCImpl$1.this$0-sun.rmi.transport.DGCImpl,
private java.util.Map sun.rmi.transport.DGCImpl.leaseTable-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
java.lang.Object 
java.util.HashMap$Node.value-sun.rmi.transport.DGCImpl$LeaseInfo,
java.util.Set sun.rmi.transport.DGCImpl$LeaseInfo.notifySet-java.util.HashSet,
private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
final java.lang.Object java.util.HashMap$Node.key-sun.rmi.transport.Target,
private final sun.rmi.transport.WeakRef 
sun.rmi.transport.Target.weakImpl-sun.rmi.transport.WeakRef,
private java.lang.Object 
sun.rmi.transport.WeakRef.strongRef-javax.management.remote.rmi.RMIJRMPServerImpl,
private javax.management.MBeanServer 
javax.management.remote.rmi.RMIServerImpl.mbeanServer-com.sun.jmx.mbeanserver.JmxMBeanServer,
private volatile javax.management.MBeanServer 
com.sun.jmx.mbeanserver.JmxMBeanServer.mbsInterceptor-com.sun.jmx.interceptor.DefaultMBeanServerInterceptor,
private final transient com.sun.jmx.mbeanserver.Repository 
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.repository-com.sun.jmx.mbeanserver.Repository,
private final java.util.Map 
com.sun.jmx.mbeanserver.Repository.domainTb-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
java.lang.Object java.util.HashMap$Node.value-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
java.lang.Object 
java.util.HashMap$Node.value-com.sun.jmx.mbeanserver.NamedObject,
private final javax.management.DynamicMBean 
com.sun.jmx.mbeanserver.NamedObject.object-com.sun.jmx.mbeanserver.StandardMBeanSupport,
private final java.lang.Object 
com.sun.jmx.mbeanserver.MBeanSupport.resource-org.apache.cassandra.metrics.CassandraMetricsRegistry$JmxGauge,
private final com.codahale.metrics.Gauge 
org.apache.cassandra.metrics.CassandraMetricsRegistry$JmxGauge.metric-org.apache.cassandra.metrics.ThreadPoolMetrics$4,
final java.util.concurrent.ThreadPoolExecutor 
org.apache.cassandra.metrics.ThreadPoolMetrics$4.val$executor-org.apache.cassandra.concurrent.JMXConfigurableThreadPoolExecutor,
private final java.util.HashSet 
java.util.concurrent.ThreadPoolExecutor.workers-java.util.HashSet,
private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
final java.lang.Object 
java.util.HashMap$Node.key-java.util.concurrent.ThreadPoolExecutor$Worker,
final java.lang.Thread 
java.util.concurrent.ThreadPoolExecutor$Worker.thread-java.lang.Thread,
private java.lang.ThreadGroup java.lang.Thread.group-java.lang.ThreadGroup,
java.lang.Thread[] java.lang.ThreadGroup.threads-[Ljava.lang.Thread;,
java.lang.Thread[] java.lang.ThreadGroup.threads-java.lang.Thread,
private java.lang.Runnable 
java.lang.Thread.target-org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler,
protected final org.apache.cassandra.streaming.StreamSession 
org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session-org.apache.cassandra.streaming.StreamSession,
private org.apache.cassandra.streaming.StreamResultFuture 
org.apache.cassandra.streaming.StreamSession.streamResult-org.apache.cassandra.streaming.StreamResultFuture,
private final java.util.Collection 
org.apache.cassandra.streaming.StreamResultFuture.eventListeners-java.util.concurrent.ConcurrentLinkedQueue,
private final java.util.Collection 
org.apache.cassandra.streaming.StreamResultFuture.eventListeners-org.apache.cassandra.repair.LocalSyncTask,
private final com.google.common.util.concurrent.ExecutionList 
com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
final java.lang.Runnable 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$CombinedFuture$2,
final com.google.common.util.concurrent.Futures$CombinedFuture 
com.google.common.util.concurrent.Futures$CombinedFuture$2.this$0-com.google.common.util.concurrent.Futures$CombinedFuture,
private final com.google.common.util.concurrent.ExecutionList 
com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
final java.lang.Runnable 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$ChainingListenableFuture$1,
final com.google.common.util.concurrent.Futures$ChainingListenableFuture 
com.google.common.util.concurrent.Futures$ChainingListenableFuture$1.this$0-com.google.common.util.concurrent.Futures$ChainingListenableFuture,
private final com.google.common.util.concurrent.ExecutionList 
com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
final java.lang.Runnable 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$6,
final com.google.common.util.concurrent.FutureCallback 
com.google.common.util.concurrent.Futures$6.val$callback-org.apache.cassandra.repair.RepairJob$3,
final org.apache.cassandra.repair.RepairJob 
org.apache.cassandra.repair.RepairJob$3.this$0-org.apache.cassandra.repair.RepairJob,
private final org.apache.cassandra.repair.RepairSession 
org.apache.cassandra.repair.RepairJob.session-org.apache.cassandra.repair.RepairSession,
private final com.google.common.util.concurrent.ExecutionList 
com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.next-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.next-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
final java.lang.Runnable 
com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-org.apache.cassandra.service.ActiveRepairService$1,
final org.apache.cassandra.service.ActiveRepairService 
org.apache.cassandra.service.ActiveRepairService$1.this$0-org.apache.cassandra.service.ActiveRepairService,
private final java.util.concurrent.ConcurrentMap 
org.apache.cassandra.service.ActiveRepairService.parentRepairSessions-java.util.concurrent.ConcurrentHashMap,
private final java.util.concurrent.ConcurrentMap 
org.apache.cassandra.service.ActiveRepairService.parentRepairSessions-org.apache.cassandra.service.ActiveRepairService$ParentRepairSession,
private final java.util.Map 
org.apache.cassandra.service.ActiveRepairService$ParentRepairSession.sstableMap-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
java.lang.Object java.util.HashMap$Node.value-java.util.HashSet,
private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-[Ljava.util.HashMap$Node;,
transient java.util.HashMap$Node[] 
java.util.HashMap.table-java.util.HashMap$Node,
final java.lang.Object 
java.util.HashMap$Node.key-org.apache.cassandra.io.sstable.format.big.BigTableReader,
private final org.apache.cassandra.utils.concurrent.Ref 
org.apache.cassandra.io.sstable.format.SSTableReader.selfRef-org.apache.cassandra.utils.concurrent.Ref]
{code}

It looks like Ref.Visitor is run after an sstable has been obsoleted, and while 
there's a repair task in a threadpool which is streaming (or waiting to stream) 
the same sstable to another node. Strangely, the final few steps back to itself 
happens through ParentRepairSession.sstableMap, which maps uuids to sets of 
strings, so I'm not sure how that's possible.


> Strong self ref loop detected
> -----------------------------
>
>                 Key: CASSANDRA-11958
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11958
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Blake Eggleston
>
> Saw this pop up in one of our tests:
> {code}
> 09:34:53 ERROR [Strong-Reference-Leak-Detector:1] 2016-06-02 16:28:08,566  
> NoSpamLogger.java:97 - Strong self-ref loop detected 
> [/tmp/tier1/keyspace1/standard1-b56b52b128da11e6a2847ba8a8db3060/mb-97-big, 
> private org.apache.cassandra.utils.concurrent.Ref 
> org.apache.cassandra.io.sstable.format.SSTableReader$InstanceTidier.globalRef-org.apache.cassandra.utils.concurrent.Ref,
>  
> final org.apache.cassandra.utils.concurrent.Ref$State 
> org.apache.cassandra.utils.concurrent.Ref.state-org.apache.cassandra.utils.concurrent.Ref$State,
>  
> final org.apache.cassandra.utils.concurrent.Ref$GlobalState 
> org.apache.cassandra.utils.concurrent.Ref$State.globalState-org.apache.cassandra.utils.concurrent.Ref$GlobalState,
>  
> private final org.apache.cassandra.utils.concurrent.RefCounted$Tidy 
> org.apache.cassandra.utils.concurrent.Ref$GlobalState.tidy-org.apache.cassandra.io.sstable.format.SSTableReader$GlobalTidy,
> private volatile java.lang.Runnable 
> org.apache.cassandra.io.sstable.format.SSTableReader$GlobalTidy.obsoletion-org.apache.cassandra.db.lifecycle.LogTransaction$SSTableTidier,
> private final org.apache.cassandra.db.lifecycle.Tracker 
> org.apache.cassandra.db.lifecycle.LogTransaction$SSTableTidier.tracker-org.apache.cassandra.db.lifecycle.Tracker,
> public final java.util.Collection 
> org.apache.cassandra.db.lifecycle.Tracker.subscribers-java.util.concurrent.CopyOnWriteArrayList,
> public final java.util.Collection 
> org.apache.cassandra.db.lifecycle.Tracker.subscribers-org.apache.cassandra.db.compaction.CompactionStrategyManager,
> private final org.apache.cassandra.db.ColumnFamilyStore 
> org.apache.cassandra.db.compaction.CompactionStrategyManager.cfs-org.apache.cassandra.db.ColumnFamilyStore,
> public final org.apache.cassandra.db.Keyspace 
> org.apache.cassandra.db.ColumnFamilyStore.keyspace-org.apache.cassandra.db.Keyspace,
> private final java.util.concurrent.ConcurrentMap 
> org.apache.cassandra.db.Keyspace.columnFamilyStores-java.util.concurrent.ConcurrentHashMap,
> private final java.util.concurrent.ConcurrentMap 
> org.apache.cassandra.db.Keyspace.columnFamilyStores-org.apache.cassandra.db.ColumnFamilyStore,
> private final org.apache.cassandra.db.lifecycle.Tracker 
> org.apache.cassandra.db.ColumnFamilyStore.data-org.apache.cassandra.db.lifecycle.Tracker,
> final java.util.concurrent.atomic.AtomicReference 
> org.apache.cassandra.db.lifecycle.Tracker.view-java.util.concurrent.atomic.AtomicReference,
> private volatile java.lang.Object 
> java.util.concurrent.atomic.AtomicReference.value-org.apache.cassandra.db.lifecycle.View,
> public final java.util.List 
> org.apache.cassandra.db.lifecycle.View.liveMemtables-com.google.common.collect.SingletonImmutableList,
> final transient java.lang.Object 
> com.google.common.collect.SingletonImmutableList.element-org.apache.cassandra.db.Memtable,
> private final org.apache.cassandra.utils.memory.MemtableAllocator 
> org.apache.cassandra.db.Memtable.allocator-org.apache.cassandra.utils.memory.SlabAllocator,
> private final 
> org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator 
> org.apache.cassandra.utils.memory.MemtableAllocator.onHeap-org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator,
> private final org.apache.cassandra.utils.memory.MemtablePool$SubPool 
> org.apache.cassandra.utils.memory.MemtableAllocator$SubAllocator.parent-org.apache.cassandra.utils.memory.MemtablePool$SubPool,
> final org.apache.cassandra.utils.memory.MemtablePool 
> org.apache.cassandra.utils.memory.MemtablePool$SubPool.this$0-org.apache.cassandra.utils.memory.SlabPool,
> final org.apache.cassandra.utils.memory.MemtableCleanerThread 
> org.apache.cassandra.utils.memory.MemtablePool.cleaner-org.apache.cassandra.utils.memory.MemtableCleanerThread,
> private java.lang.ThreadGroup java.lang.Thread.group-java.lang.ThreadGroup,
> private final java.lang.ThreadGroup 
> java.lang.ThreadGroup.parent-java.lang.ThreadGroup,
> java.lang.Thread[] java.lang.ThreadGroup.threads-[Ljava.lang.Thread;,
> java.lang.Thread[] java.lang.ThreadGroup.threads-java.lang.Thread,
> private java.lang.Runnable 
> java.lang.Thread.target-java.util.concurrent.ThreadPoolExecutor$Worker,
> final java.util.concurrent.ThreadPoolExecutor 
> java.util.concurrent.ThreadPoolExecutor$Worker.this$0-java.util.concurrent.ScheduledThreadPoolExecutor,
> private final java.util.concurrent.BlockingQueue 
> java.util.concurrent.ThreadPoolExecutor.workQueue-java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue,
> private final java.util.concurrent.BlockingQueue 
> java.util.concurrent.ThreadPoolExecutor.workQueue-java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask,
> private java.util.concurrent.Callable 
> java.util.concurrent.FutureTask.callable-java.util.concurrent.Executors$RunnableAdapter,
> final java.lang.Runnable 
> java.util.concurrent.Executors$RunnableAdapter.task-sun.rmi.transport.DGCImpl$1,
> final sun.rmi.transport.DGCImpl 
> sun.rmi.transport.DGCImpl$1.this$0-sun.rmi.transport.DGCImpl,
> private java.util.Map sun.rmi.transport.DGCImpl.leaseTable-java.util.HashMap,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-[Ljava.util.HashMap$Node;,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-java.util.HashMap$Node,
> java.lang.Object 
> java.util.HashMap$Node.value-sun.rmi.transport.DGCImpl$LeaseInfo,
> java.util.Set sun.rmi.transport.DGCImpl$LeaseInfo.notifySet-java.util.HashSet,
> private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-[Ljava.util.HashMap$Node;,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-java.util.HashMap$Node,
> final java.lang.Object java.util.HashMap$Node.key-sun.rmi.transport.Target,
> private final sun.rmi.transport.WeakRef 
> sun.rmi.transport.Target.weakImpl-sun.rmi.transport.WeakRef,
> private java.lang.Object 
> sun.rmi.transport.WeakRef.strongRef-javax.management.remote.rmi.RMIJRMPServerImpl,
> private javax.management.MBeanServer 
> javax.management.remote.rmi.RMIServerImpl.mbeanServer-com.sun.jmx.mbeanserver.JmxMBeanServer,
> private volatile javax.management.MBeanServer 
> com.sun.jmx.mbeanserver.JmxMBeanServer.mbsInterceptor-com.sun.jmx.interceptor.DefaultMBeanServerInterceptor,
> private final transient com.sun.jmx.mbeanserver.Repository 
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.repository-com.sun.jmx.mbeanserver.Repository,
> private final java.util.Map 
> com.sun.jmx.mbeanserver.Repository.domainTb-java.util.HashMap,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-[Ljava.util.HashMap$Node;,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-java.util.HashMap$Node,
> java.lang.Object java.util.HashMap$Node.value-java.util.HashMap,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-[Ljava.util.HashMap$Node;,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-java.util.HashMap$Node,
> java.lang.Object 
> java.util.HashMap$Node.value-com.sun.jmx.mbeanserver.NamedObject,
> private final javax.management.DynamicMBean 
> com.sun.jmx.mbeanserver.NamedObject.object-com.sun.jmx.mbeanserver.StandardMBeanSupport,
> private final java.lang.Object 
> com.sun.jmx.mbeanserver.MBeanSupport.resource-org.apache.cassandra.metrics.CassandraMetricsRegistry$JmxGauge,
> private final com.codahale.metrics.Gauge 
> org.apache.cassandra.metrics.CassandraMetricsRegistry$JmxGauge.metric-org.apache.cassandra.metrics.ThreadPoolMetrics$4,
> final java.util.concurrent.ThreadPoolExecutor 
> org.apache.cassandra.metrics.ThreadPoolMetrics$4.val$executor-org.apache.cassandra.concurrent.JMXConfigurableThreadPoolExecutor,
> private final java.util.HashSet 
> java.util.concurrent.ThreadPoolExecutor.workers-java.util.HashSet,
> private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-[Ljava.util.HashMap$Node;,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-java.util.HashMap$Node,
> final java.lang.Object 
> java.util.HashMap$Node.key-java.util.concurrent.ThreadPoolExecutor$Worker,
> final java.lang.Thread 
> java.util.concurrent.ThreadPoolExecutor$Worker.thread-java.lang.Thread,
> private java.lang.ThreadGroup java.lang.Thread.group-java.lang.ThreadGroup,
> java.lang.Thread[] java.lang.ThreadGroup.threads-[Ljava.lang.Thread;,
> java.lang.Thread[] java.lang.ThreadGroup.threads-java.lang.Thread,
> private java.lang.Runnable 
> java.lang.Thread.target-org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler,
> protected final org.apache.cassandra.streaming.StreamSession 
> org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session-org.apache.cassandra.streaming.StreamSession,
> private org.apache.cassandra.streaming.StreamResultFuture 
> org.apache.cassandra.streaming.StreamSession.streamResult-org.apache.cassandra.streaming.StreamResultFuture,
> private final java.util.Collection 
> org.apache.cassandra.streaming.StreamResultFuture.eventListeners-java.util.concurrent.ConcurrentLinkedQueue,
> private final java.util.Collection 
> org.apache.cassandra.streaming.StreamResultFuture.eventListeners-org.apache.cassandra.repair.LocalSyncTask,
> private final com.google.common.util.concurrent.ExecutionList 
> com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
> private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
> com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
> final java.lang.Runnable 
> com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$CombinedFuture$2,
> final com.google.common.util.concurrent.Futures$CombinedFuture 
> com.google.common.util.concurrent.Futures$CombinedFuture$2.this$0-com.google.common.util.concurrent.Futures$CombinedFuture,
> private final com.google.common.util.concurrent.ExecutionList 
> com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
> private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
> com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
> final java.lang.Runnable 
> com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$ChainingListenableFuture$1,
> final com.google.common.util.concurrent.Futures$ChainingListenableFuture 
> com.google.common.util.concurrent.Futures$ChainingListenableFuture$1.this$0-com.google.common.util.concurrent.Futures$ChainingListenableFuture,
> private final com.google.common.util.concurrent.ExecutionList 
> com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
> private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
> com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
> final java.lang.Runnable 
> com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-com.google.common.util.concurrent.Futures$6,
> final com.google.common.util.concurrent.FutureCallback 
> com.google.common.util.concurrent.Futures$6.val$callback-org.apache.cassandra.repair.RepairJob$3,
> final org.apache.cassandra.repair.RepairJob 
> org.apache.cassandra.repair.RepairJob$3.this$0-org.apache.cassandra.repair.RepairJob,
> private final org.apache.cassandra.repair.RepairSession 
> org.apache.cassandra.repair.RepairJob.session-org.apache.cassandra.repair.RepairSession,
> private final com.google.common.util.concurrent.ExecutionList 
> com.google.common.util.concurrent.AbstractFuture.executionList-com.google.common.util.concurrent.ExecutionList,
> private com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
> com.google.common.util.concurrent.ExecutionList.runnables-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
> com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
> com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.next-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
> com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair 
> com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.next-com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair,
> final java.lang.Runnable 
> com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.runnable-org.apache.cassandra.service.ActiveRepairService$1,
> final org.apache.cassandra.service.ActiveRepairService 
> org.apache.cassandra.service.ActiveRepairService$1.this$0-org.apache.cassandra.service.ActiveRepairService,
> private final java.util.concurrent.ConcurrentMap 
> org.apache.cassandra.service.ActiveRepairService.parentRepairSessions-java.util.concurrent.ConcurrentHashMap,
> private final java.util.concurrent.ConcurrentMap 
> org.apache.cassandra.service.ActiveRepairService.parentRepairSessions-org.apache.cassandra.service.ActiveRepairService$ParentRepairSession,
> private final java.util.Map 
> org.apache.cassandra.service.ActiveRepairService$ParentRepairSession.sstableMap-java.util.HashMap,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-[Ljava.util.HashMap$Node;,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-java.util.HashMap$Node,
> java.lang.Object java.util.HashMap$Node.value-java.util.HashSet,
> private transient java.util.HashMap java.util.HashSet.map-java.util.HashMap,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-[Ljava.util.HashMap$Node;,
> transient java.util.HashMap$Node[] 
> java.util.HashMap.table-java.util.HashMap$Node,
> final java.lang.Object 
> java.util.HashMap$Node.key-org.apache.cassandra.io.sstable.format.big.BigTableReader,
> private final org.apache.cassandra.utils.concurrent.Ref 
> org.apache.cassandra.io.sstable.format.SSTableReader.selfRef-org.apache.cassandra.utils.concurrent.Ref]
> {code}
> It looks like Ref.Visitor is run after an sstable has been obsoleted, and 
> while there's a repair task in a threadpool which is streaming (or waiting to 
> stream) the same sstable to another node. Strangely, the final few steps back 
> to itself happens through ParentRepairSession.sstableMap, which maps uuids to 
> sets of strings, so I'm not sure how that's possible.
> This happened on cassandra-3.0, 5a5d0a1



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to