@Override public void run() { scanner.trySwitchToStreamRead(); heap = scanner.heap; } }
@Override public void shipped() throws IOException { if (prevCell != null) { // Do the copy here so that in case the prevCell ref is pointing to the previous // blocks we can safely release those blocks. // This applies to blocks that are got from Bucket cache, L1 cache and the blocks // fetched from HDFS. Copying this would ensure that we let go the references to these // blocks so that they can be GCed safely(in case of bucket cache) prevCell = KeyValueUtil.toNewKeyCell(this.prevCell); } matcher.beforeShipped(); // There wont be further fetch of Cells from these scanners. Just close. clearAndClose(scannersForDelayedClose); if (this.heap != null) { this.heap.shipped(); // When switching from pread to stream, we will open a new scanner for each store file, but // the old scanner may still track the HFileBlocks we have scanned but not sent back to client // yet. If we close the scanner immediately then the HFileBlocks may be messed up by others // before we serialize and send it back to client. The HFileBlocks will be released in shipped // method, so we here will also open new scanners and close old scanners in shipped method. // See HBASE-18055 for more details. trySwitchToStreamRead(); } } }
@Override public void run() { scanner.trySwitchToStreamRead(); heap = scanner.heap; } }