hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Asaf Mesika <asaf.mes...@gmail.com>
Subject Re: Getting the scan type at preCompact
Date Tue, 29 Jan 2013 18:21:32 GMT
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 <
ramkrishna.s.vasudevan@gmail.com> wrote:

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 <asaf.mesika@gmail.com> 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?



  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message