Index: hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java (revision 1440007) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java (working copy) @@ -186,7 +186,7 @@ @Override public InternalScanner preCompact(ObserverContext e, - HStore store, InternalScanner scanner) { + HStore store, InternalScanner scanner, ScanType scanType) { hadPreCompact = true; return scanner; } Index: hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.java (revision 1440007) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.java (working copy) @@ -61,6 +61,7 @@ import org.apache.hadoop.hbase.regionserver.InternalScanner; import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost; import org.apache.hadoop.hbase.regionserver.HStore; +import org.apache.hadoop.hbase.regionserver.ScanType; import org.apache.hadoop.hbase.regionserver.StoreFile; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; @@ -315,7 +316,7 @@ @Override public InternalScanner preCompact(ObserverContext e, - HStore store, final InternalScanner scanner) { + HStore store, final InternalScanner scanner, final ScanType scanType) { return new InternalScanner() { @Override public boolean next(List results) throws IOException { Index: hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java (revision 1440007) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java (working copy) @@ -52,6 +52,7 @@ import org.apache.hadoop.hbase.regionserver.InternalScanner; import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost; import org.apache.hadoop.hbase.regionserver.RegionScanner; +import org.apache.hadoop.hbase.regionserver.ScanType; import org.apache.hadoop.hbase.regionserver.SplitTransaction; import org.apache.hadoop.hbase.regionserver.HStore; import org.apache.hadoop.hbase.regionserver.StoreFile; @@ -190,7 +191,7 @@ } @Override public InternalScanner preCompact(ObserverContext e, - HStore store, InternalScanner scanner) { + HStore store, InternalScanner scanner, ScanType scanType) { preCompactCalled = true; return scanner; } Index: hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java (revision 1440007) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java (working copy) @@ -70,6 +70,7 @@ import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost; import org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost; +import org.apache.hadoop.hbase.regionserver.ScanType; import org.apache.hadoop.hbase.security.AccessDeniedException; import org.apache.hadoop.hbase.security.User; import org.apache.hadoop.hbase.security.access.Permission.Action; @@ -567,7 +568,8 @@ public void testCompact() throws Exception { PrivilegedExceptionAction action = new PrivilegedExceptionAction() { public Object run() throws Exception { - ACCESS_CONTROLLER.preCompact(ObserverContext.createAndPrepare(RCP_ENV, null), null, null); + ACCESS_CONTROLLER.preCompact(ObserverContext.createAndPrepare(RCP_ENV, null), null, null, + ScanType.MINOR_COMPACT); return null; } }; Index: hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java (revision 1440007) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java (working copy) @@ -58,6 +58,7 @@ import org.apache.hadoop.hbase.regionserver.InternalScanner; import org.apache.hadoop.hbase.regionserver.RegionScanner; import org.apache.hadoop.hbase.regionserver.HStore; +import org.apache.hadoop.hbase.regionserver.ScanType; import org.apache.hadoop.hbase.regionserver.StoreFile; import org.apache.hadoop.hbase.regionserver.wal.WALEdit; import org.apache.hadoop.hbase.security.AccessDeniedException; @@ -765,7 +766,8 @@ @Override public InternalScanner preCompact(ObserverContext e, - final HStore store, final InternalScanner scanner) throws IOException { + final HStore store, final InternalScanner scanner, final ScanType scanType) + throws IOException { requirePermission("compact", getTableName(e.getEnvironment()), null, null, Action.ADMIN); return scanner; } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java (revision 1440007) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java (working copy) @@ -425,9 +425,11 @@ * Called prior to rewriting the store files selected for compaction * @param store the store being compacted * @param scanner the scanner used to read store data during compaction + * @param scanType type of Scan * @throws IOException */ - public InternalScanner preCompact(HStore store, InternalScanner scanner) throws IOException { + public InternalScanner preCompact(HStore store, InternalScanner scanner, + ScanType scanType) throws IOException { ObserverContext ctx = null; boolean bypass = false; for (RegionEnvironment env: coprocessors) { @@ -435,7 +437,7 @@ ctx = ObserverContext.createAndPrepare(env, ctx); try { scanner = ((RegionObserver)env.getInstance()).preCompact( - ctx, store, scanner); + ctx, store, scanner, scanType); } catch (Throwable e) { handleCoprocessorThrowable(env,e); } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Compactor.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Compactor.java (revision 1440007) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Compactor.java (working copy) @@ -133,17 +133,17 @@ .preCompactScannerOpen(store, scanners, majorCompaction ? ScanType.MAJOR_COMPACT : ScanType.MINOR_COMPACT, earliestPutTs); } + ScanType scanType = majorCompaction? ScanType.MAJOR_COMPACT : ScanType.MINOR_COMPACT; if (scanner == null) { Scan scan = new Scan(); scan.setMaxVersions(store.getFamily().getMaxVersions()); /* Include deletes, unless we are doing a major compaction */ scanner = new StoreScanner(store, store.scanInfo, scan, scanners, - majorCompaction? ScanType.MAJOR_COMPACT : ScanType.MINOR_COMPACT, - smallestReadPoint, earliestPutTs); + scanType, smallestReadPoint, earliestPutTs); } if (store.getHRegion().getCoprocessorHost() != null) { InternalScanner cpScanner = - store.getHRegion().getCoprocessorHost().preCompact(store, scanner); + store.getHRegion().getCoprocessorHost().preCompact(store, scanner, scanType); // NULL scanner returned from coprocessor hooks means skip normal processing if (cpScanner == null) { return null; Index: hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java (revision 1440007) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java (working copy) @@ -140,7 +140,8 @@ @Override public InternalScanner preCompact(ObserverContext e, - final HStore store, final InternalScanner scanner) throws IOException { + final HStore store, final InternalScanner scanner, final ScanType scanType) + throws IOException { return scanner; } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java (revision 1440007) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java (working copy) @@ -167,12 +167,14 @@ * @param store the store being compacted * @param scanner the scanner over existing data used in the store file * rewriting + * @param scanType type of Scan * @return the scanner to use during compaction. Should not be {@code null} * unless the implementation is writing new store files on its own. * @throws IOException if an error occurred on the coprocessor */ InternalScanner preCompact(final ObserverContext c, - final HStore store, final InternalScanner scanner) throws IOException; + final HStore store, final InternalScanner scanner, + final ScanType scanType) throws IOException; /** * Called prior to writing the {@link StoreFile}s selected for compaction into