[ https://issues.apache.org/jira/browse/HBASE-17583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15863068#comment-15863068 ]
Ted Yu commented on HBASE-17583: -------------------------------- For ClientScanner : {code} + // will start next scan from the startKey of the currentRegion. Return false if we have reached + // the stop row. + protected abstract boolean setNewStartKey(); {code} formulate the description of @return using javadoc. {code} + // return false if we should terminate the scan + // protected only because TestClientScanner need to override this method. + @VisibleForTesting + protected boolean moveToNextRegion() { {code} formulate the description of @return using javadoc. {code} + // not a big deal continue + LOG.warn("close scanner for " + currentRegion + " failed", e); {code} If not a big deal, log at DEBUG level. {code} private Result[] call(ScannerCallableWithReplicas callable, RpcRetryingCaller<Result[]> caller, - int scannerTimeout) throws IOException { + int scannerTimeout, boolean updateCurrentRegion) throws IOException { {code} Add javadoc for parameter updateCurrentRegion. {code} private boolean scanExhausted(Result[] values) { - // This means the server tells us the whole scan operation is done. Usually decided by filter or - // limit. - return values == null || callable.moreResultsForScan() == MoreResults.NO; + return callable.moreResultsForScan() == MoreResults.NO; {code} Now the method becomes a single comparison. It seems there is no need for this method. {code} + // If lastResult is partial then include it, otherwise exlude it. + scan.withStartRow(lastResult.getRow(), lastResult.isPartial() || scan.getBatch() > 0); {code} Typo: exlude {code} + // TODO: Why wrap this in a DNRIOE when it already is a DNRIOE? + throw new DoNotRetryIOException( + "Failed after retry of OutOfOrderScannerNextException: was there a rpc timeout?", e); {code} Drop the wrapping ? {code} - // We need to reset it if it's a new callable that was created with a countdown in nextScanner - callable.setCaching(this.caching); {code} Why is the above dropped ? {code} +public class ClientSimpleScanner extends ClientScanner { {code} ClientSimpleScanner -> SimpleClientScanner {code} + // we have not implemented locate to next row for sync client yet, so here we change the + // inclusive of start row to true. + scan.withStartRow(createClosestRowAfter(scan.getStartRow()), true); {code} When would locating next row be implemented. {code} + static boolean isEmptyStartRow(byte[] row) { + return Bytes.equals(row, EMPTY_START_ROW); + } + + static boolean isEmptyStopRow(byte[] row) { + return Bytes.equals(row, EMPTY_END_ROW); {code} Since the same byte array is being compared with, only one method suffices: isEmptyRow(). The patch is sizable. Please put it on review board. > Add inclusive/exclusive support for startRow and endRow of scan for sync > client > ------------------------------------------------------------------------------- > > Key: HBASE-17583 > URL: https://issues.apache.org/jira/browse/HBASE-17583 > Project: HBase > Issue Type: Sub-task > Components: Client, scan > Affects Versions: 2.0.0, 1.4.0 > Reporter: Duo Zhang > Assignee: Duo Zhang > Fix For: 2.0.0, 1.4.0 > > Attachments: HBASE-17583-branch-1.patch, HBASE-17583.patch, > HBASE-17583-v1.patch, HBASE-17583-v2.patch > > > Implement the same feature of HBASE-17320 for sync client. -- This message was sent by Atlassian JIRA (v6.3.15#6346)