[ https://issues.apache.org/jira/browse/HBASE-16132?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15361667#comment-15361667 ]
Hudson commented on HBASE-16132: -------------------------------- SUCCESS: Integrated in HBase-1.4 #271 (See [https://builds.apache.org/job/HBase-1.4/271/]) HBASE-16132 Scan does not return all the result when regionserver is (liyu: rev 84dd9cbcb64933a9511c34a433c28b423e5cc266) * hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMasterCommandLine.java * hbase-client/src/main/java/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.java > Scan does not return all the result when regionserver is busy > ------------------------------------------------------------- > > Key: HBASE-16132 > URL: https://issues.apache.org/jira/browse/HBASE-16132 > Project: HBase > Issue Type: Bug > Reporter: binlijin > Assignee: binlijin > Fix For: 2.0.0, 1.3.0 > > Attachments: HBASE-16132.patch, HBASE-16132_v2.patch, > HBASE-16132_v3.patch, HBASE-16132_v3.patch, TestScanMissingData.java > > > We have find some corner case, when regionserver is busy and last a long > time. Some scanner may return null even if they do not scan all data. > We find in ScannerCallableWithReplicas there is a case do not handler > correct, when cs.poll timeout and do not return any result , it is will > return a null result, so scan get null result, and end the scan. > {code} > try { > Future<Pair<Result[], ScannerCallable>> f = cs.poll(timeout, > TimeUnit.MILLISECONDS); > if (f != null) { > Pair<Result[], ScannerCallable> r = f.get(timeout, > TimeUnit.MILLISECONDS); > 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) { > RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries); > } catch (CancellationException e) { > throw new InterruptedIOException(e.getMessage()); > } catch (InterruptedException e) { > throw new InterruptedIOException(e.getMessage()); > } catch (TimeoutException 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(); > } > return null; // unreachable > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)