@Override public boolean backwardSeek(Cell key) throws IOException { return delegate.backwardSeek(key); }
@Override protected void seekScanners(List<? extends KeyValueScanner> scanners, Cell seekKey, boolean isLazy, boolean isParallelSeek) throws IOException { // Seek all scanners to the start of the Row (or if the exact matching row // key does not exist, then to the start of the previous matching Row). if (CellUtil.matchingRows(seekKey, HConstants.EMPTY_START_ROW)) { for (KeyValueScanner scanner : scanners) { scanner.seekToLastRow(); } } else { for (KeyValueScanner scanner : scanners) { scanner.backwardSeek(seekKey); } } }
@Override public boolean backwardSeek(Cell seekKey) throws IOException { if (current == null) { return false; } heap.add(current); current = null; KeyValueScanner scanner; while ((scanner = heap.poll()) != null) { Cell topKey = scanner.peek(); if ((CellUtil.matchingRows(seekKey, topKey) && comparator .getComparator().compare(seekKey, topKey) <= 0) || comparator.getComparator().compareRows(seekKey, topKey) > 0) { heap.add(scanner); current = pollRealKV(); return current != null; } if (!scanner.backwardSeek(seekKey)) { this.scannersForDelayedClose.add(scanner); } else { heap.add(scanner); } } return false; }
private List<KeyValueScanner> getScanners(MemStore memstore, HStoreFile sf1, HStoreFile sf2, byte[] startRow, boolean doSeek, int readPoint) throws IOException { List<StoreFileScanner> fileScanners = StoreFileScanner.getScannersForStoreFiles( Lists.newArrayList(sf1, sf2), false, true, false, false, readPoint); List<KeyValueScanner> memScanners = memstore.getScanners(readPoint); List<KeyValueScanner> scanners = new ArrayList<>(fileScanners.size() + 1); scanners.addAll(fileScanners); scanners.addAll(memScanners); if (doSeek) { if (Bytes.equals(HConstants.EMPTY_START_ROW, startRow)) { for (KeyValueScanner scanner : scanners) { scanner.seekToLastRow(); } } else { KeyValue startKey = KeyValueUtil.createFirstOnRow(startRow); for (KeyValueScanner scanner : scanners) { scanner.backwardSeek(startKey); } } } return scanners; }
assertTrue(scanner.backwardSeek(seekKey)); assertEquals(seekKey, scanner.peek()); assertTrue(scanner.backwardSeek(KeyValueUtil.createLastOnRow(ROWS[seekRowNum]))); KeyValue expectedKey = makeKV(seekRowNum - 1, 0); assertEquals(expectedKey, scanner.peek()); assertFalse(scanner.backwardSeek(KeyValueUtil.createLastOnRow(ROWS[0]))); assertEquals(null, scanner.peek());
res = false; for (KeyValueScanner scanner : scanners) { res |= scanner.backwardSeek(expectedKey); res = false; for (KeyValueScanner scanner : scanners) { res |= scanner.backwardSeek(expectedKey);
@Override public boolean backwardSeek(Cell key) throws IOException { return delegate.backwardSeek(key); }
@Override protected void seekScanners(List<? extends KeyValueScanner> scanners, Cell seekKey, boolean isLazy, boolean isParallelSeek) throws IOException { // Seek all scanners to the start of the Row (or if the exact matching row // key does not exist, then to the start of the previous matching Row). if (CellUtil.matchingRow(seekKey, HConstants.EMPTY_START_ROW)) { for (KeyValueScanner scanner : scanners) { scanner.seekToLastRow(); } } else { for (KeyValueScanner scanner : scanners) { scanner.backwardSeek(seekKey); } } }
@Override public boolean backwardSeek(Cell seekKey) throws IOException { if (current == null) { return false; } heap.add(current); current = null; KeyValueScanner scanner; while ((scanner = heap.poll()) != null) { Cell topKey = scanner.peek(); if ((CellUtil.matchingRow(seekKey, topKey) && comparator .getComparator().compare(seekKey, topKey) <= 0) || comparator.getComparator().compareRows(seekKey, topKey) > 0) { heap.add(scanner); current = pollRealKV(); return current != null; } if (!scanner.backwardSeek(seekKey)) { scanner.close(); } else { heap.add(scanner); } } return false; }
private List<KeyValueScanner> getScanners(MemStore memstore, HStoreFile sf1, HStoreFile sf2, byte[] startRow, boolean doSeek, int readPoint) throws IOException { List<StoreFileScanner> fileScanners = StoreFileScanner.getScannersForStoreFiles( Lists.newArrayList(sf1, sf2), false, true, false, false, readPoint); List<KeyValueScanner> memScanners = memstore.getScanners(readPoint); List<KeyValueScanner> scanners = new ArrayList<>(fileScanners.size() + 1); scanners.addAll(fileScanners); scanners.addAll(memScanners); if (doSeek) { if (Bytes.equals(HConstants.EMPTY_START_ROW, startRow)) { for (KeyValueScanner scanner : scanners) { scanner.seekToLastRow(); } } else { KeyValue startKey = KeyValueUtil.createFirstOnRow(startRow); for (KeyValueScanner scanner : scanners) { scanner.backwardSeek(startKey); } } } return scanners; }
assertTrue(scanner.backwardSeek(seekKey)); assertEquals(seekKey, scanner.peek()); assertTrue(scanner.backwardSeek(KeyValueUtil.createLastOnRow(ROWS[seekRowNum]))); KeyValue expectedKey = makeKV(seekRowNum - 1, 0); assertEquals(expectedKey, scanner.peek()); assertFalse(scanner.backwardSeek(KeyValueUtil.createLastOnRow(ROWS[0]))); assertEquals(null, scanner.peek());
res = false; for (KeyValueScanner scanner : scanners) { res |= scanner.backwardSeek(expectedKey); res = false; for (KeyValueScanner scanner : scanners) { res |= scanner.backwardSeek(expectedKey);