Buggy code:
public final MerkleTree tree ; private transient long validated ; private transient TreeRange range ; private transient TreeRangeIterator ranges ; private transient DecoratedKey lastKey ; public static final RowHash EMPTY_ROW = new MerkleTree . RowHash ( null , new byte [ 0 ] ) ; Validator ( AntiEntropyService . TreeRequest request ) { } Validator ( AntiEntropyService . TreeRequest request , MerkleTree tree ) { } public void prepare ( ColumnFamilyStore cfs ) { } public void add ( AbstractCompactedRow row ) { } private RowHash rowHash ( AbstractCompactedRow row ) { } public void complete ( ) { } void completeTree ( ) { } public void run ( ) { } } public static class TreeRequestVerbHandler implements ICompactSerializer < AntiEntropyService . TreeRequest > , IVerbHandler { public static final AntiEntropyService . TreeRequestVerbHandler SERIALIZER = new AntiEntropyService . TreeRequestVerbHandler ( ) ; static Message makeVerb ( AntiEntropyService . TreeRequest request , int version ) { } public void serialize ( AntiEntropyService . TreeRequest request , DataOutputStream dos , int version ) throws IOException { } public AntiEntropyService . TreeRequest deserialize ( DataInputStream dis , int version ) throws IOException { } public void doVerb ( Message message , String id ) { } } public static class TreeResponseVerbHandler implements ICompactSerializer < AntiEntropyService . Validator > , IVerbHandler { public static final AntiEntropyService . TreeResponseVerbHandler SERIALIZER = new AntiEntropyService . TreeResponseVerbHandler ( ) ; static Message makeVerb ( InetAddress local , AntiEntropyService . Validator validator ) { } public void serialize ( AntiEntropyService . Validator v , DataOutputStream dos , int version ) throws IOException { } public AntiEntropyService . Validator deserialize ( DataInputStream dis , int version ) throws IOException { } public void doVerb ( Message message , String id ) { } } static class CFPair extends Pair < String , String > { public CFPair ( String table , String cf ) { } } public static class TreeRequest { public final String sessionid ; public final InetAddress endpoint ; public final Range range ; public final AntiEntropyService . CFPair cf ; public TreeRequest ( String sessionid , InetAddress endpoint , Range range , AntiEntropyService . CFPair cf ) { } @ Override public final int hashCode ( ) { } @ Override public final boolean equals ( Object o ) { } @ Override public String toString ( ) { } } class RepairSession extends WrappedRunnable implements IEndpointStateChangeSubscriber , IFailureDetectionEventListener { private final String sessionName ; private final String tablename ; private final String [ ] cfnames ; private final Range range ; private volatile Exception exception ; private final AtomicBoolean isFailed = new AtomicBoolean ( false ) ; private final Set < InetAddress > endpoints ; final Queue < AntiEntropyService . RepairSession . RepairJob > jobs = new ConcurrentLinkedQueue < AntiEntropyService . RepairSession . RepairJob > ( ) ; final Map < String , AntiEntropyService . RepairSession . RepairJob > activeJobs = new ConcurrentHashMap < String , AntiEntropyService . RepairSession . RepairJob > ( ) ; private final SimpleCondition completed = new SimpleCondition ( ) ; public final Condition differencingDone = new SimpleCondition ( ) ; public RepairSession ( AntiEntropyService . TreeRequest req , String tablename , String ... cfnames ) { } public RepairSession ( Range range , String tablename , String ... cfnames ) { } private RepairSession ( String id , Range range , String tablename , String [ ] cfnames ) { } public String getName ( ) { } AntiEntropyService . RepairFuture getFuture ( ) { } private String repairedNodes ( ) { } public void runMayThrow ( ) throws Exception { AntiEntropyService . logger . info ( String . format ( "[repair<seq2seq4repair_space>#%s]<seq2seq4repair_space>new<seq2seq4repair_space>session:<seq2seq4repair_space>will<seq2seq4repair_space>sync<seq2seq4repair_space>%s<seq2seq4repair_space>on<seq2seq4repair_space>range<seq2seq4repair_space>%s<seq2seq4repair_space>for<seq2seq4repair_space>%s.%s" , getName ( ) , repairedNodes ( ) , range , tablename , Arrays . toString ( cfnames ) ) ) ; if ( endpoints . isEmpty ( ) ) { differencingDone . signalAll ( ) ; AntiEntropyService . logger . info ( "[repair<seq2seq4repair_space>#%s]<seq2seq4repair_space>No<seq2seq4repair_space>neighbors<seq2seq4repair_space>to<seq2seq4repair_space>repair<seq2seq4repair_space>with<seq2seq4repair_space>on<seq2seq4repair_space>range<seq2seq4repair_space>%s:<seq2seq4repair_space>session<seq2seq4repair_space>completed" , getName ( ) , range ) ; return ; } for ( InetAddress endpoint : endpoints ) { if ( ! ( FailureDetector . instance . isAlive ( endpoint ) ) ) { differencingDone . signalAll ( ) ; <START_BUG> AntiEntropyService . logger . info ( "[repair<seq2seq4repair_space>#%s]<seq2seq4repair_space>Could<seq2seq4repair_space>not<seq2seq4repair_space>proceed<seq2seq4repair_space>on<seq2seq4repair_space>repair<seq2seq4repair_space>because<seq2seq4repair_space>a<seq2seq4repair_space>neighbor<seq2seq4repair_space>(%s)<seq2seq4repair_space>is<seq2seq4repair_space>dead:<seq2seq4repair_space>session<seq2seq4repair_space>failed" , getName ( ) , endpoint ) ; <END_BUG> return ; } } AntiEntropyService . instance . sessions . put ( getName ( ) , this ) ; Gossiper . instance . register ( this ) ; FailureDetector . instance . registerFailureDetectionEventListener ( this ) ; try { for ( String cfname : cfnames ) { AntiEntropyService . RepairSession . RepairJob job = new AntiEntropyService . RepairSession . RepairJob ( cfname ) ; jobs . offer ( job ) ; activeJobs . put ( cfname , job ) ; } jobs . peek ( ) . sendTreeRequests ( ) ; completed . await ( ) ; if ( ( exception ) == null ) { AntiEntropyService . logger . info ( String . format ( "[repair<seq2seq4repair_space>#%s]<seq2seq4repair_space>session<seq2seq4repair_space>completed<seq2seq4repair_space>successfully" , getName ( ) ) ) ; } else { AntiEntropyService . logger . error ( String . format ( "[repair<seq2seq4repair_space>#%s]<seq2seq4repair_space>session<seq2seq4repair_space>completed<seq2seq4repair_space>with<seq2seq4repair_space>the<seq2seq4repair_space>following<seq2seq4repair_space>error" , getName ( ) ) , exception ) ; throw exception ; } } catch ( InterruptedException e ) { throw new RuntimeException ( "Interrupted<seq2seq4repair_space>while<seq2seq4repair_space>waiting<seq2seq4repair_space>for<seq2seq4repair_space>repair:<seq2seq4repair_space>repair<seq2seq4repair_space>will<seq2seq4repair_space>continue<seq2seq4repair_space>in<seq2seq4repair_space>the<seq2seq4repair_space>background." ) ; } finally { FailureDetector . instance . unregisterFailureDetectionEventListener ( this ) ; Gossiper . instance . unregister ( this ) ; AntiEntropyService . instance . sessions . remove ( getName ( ) ) ; } } void completed ( AntiEntropyService . RepairSession . Differencer differencer ) { } void failedNode ( InetAddress remote ) { } public void onJoin ( InetAddress endpoint , EndpointState epState ) { } public void onChange ( InetAddress endpoint , ApplicationState state , VersionedValue value ) { } public void onAlive ( InetAddress endpoint , EndpointState state ) { } public void onDead ( InetAddress endpoint , EndpointState state ) { }

Fix:
AntiEntropyService . logger . info ( String . format ( "[repair<seq2seq4repair_space>#%s]<seq2seq4repair_space>Cannot<seq2seq4repair_space>proceed<seq2seq4repair_space>on<seq2seq4repair_space>repair<seq2seq4repair_space>because<seq2seq4repair_space>a<seq2seq4repair_space>neighbor<seq2seq4repair_space>(%s)<seq2seq4repair_space>is<seq2seq4repair_space>dead:<seq2seq4repair_space>session<seq2seq4repair_space>failed" , getName ( ) , endpoint ) ) ;