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

    https://github.com/apache/accumulo/pull/96#discussion_r60846778
  
    --- Diff: 
core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReaderIterator.java
 ---
    @@ -329,6 +331,8 @@ private void processFailures(Map<KeyExtent,List<Range>> 
failures, ResultReceiver
     
         // since the first call to binRanges clipped the ranges to within a 
tablet, we should not get only
         // bin to the set of failed tablets
    +    if (!locator.isValid())
    +      locator = new 
TimeoutTabletLocator(TabletLocator.getLocator(instance, new Text(table)), 
timeout);
    --- End diff --
    
    Since TabletServerBatchReaderIterator#lookup is synchronized, the 
reassignment is thread-safe for other accesses that respect the instance's 
lock. This reassignment, in processFailures, only ever occurs though a branch 
from a QueryTask, which doesn't do the reassignment in a synchronized block (it 
does use a semaphore inside of the QueryTask, but that's separate from the TSBI 
instance lock). 
    
    So, where I'm going with this: is it safe to do these re-assignments 
outside of a synchronized block? It's implied to me that these updates can 
happen in different threads, since the QueryTasks are executed via an 
ExecutorService.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to