In CompactionRunner#run(), we have:
// Now see if we are in correct pool for the size; if not, go to
the correct one.
// We might end up waiting for a while, so cancel the selection.
assert this.compaction.hasSelection();
ThreadPoolExecutor pool = store.throttleCompaction(
compaction.getRequest().getSize()) ? longCompactions :
shortCompactions;
if (this.parent != pool) {
this.store.cancelRequestedCompaction(this.compaction);
The above code would adjust to the correct pool, right ?
Cheers
On Tue, Apr 21, 2015 at 7:10 AM, 张铎 <[email protected]> wrote:
> I think it is a bug. According to the comment above, they just want to put
> system compactions(selectNow == false) to the small pool, so the code
> should like this
>
> ThreadPoolExecutor pool;
> if (selectNow) {
> pool = s.throttleCompaction(compaction.getRequest().getSize())
> ? longCompactions : shortCompactions;
> } else {
> pool = shortCompactions;
> }
>
> My code is on master so ignore the variable name differences...
>
> Would you mind open a issue on jira?
>
> Thanks.
>
> 2015-04-21 21:10 GMT+08:00 [email protected] <
> [email protected]>:
>
>> Hi all,
>>
>> In compactsplitthread.java, the requestCompactionInternal method is like
>> this:
>>
>> private synchronized CompactionRequest requestCompactionInternal(final
>> HRegion r, final Store s,
>> ...
>>
>> ThreadPoolExecutor pool = (!selectNow && s.throttleCompaction(size))
>> ? largeCompactions : smallCompactions;
>>
>> ...
>>
>> this will cause all compactions with selectNow =true go to the small
>> compaction queue, even the size is large enough, is it reasonable?
>>
>> I checked the commit history, this comes from HBASE-8665, is there any
>> reason or a bug?
>>
>> thanks.
>>
>>
>> [email protected]
>>
>
>