@Override public RegionScanner postScannerOpen(ObserverContext<RegionCoprocessorEnvironment> ctx, Scan scan, RegionScanner scanner) throws IOException { return new IncrementSummingScanner(region, scan.getBatch(), scanner, ScanType.USER_SCAN); }
@Override public boolean next(List<Cell> cells) throws IOException { return next(cells, batchSize); }
@Override public boolean nextRaw(List<Cell> cells, int limit) throws IOException { return nextInternal(cells, limit); }
LOG.trace("Including increment: sum=" + runningSum + ", cell=" + previousIncrement); cells.add(newCell(previousIncrement, runningSum)); addedCnt++; previousIncrement = null; "column=" + Bytes.toStringBinary(CellUtil.cloneQualifier(cell))); if (!sameCell(previousIncrement, cell)) { if (previousIncrement != null) { LOG.trace("Including increment: sum=" + runningSum + ", cell=" + previousIncrement); cells.add(newCell(previousIncrement, runningSum)); previousIncrement = null; addedCnt++; if (sameCell(previousIncrement, cell) && !CellUtil.isDelete(cell)) { cells.add(newCell(previousIncrement, runningSum)); addedCnt++; previousIncrement = null; LOG.trace("Including leftover increment: sum=" + runningSum + ", cell=" + previousIncrement); cells.add(newCell(previousIncrement, runningSum));
@Override public boolean nextRaw(List<Cell> cells) throws IOException { return nextRaw(cells, batchSize); }
@Override public InternalScanner preCompact(ObserverContext<RegionCoprocessorEnvironment> e, Store store, InternalScanner scanner, ScanType scanType) throws IOException { byte[] family = store.getFamily().getName(); return new IncrementSummingScanner(region, IncrementHandlerState.BATCH_UNLIMITED, scanner, scanType, state.getCompactionBound(family), state.getOldestVisibleTimestamp(family)); }
@Override public boolean next(List<Cell> cells, int limit) throws IOException { return nextInternal(cells, limit); }
@Override public InternalScanner preCompact(ObserverContext<RegionCoprocessorEnvironment> e, Store store, InternalScanner scanner, ScanType scanType, CompactionRequest request) throws IOException { byte[] family = store.getFamily().getName(); return new IncrementSummingScanner(region, IncrementHandlerState.BATCH_UNLIMITED, scanner, scanType, state.getCompactionBound(family), state.getOldestVisibleTimestamp(family)); } }
@Override public InternalScanner preFlush(ObserverContext<RegionCoprocessorEnvironment> e, Store store, InternalScanner scanner) throws IOException { byte[] family = store.getFamily().getName(); return new IncrementSummingScanner(region, IncrementHandlerState.BATCH_UNLIMITED, scanner, ScanType.COMPACT_RETAIN_DELETES, state.getCompactionBound(family), state.getOldestVisibleTimestamp(family)); }
@Override public void preGetOp(ObserverContext<RegionCoprocessorEnvironment> ctx, Get get, List<Cell> results) throws IOException { Scan scan = new Scan(get); scan.setMaxVersions(); scan.setFilter(Filters.combine(new IncrementFilter(), scan.getFilter())); RegionScanner scanner = null; try { scanner = new IncrementSummingScanner(region, scan.getBatch(), region.getScanner(scan), ScanType.USER_SCAN); scanner.next(results); ctx.bypass(); } finally { if (scanner != null) { scanner.close(); } } }
private void verifyCounts(HRegion region, Scan scan, long[] counts, int batch, long[] upperVisBound) throws Exception { // The idea is to chain IncrementSummingScanner: first couple respect the upperVisBound and may produce multiple // cells for single value. This is what happens during flush or compaction. Second one will mimic user scan over // flushed or compacted: it should merge all delta increments appropriately. RegionScanner scanner = region.getScanner(scan); for (int i = 0; i < upperVisBound.length; i++) { scanner = new IncrementSummingScanner(region, batch, scanner, ScanType.COMPACT_RETAIN_DELETES, upperVisBound[i], -1); } scanner = new IncrementSummingScanner(region, batch, scanner, ScanType.USER_SCAN); // init with false if loop will execute zero times boolean hasMore = counts.length > 0; for (long count : counts) { List<Cell> results = Lists.newArrayList(); hasMore = scanner.next(results); assertEquals(1, results.size()); Cell cell = results.get(0); assertNotNull(cell); assertEquals(count, Bytes.toLong(cell.getValue())); } assertFalse(hasMore); }
private void verifyCounts(HRegion region, Scan scan, long[] counts, int batch) throws Exception { RegionScanner scanner = new IncrementSummingScanner(region, batch, region.getScanner(scan), ScanType.USER_SCAN); // init with false if loop will execute zero times boolean hasMore = counts.length > 0; for (long count : counts) { List<Cell> results = Lists.newArrayList(); hasMore = scanner.next(results); assertEquals(1, results.size()); Cell cell = results.get(0); assertNotNull(cell); assertEquals(count, Bytes.toLong(cell.getValue())); } assertFalse(hasMore); }
RegionScanner scanner = new IncrementSummingScanner(region, -1, region.getScanner(scan), ScanType.USER_SCAN); List<Cell> results = Lists.newArrayList(); scanner.next(results); scanner = new IncrementSummingScanner(region, -1, region.getScanner(scan), ScanType.USER_SCAN); results = Lists.newArrayList(); scanner.next(results); scanner = new IncrementSummingScanner(region, -1, region.getScanner(scan), ScanType.USER_SCAN); results = Lists.newArrayList(); scanner.next(results); scanner = new IncrementSummingScanner(region, -1, region.getScanner(scan), ScanType.USER_SCAN); results = Lists.newArrayList(); scanner.next(results); scanner = new IncrementSummingScanner(region, -1, region.getScanner(scan), ScanType.USER_SCAN); results = Lists.newArrayList(); scanner.next(results); scan.setMaxVersions(); scan.setRaw(true); scanner = new IncrementSummingScanner(region, -1, region.getScanner(scan), ScanType.COMPACT_RETAIN_DELETES); results = Lists.newArrayList(); scanner.next(results);
new IncrementSummingScanner(region, -1, region.getScanner(new Scan().setMaxVersions()), ScanType.COMPACT_RETAIN_DELETES, now + 15, -1); scanner = new IncrementSummingScanner(region, -1, scanner, ScanType.USER_SCAN);