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

Huaxiang Sun commented on HBASE-24250:
--------------------------------------

[~niuyulin] and [~timoha],  I spent some time on this issue today.

To prevent CJ from submitting multiple GCMultipleMergedRegionsProcedure, we can 
maintain a in-memory hashset for the child region. Pseudo code as follows, it 
does not handle cases like master switchover nicely as the in-memory hashset is 
lost, but should be good enough to reduce most duplicate 
GCMultipleMergedRegionsProcedures.

For split case, it can check the regionMap to prevent duplicate procedure 
submissions.

What do you think?
{code:java}
HashSet<RegionInfo> newOngoingMergeProcedures = new HashSet<>();
for (Map.Entry<RegionInfo, Result> e : mergedRegions.entrySet()) {
  if (this.services.isInMaintenanceMode()) {
    // Stop cleaning if the master is in maintenance mode
    break;
  }
  // New pseudo code
  newOngoingMergeProcedures.add(e.getKey()); 
  if (this.ongoingMergeProcedures.contains(e.getValue)) {
     continue;
  }

  List<RegionInfo> parents = 
MetaTableAccessor.getMergeRegions(e.getValue().rawCells());
  if (parents != null && cleanMergeRegion(e.getKey(), parents)) {
    gcs++;
  }
}

 // New pseudo code
this.ongoingMergeProcedures = newOngoingMergeProcedures;{code}
 

> CatalogJanitor resubmits GCMultipleMergedRegionsProcedure for the same region
> -----------------------------------------------------------------------------
>
>                 Key: HBASE-24250
>                 URL: https://issues.apache.org/jira/browse/HBASE-24250
>             Project: HBase
>          Issue Type: Bug
>          Components: master
>    Affects Versions: 2.2.4
>         Environment: hdfs 3.1.3 with erasure coding
> hbase 2.2.4
>            Reporter: Andrey Elenskiy
>            Assignee: niuyulin
>            Priority: Major
>
> If a lot of regions were merged (due to change of region sizes, for example), 
> there can be a long backlog of procedures to clean up the merged regions. If 
> going through this backlog is slower than the CatalogJanitor's scan interval, 
> it will end resubmitting GCMultipleMergedRegionsProcedure for the same 
> regions over and over again.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to