[ https://issues.apache.org/jira/browse/HBASE-20896?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16563314#comment-16563314 ]
Vikas Vishwakarma commented on HBASE-20896: ------------------------------------------- [~mdrob] the changes do not add any extra linkedlist operations. In the original code in ClientScanner.java we already have the cache LinkedList In ClientScanner.java we call ScanResultCache.addAndGet(..) which takes Result array values as input, does all the partial handling on it during which it gets converted to LinkedList or subarrays or goes through a separate iterations to update numRowCounts, etc depending on which handling gets invoked \{AllowPartialScanResultCache, BatchScanResultCache, CompleteScanResultCache} and returns a processed result array The returned result array from ScanResultCache.addAndGet(..) is again iterated over and added to the cache LinkedList back in ClientScanner {code:java} public abstract class ClientScanner extends AbstractClientScanner { .. protected final LinkedList<Result> cache = new LinkedList<Result>(); .. protected void loadCache() throws IOException { ... Result[] resultsToAddToCache = scanResultCache.addAndGet(values, callable.isHeartbeatMessage()); .. for (Result rs : resultsToAddToCache) { cache.add(rs); for (Cell cell : rs.rawCells()) { remainingResultSize -= CellUtil.estimatedHeapSizeOf(cell); } countdown--; this.lastResult = rs; } .. }{code} In my changes I have only eliminated all the intermediate array iterations and conversions to list or subarray in \{AllowPartialScanResultCache, BatchScanResultCache, CompleteScanResultCache}. In this case Result array values is directly added to the cache depending on the various checks and conditions and the numRowCounts is updated along with it. So all the work is done in a single iteration over the values input passed to loadResultsToCache(..) . High level structure {code:java} public abstract class ClientScanner extends AbstractClientScanner { .. protected final LinkedList<Result> cache = new LinkedList<Result>(); .. protected void loadCache() throws IOException { .. scanResultCache.loadResultsToCache(values, callable.isHeartbeatMessage()); .. } //add values to cache in loadResultsToCache itself in AllowPartialScanResultCache, BatchScanResultCache, CompleteScanResultCache after all the checks and partialResult handling {code} > Port HBASE-20866 to branch-1 and branch-1.4 > -------------------------------------------- > > Key: HBASE-20896 > URL: https://issues.apache.org/jira/browse/HBASE-20896 > Project: HBase > Issue Type: Sub-task > Reporter: Andrew Purtell > Assignee: Vikas Vishwakarma > Priority: Major > Fix For: 1.5.0, 1.4.7 > > Attachments: HBASE-20896.branch-1.4.001.patch, > HBASE-20896.branch-1.4.002.patch, HBASE-20896.branch-1.4.003.patch > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)