Github user ifesdjeen commented on a diff in the pull request:

    https://github.com/apache/cassandra/pull/278#discussion_r223868092
  
    --- Diff: 
src/java/org/apache/cassandra/service/reads/repair/AbstractReadRepair.java ---
    @@ -102,12 +104,24 @@ void sendReadCommand(Replica to, ReadCallback 
readCallback, boolean speculative)
                 else type = to.isFull() ? "full" : "transient";
                 Tracing.trace("Enqueuing {} data read to {}", type, to);
             }
    -        MessageOut<ReadCommand> message = command.createMessage();
    -        // if enabled, request additional info about repaired data from 
any full replicas
    -        if (command.isTrackingRepairedStatus() && to.isFull())
    -            message = 
message.withParameter(ParameterType.TRACK_REPAIRED_DATA, 
MessagingService.ONE_BYTE);
     
    -        MessagingService.instance().sendRRWithFailure(message, 
to.endpoint(), readCallback);
    +        if (to.isSelf())
    +        {
    +            try (ReadExecutionController executionController = 
command.executionController();
    --- End diff --
    
    Yes, you're absolutely right: it is wrong to block this thread for I/O. We 
in fact have a pattern in order to deal with these things on local execution 
path: 
https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/service/reads/AbstractReadExecutor.java#L157
 
https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/service/reads/ShortReadPartitionsProtection.java#L186
 
    
    Thanks for pointing that out!


---

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

Reply via email to