@Override
 public InternalScanner preCompactScannerOpen(
     final ObserverContext<RegionCoprocessorEnvironment> c,
     Store store,
     List<? extends KeyValueScanner> scanners,
     ScanType scanType,
     long earliestPutTs,
     InternalScanner s)
     throws IOException {
   Long newTtl = ttls.get(store.getTableName());
   Integer newVersions = versions.get(store.getTableName());
   ScanInfo oldSI = store.getScanInfo();
   HColumnDescriptor family = store.getFamily();
   ScanInfo scanInfo =
       new ScanInfo(
           family.getName(),
           family.getMinVersions(),
           newVersions == null ? family.getMaxVersions() : newVersions,
           newTtl == null ? oldSI.getTtl() : newTtl,
           family.getKeepDeletedCells(),
           oldSI.getTimeToPurgeDeletes(),
           oldSI.getComparator());
   Scan scan = new Scan();
   scan.setMaxVersions(newVersions == null ? oldSI.getMaxVersions() : newVersions);
   return new StoreScanner(
       store, scanInfo, scan, scanners, scanType, store.getSmallestReadPoint(), earliestPutTs);
 }
 @Override
 public KeyValueScanner preStoreScannerOpen(
     final ObserverContext<RegionCoprocessorEnvironment> c,
     Store store,
     final Scan scan,
     final NavigableSet<byte[]> targetCols,
     KeyValueScanner s)
     throws IOException {
   TableName tn = store.getTableName();
   if (!tn.isSystemTable()) {
     Long newTtl = ttls.get(store.getTableName());
     Integer newVersions = versions.get(store.getTableName());
     ScanInfo oldSI = store.getScanInfo();
     HColumnDescriptor family = store.getFamily();
     ScanInfo scanInfo =
         new ScanInfo(
             family.getName(),
             family.getMinVersions(),
             newVersions == null ? family.getMaxVersions() : newVersions,
             newTtl == null ? oldSI.getTtl() : newTtl,
             family.getKeepDeletedCells(),
             oldSI.getTimeToPurgeDeletes(),
             oldSI.getComparator());
     return new StoreScanner(
         store,
         scanInfo,
         scan,
         targetCols,
         ((HStore) store).getHRegion().getReadpoint(IsolationLevel.READ_COMMITTED));
   } else {
     return s;
   }
 }
 @Override
 public InternalScanner preFlushScannerOpen(
     final ObserverContext<RegionCoprocessorEnvironment> c,
     Store store,
     KeyValueScanner memstoreScanner,
     InternalScanner s)
     throws IOException {
   Long newTtl = ttls.get(store.getTableName());
   if (newTtl != null) {
     System.out.println("PreFlush:" + newTtl);
   }
   Integer newVersions = versions.get(store.getTableName());
   ScanInfo oldSI = store.getScanInfo();
   HColumnDescriptor family = store.getFamily();
   ScanInfo scanInfo =
       new ScanInfo(
           family.getName(),
           family.getMinVersions(),
           newVersions == null ? family.getMaxVersions() : newVersions,
           newTtl == null ? oldSI.getTtl() : newTtl,
           family.getKeepDeletedCells(),
           oldSI.getTimeToPurgeDeletes(),
           oldSI.getComparator());
   Scan scan = new Scan();
   scan.setMaxVersions(newVersions == null ? oldSI.getMaxVersions() : newVersions);
   return new StoreScanner(
       store,
       scanInfo,
       scan,
       Collections.singletonList(memstoreScanner),
       ScanType.COMPACT_RETAIN_DELETES,
       store.getSmallestReadPoint(),
       HConstants.OLDEST_TIMESTAMP);
 }