@Override public RegionScanner preScannerOpen(ObserverContext<RegionCoprocessorEnvironment> e, Scan scan, RegionScanner s) throws IOException { ConsumerConfig consumerConfig = DequeueScanAttributes.getConsumerConfig(scan); Transaction tx = DequeueScanAttributes.getTx(scan); byte[] queueRowPrefix = DequeueScanAttributes.getQueueRowPrefix(scan); if (consumerConfig == null || tx == null || queueRowPrefix == null) { return super.preScannerOpen(e, scan, s); } Filter dequeueFilter = new DequeueFilter(queueRowPrefix, consumerConfig, tx); Filter existing = scan.getFilter(); if (existing != null) { Filter combined = new FilterList(FilterList.Operator.MUST_PASS_ALL, existing, dequeueFilter); scan.setFilter(combined); } else { scan.setFilter(dequeueFilter); } return super.preScannerOpen(e, scan, s); } }