hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anoop Sam John (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (HBASE-14735) Region may grow too big and can not be split
Date Fri, 20 Nov 2015 07:04:10 GMT

    [ https://issues.apache.org/jira/browse/HBASE-14735?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15015330#comment-15015330
] 

Anoop Sam John edited comment on HBASE-14735 at 11/20/15 7:04 AM:
------------------------------------------------------------------

{code}
 public synchronized boolean requestSplit(final Region r) {	
239	    // don't split regions that are blocking	
240	    if (shouldSplitRegion() && ((HRegion)r).getCompactPriority() >= Store.PRIORITY_USER)
{
{code}
 Here what we says in the comment looks reasonable no? And the patch changes that

And what was the blocking files count in ur cluster?
See this code
{code}
public int getStoreCompactionPriority() {
    int priority = blockingFileCount - storefiles.size();
    return (priority == HStore.PRIORITY_USER) ? priority + 1 : priority;
  }
{code}
When the current store files count is equal to blockingFilesCount, we will get a priority
= 0 only which looks to be wrong

See this
{code}
 // degenerate case: blocked regions require recursive enqueues	
536	          if (store.getCompactPriority() <= 0) {
537	            requestSystemCompaction(region, store, "Recursive enqueue");
538	          } else {		
539	            // see if the compaction has caused us to exceed max region size		
540	            requestSplit(region);		
541	          }
{code}
Comment says for blocked regions we will need recursive enque but check is doing priority
<=0 !!!

What is wrong overall?


was (Author: anoop.hbase):
{code|
 public synchronized boolean requestSplit(final Region r) {	
239	    // don't split regions that are blocking	
240	    if (shouldSplitRegion() && ((HRegion)r).getCompactPriority() >= Store.PRIORITY_USER)
{
{code}
 Here what we says in the comment looks reasonable no? And the patch changes that

And what was the blocking files count in ur cluster?
See this code
{code}
public int getStoreCompactionPriority() {
    int priority = blockingFileCount - storefiles.size();
    return (priority == HStore.PRIORITY_USER) ? priority + 1 : priority;
  }
{code}
When the current store files count is equal to blockingFilesCount, we will get a priority
= 0 only which looks to be wrong

See this
{code}
 // degenerate case: blocked regions require recursive enqueues	
536	          if (store.getCompactPriority() <= 0) {
537	            requestSystemCompaction(region, store, "Recursive enqueue");
538	          } else {		
539	            // see if the compaction has caused us to exceed max region size		
540	            requestSplit(region);		
541	          }
{code}
Comment says for blocked regions we will need recursive enque but check is doing priority
<=0 !!!

What is wrong overall?

> Region may grow too big and can not be split
> --------------------------------------------
>
>                 Key: HBASE-14735
>                 URL: https://issues.apache.org/jira/browse/HBASE-14735
>             Project: HBase
>          Issue Type: Bug
>          Components: Compaction, regionserver
>    Affects Versions: 1.1.2, 0.98.15
>            Reporter: Shuaifeng Zhou
>            Assignee: Shuaifeng Zhou
>         Attachments: 14735-0.98.patch, 14735-branch-1.1.patch, 14735-branch-1.2.patch,
14735-branch-1.2.patch, 14735-master (2).patch, 14735-master.patch, 14735-master.patch
>
>
> When a compaction completed, may there are also many storefiles in the store, and CompactPriority
< 0, then compactSplitThread will do a "Recursive enqueue" compaction request instead of
request a split:
> {code:title=CompactSplitThread.java|borderStyle=solid}
>         if (completed) {
>           // degenerate case: blocked regions require recursive enqueues
>           if (store.getCompactPriority() <= 0) {
>             requestSystemCompaction(region, store, "Recursive enqueue");
>           } else {
>             // see if the compaction has caused us to exceed max region size
>             requestSplit(region);
>           }
> {code}
> But in some situation, the "recursive enqueue" request may return null, and not build
up a new compaction runner. For example, an other compaction of the same region is running,
and compaction selection will exclude all files older than the newest files currently compacting,
this may cause no enough files can be selected by the "recursive enqueue" request. When this
happen, split will not be trigged. If the input load is high enough, compactions aways running
on the region, and split will never be triggered.
> In our cluster, this situation happened, and a huge region more than 400GB and 100+ storefiles
appeared. Version is 0.98.10, and the trank also have the problem.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message