Buggy code:
public class StorageProxy implements StorageProxyMBean { private static Logger logger = Logger . getLogger ( StorageProxy . class ) ; private static TimedStatsDeque readStats = new TimedStatsDeque ( 60000 ) ; private static TimedStatsDeque rangeStats = new TimedStatsDeque ( 60000 ) ; private static TimedStatsDeque writeStats = new TimedStatsDeque ( 60000 ) ; private StorageProxy ( ) { } private static Map < EndPoint , Message > createWriteMessages ( RowMutation rm , Map < EndPoint , EndPoint > endpointMap ) throws IOException { } public static void insert ( RowMutation rm ) { } public static void insertBlocking ( RowMutation rm , int consistency_level ) throws UnavailableException { } private static List < EndPoint > getUnhintedNodes ( Map < EndPoint , EndPoint > endpointMap ) { } private static int determineBlockFor ( int consistency_level ) { } public static void insertBlocking ( RowMutation rm ) throws UnavailableException { } private static List < Row > weakReadRemote ( List < ReadCommand > commands ) throws IOException , UnavailableException { } public static List < Row > readProtocol ( List < ReadCommand > commands , int consistency_level ) throws IOException , TimeoutException , InvalidRequestException , UnavailableException { } private static List < Row > strongRead ( List < ReadCommand > commands ) throws IOException , TimeoutException , InvalidRequestException , UnavailableException { List < QuorumResponseHandler < Row > > quorumResponseHandlers = new ArrayList < QuorumResponseHandler < Row > > ( ) ; List < EndPoint [ ] > commandEndPoints = new ArrayList < EndPoint [ ] > ( ) ; List < Row > rows = new ArrayList < Row > ( ) ; int commandIndex = 0 ; for ( ReadCommand command : commands ) { assert ! ( command . isDigestQuery ( ) ) ; ReadCommand readMessageDigestOnly = command . copy ( ) ; readMessageDigestOnly . setDigestQuery ( true ) ; Message message = command . makeReadMessage ( ) ; Message messageDigestOnly = readMessageDigestOnly . makeReadMessage ( ) ; QuorumResponseHandler < Row > quorumResponseHandler = new QuorumResponseHandler < Row > ( DatabaseDescriptor . getQuorum ( ) , new ReadResponseResolver ( ) ) ; EndPoint dataPoint = StorageService . instance ( ) . findSuitableEndPoint ( command . key ) ; List < EndPoint > endpointList = new ArrayList < EndPoint > ( Arrays . asList ( StorageService . instance ( ) . getReadStorageEndPoints ( command . key ) ) ) ; endpointList . remove ( dataPoint ) ; EndPoint [ ] endPoints = new EndPoint [ ( endpointList . size ( ) ) + 1 ] ; Message [ ] messages = new Message [ ( endpointList . size ( ) ) + 1 ] ; endPoints [ 0 ] = dataPoint ; messages [ 0 ] = message ; if ( StorageProxy . logger . isDebugEnabled ( ) ) StorageProxy . logger . debug ( ( ( ( ( ( "strongread<seq2seq4repair_space>reading<seq2seq4repair_space>data<seq2seq4repair_space>for<seq2seq4repair_space>" + command ) + "<seq2seq4repair_space>from<seq2seq4repair_space>" ) + ( message . getMessageId ( ) ) ) + "@" ) + dataPoint ) ) ; for ( int i = 1 ; i < ( endPoints . length ) ; i ++ ) { EndPoint digestPoint = endpointList . get ( ( i - 1 ) ) ; endPoints [ i ] = digestPoint ; messages [ i ] = messageDigestOnly ; if ( StorageProxy . logger . isDebugEnabled ( ) ) StorageProxy . logger . debug ( ( ( ( ( ( "strongread<seq2seq4repair_space>reading<seq2seq4repair_space>digest<seq2seq4repair_space>for<seq2seq4repair_space>" + command ) + "<seq2seq4repair_space>from<seq2seq4repair_space>" ) + ( messageDigestOnly . getMessageId ( ) ) ) + "@" ) + digestPoint ) ) ; } MessagingService . getMessagingInstance ( ) . sendRR ( messages , endPoints , quorumResponseHandler ) ; quorumResponseHandlers . add ( quorumResponseHandler ) ; commandEndPoints . add ( endPoints ) ; } for ( QuorumResponseHandler < Row > quorumResponseHandler : quorumResponseHandlers ) { Row row = null ; ReadCommand command = commands . get ( commandIndex ) ; try { long startTime2 = System . currentTimeMillis ( ) ; row = quorumResponseHandler . get ( ) ; if ( row != null ) rows . add ( row ) ; if ( StorageProxy . logger . isDebugEnabled ( ) ) StorageProxy . logger . debug ( ( ( "quorumResponseHandler:<seq2seq4repair_space>" + ( ( System . currentTimeMillis ( ) ) - startTime2 ) ) + "<seq2seq4repair_space>ms." ) ) ; } catch ( DigestMismatchException ex ) { if ( DatabaseDescriptor . getConsistencyCheck ( ) ) { IResponseResolver < Row > readResponseResolverRepair = new ReadResponseResolver ( ) ; QuorumResponseHandler < Row > quorumResponseHandlerRepair = new QuorumResponseHandler < Row > ( DatabaseDescriptor . getQuorum ( ) , readResponseResolverRepair ) ; <START_BUG> StorageProxy . logger . info ( ( "DigestMismatchException:<seq2seq4repair_space>" + ( command . key ) ) ) ; <END_BUG> Message messageRepair = command . makeReadMessage ( ) ; MessagingService . getMessagingInstance ( ) . sendRR ( messageRepair , commandEndPoints . get ( commandIndex ) , quorumResponseHandlerRepair ) ; try { row = quorumResponseHandlerRepair . get ( ) ; if ( row != null ) rows . add ( row ) ; } catch ( DigestMismatchException e ) { throw new RuntimeException ( ( "digest<seq2seq4repair_space>mismatch<seq2seq4repair_space>reading<seq2seq4repair_space>key<seq2seq4repair_space>" + ( command . key ) ) , e ) ; } } } commandIndex ++ ; } return rows ; } private static Map < String , Message [ ] > constructReplicaMessages ( Map < String , ReadCommand [ ] > readMessages ) throws IOException { } private static List < Row > weakReadLocal ( List < ReadCommand > commands ) throws IOException { } static List < String > getKeyRange ( RangeCommand rawCommand ) throws IOException , UnavailableException { } public double getReadLatency ( ) { } public double getRangeLatency ( ) { } public double getWriteLatency ( ) { } public int getReadOperations ( ) { } public int getRangeOperations ( ) { } public int getWriteOperations ( ) { } }

Fix:
StorageProxy . logger . info ( ( "DigestMismatchException:<seq2seq4repair_space>" + ( ex . getMessage ( ) ) ) ) ;