Aman Poonia created HBASE-30350:
-----------------------------------

             Summary: Stale entry left in RegionInTransitionTracker after 
GCRegionProcedure purges region metadata
                 Key: HBASE-30350
                 URL: https://issues.apache.org/jira/browse/HBASE-30350
             Project: HBase
          Issue Type: Bug
          Components: master, Region Assignment
    Affects Versions: 2.6.7, 2.5.16, 3.0.0, 4.0.0-alpha-1
            Reporter: Aman Poonia
            Assignee: Aman Poonia


GCRegionProcedure (state {{GC_REGION_PURGE_METADATA}}) removes a GC'd 
split/merged parent region from {{AssignmentManager#regionStates}} but never 
removes the corresponding entry from the separate
  {{RegionInTransitionTracker}} map. These two maps are not kept in sync 
automatically.

  The analogous cleanup path, {{AssignmentManager#markRegionAsMerged}}, 
correctly calls both {{regionStates.deleteRegion(ri)}} and 
{{regionInTransitionTracker.handleRegionDelete(ri)}} for each merge
  parent. {{GCRegionProcedure}} only calls the former.

  As a result, once a region is GC'd via {{CatalogJanitor}} -> 
{{GCRegionProcedure}}, its ghost entry remains in {{RegionInTransitionTracker}} 
indefinitely. The periodic "STUCK Region-In-Transition"
  chore ({{ProcExecTimeout}} thread) keeps re-reporting this already-deleted 
region as stuck on every run, producing misleading WARN logs and inflating 
RIT-age metrics/alerts. The stale entry is only
  cleared when the active master fails over, since 
{{AssignmentManager#joinCluster}} -> {{loadMeta}} rebuilds all in-memory 
assignment state fresh from {{hbase:meta}}.

  *Observed in production:* a region was GC'd (fully removed from 
{{hbase:meta}} and HDFS) but continued to be logged as "STUCK 
Region-In-Transition" for ~9 hours until the next master failover
  silently cleared it, giving a false impression of an actual 9-hour stuck RIT 
/ unavailability.

  *Fix:* add a shared {{AssignmentManager#deleteRegion(RegionInfo)}} method 
that removes the region from both {{regionStates}} and 
{{regionInTransitionTracker}} together, and have both
  {{markRegionAsMerged}} and {{GCRegionProcedure}} call it instead of touching 
{{regionStates}} directly.

  Confirmed present on {{apache/master}} as of commit fb4286d3046.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to