[ https://issues.apache.org/jira/browse/HBASE-13997?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14619803#comment-14619803 ]
Hadoop QA commented on HBASE-13997: ----------------------------------- {color:red}-1 overall{color}. Here are the results of testing the latest attachment http://issues.apache.org/jira/secure/attachment/12744374/hbase-13997_v2.patch against master branch at commit f5ad736282c8c9c27b14131919d60b72834ec9e4. ATTACHMENT ID: 12744374 {color:green}+1 @author{color}. The patch does not contain any @author tags. {color:green}+1 tests included{color}. The patch appears to include 3 new or modified tests. {color:green}+1 hadoop versions{color}. The patch compiles with all supported hadoop versions (2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.6.0 2.7.0) {color:green}+1 javac{color}. The applied patch does not increase the total number of javac compiler warnings. {color:green}+1 protoc{color}. The applied patch does not increase the total number of protoc compiler warnings. {color:green}+1 javadoc{color}. The javadoc tool did not generate any warning messages. {color:green}+1 checkstyle{color}. The applied patch does not increase the total number of checkstyle errors {color:green}+1 findbugs{color}. The patch does not introduce any new Findbugs (version 2.0.3) warnings. {color:green}+1 release audit{color}. The applied patch does not increase the total number of release audit warnings. {color:green}+1 lineLengths{color}. The patch does not introduce lines longer than 100 {color:green}+1 site{color}. The mvn post-site goal succeeds with this patch. {color:red}-1 core tests{color}. The patch failed these unit tests: org.apache.hadoop.hbase.client.TestFastFail Test results: https://builds.apache.org/job/PreCommit-HBASE-Build/14711//testReport/ Release Findbugs (version 2.0.3) warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/14711//artifact/patchprocess/newFindbugsWarnings.html Checkstyle Errors: https://builds.apache.org/job/PreCommit-HBASE-Build/14711//artifact/patchprocess/checkstyle-aggregate.html Console output: https://builds.apache.org/job/PreCommit-HBASE-Build/14711//console This message is automatically generated. > ScannerCallableWithReplicas cause Infinitely blocking > ----------------------------------------------------- > > Key: HBASE-13997 > URL: https://issues.apache.org/jira/browse/HBASE-13997 > Project: HBase > Issue Type: Bug > Components: Client > Affects Versions: 1.0.1.1 > Reporter: Zephyr Guo > Assignee: Zephyr Guo > Priority: Minor > Attachments: HBASE-13997.patch, hbase-13997_v2.patch > > > Bug in ScannerCallableWithReplicas.addCallsForOtherReplicas method > {code:title=code in ScannerCallableWithReplicas.addCallsForOtherReplicas > |borderStyle=solid} > private int addCallsForOtherReplicas( > BoundedCompletionService<Pair<Result[], ScannerCallable>> cs, > RegionLocations rl, int min, > int max) { > if (scan.getConsistency() == Consistency.STRONG) { > return 0; // not scheduling on other replicas for strong consistency > } > for (int id = min; id <= max; id++) { > if (currentScannerCallable.getHRegionInfo().getReplicaId() == id) { > continue; //this was already scheduled earlier > } > ScannerCallable s = > currentScannerCallable.getScannerCallableForReplica(id); > if (this.lastResult != null) { > s.getScan().setStartRow(this.lastResult.getRow()); > } > outstandingCallables.add(s); > RetryingRPC retryingOnReplica = new RetryingRPC(s); > cs.submit(retryingOnReplica); > } > return max - min + 1; //bug? should be "max - min",because "continue" > //always happen once > } > {code} > It can cause completed < submitted always so that the following code will be > infinitely blocked. > {code:title=code in ScannerCallableWithReplicas.call|borderStyle=solid} > // submitted larger than the actual one > submitted += addCallsForOtherReplicas(cs, rl, 0, rl.size() - 1); > try { > //here will be affected > while (completed < submitted) { > try { > Future<Pair<Result[], ScannerCallable>> f = cs.take(); > Pair<Result[], ScannerCallable> r = f.get(); > if (r != null && r.getSecond() != null) { > updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, > pool); > } > return r == null ? null : r.getFirst(); // great we got an answer > } catch (ExecutionException e) { > // if not cancel or interrupt, wait until all RPC's are done > // one of the tasks failed. Save the exception for later. > if (exceptions == null) exceptions = new > ArrayList<ExecutionException>(rl.size()); > exceptions.add(e); > completed++; > } > } > } catch (CancellationException e) { > throw new InterruptedIOException(e.getMessage()); > } catch (InterruptedException e) { > throw new InterruptedIOException(e.getMessage()); > } finally { > // We get there because we were interrupted or because one or more of > the > // calls succeeded or failed. In all case, we stop all our tasks. > cs.cancelAll(true); > } > {code} > If all replica-RS occur ExecutionException ,it will be infinitely blocked in > cs.take() -- This message was sent by Atlassian JIRA (v6.3.4#6332)