Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
HBase >> mail # user >> Getting the scan type at preCompact

Copy link to this message
Re: Getting the scan type at preCompact
But my scanner is a wrapper to the scanner passed on to me in preCompact.
This scanner is created in the Store object (StoreScanner) with arguments I
don't have at preCompactScannerOpen(). So I can't create it. I want the
vanilla scanner hbase uses is preCompact so I can wrap it with my behavior
but also I need to know whether its minor or major.
Currently I hacked my region observer so that in preCompactScannerOpen I
save the ScanType in my instance as a field variable (ThreadLocal to be on
the safe side) and in preCompact I read it and use it to build my wrapped

Sent from my iPhone

On 29 בינו 2013, at 16:46, ramkrishna vasudevan <

You can do the same with preCompactScannerOpen() hook right.
If the scanType is minor send a wrapped internalScanner say

If the scanType is major send a wrapped interanlScanner say

Does that solve your purpose? Because if preCompactScannerOpen returns a
scanner only that will  be used inside preCompact also.


On Tue, Jan 29, 2013 at 6:53 PM, Mesika, Asaf <[EMAIL PROTECTED]> wrote:

In the RegionObserver.preCompactScannerOpen() method, one of the

parameters is scanType which enables me to know if the compaction is major

or minor.

In the preCompact() method I don't have that parameter.
In a region observer I wrote, I'm basically wrapping the InternalScanner

with my own Scanner.

My scanner should behave differently when its a a major or minor

Due to this restriction I'm forced to use preCompactScannerOpen() and

create the StoreScanner, copy pasting the code that creates it in

Store.compactStore() (marked in green):
       if (getHRegion().getCoprocessorHost() != null) {

         scanner = getHRegion()


             .preCompactScannerOpen(this, scanners,

                 majorCompaction ? ScanType.MAJOR_COMPACT :

ScanType.MINOR_COMPACT, earliestPutTs);


       if (scanner == null) {

         Scan scan = new Scan();


         /* Include deletes, unless we are doing a major compaction */

         scanner = new StoreScanner(this, getScanInfo(), scan, scanners,

           majorCompaction? ScanType.MAJOR_COMPACT :


           smallestReadPoint, earliestPutTs);


       if (getHRegion().getCoprocessorHost() != null) {

         InternalScanner cpScanner
           getHRegion().getCoprocessorHost().preCompact(this, scanner);

         // NULL scanner returned from coprocessor hooks means skip

normal processing

         if (cpScanner == null) {

           return null;


         scanner = cpScanner;


Can I file a JIRA to add the Scan Type to the preCompact method?