[
https://issues.apache.org/jira/browse/HBASE-6608?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Zhihong Ted Yu updated HBASE-6608:
----------------------------------
Status: Open (was: Patch Available)
> Fix for HBASE-6160, META entries from daughters can be deleted before parent
> entries, shouldn't compare HRegionInfo's
> ---------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-6608
> URL: https://issues.apache.org/jira/browse/HBASE-6608
> Project: HBase
> Issue Type: Bug
> Components: client, regionserver
> Affects Versions: 0.92.1, 0.96.0, 0.94.2
> Reporter: Enis Soztutar
> Assignee: Enis Soztutar
> Fix For: 0.92.2, 0.96.0, 0.94.2
>
> Attachments: 6608-v2.patch, hbase-6608_v1.patch
>
>
> Our nightlies discovered that the patch for HBASE-6160 did not actually fix
> the issue of "META entries from daughters can be deleted before parent
> entries". Instead of reopening the HBASE-6160, it is cleaner to track it
> here.
> The original issue is:
> {quote}
> HBASE-5986 fixed and issue, where the client sees the META entry for the
> parent, but not the children. However, after the fix, we have seen the
> following issue in tests:
> Region A is split to -> B, C
> Region B is split to -> D, E
> After some time, META entry for B is deleted since it is not needed anymore,
> but META entry for Region A stays in META (C still refers it). In this case,
> the client throws RegionOfflineException for B.
> {quote}
> The problem with the fix seems to be that we keep and compare HRegionInfo's
> in the HashSet at CatalogJanitor.java#scan(), but HRI that are compared are
> not equal.
> {code}
> HashSet<HRegionInfo> parentNotCleaned = new HashSet<HRegionInfo>(); //regions
> whose parents are still around
> for (Map.Entry<HRegionInfo, Result> e : splitParents.entrySet()) {
> if (!parentNotCleaned.contains(e.getKey()) && cleanParent(e.getKey(),
> e.getValue())) {
> cleaned++;
> } else {
> ...
> {code}
> In the above case, Meta row for region A will contain a serialized version of
> B that is not offline. However Meta row for region B will contain a
> serialized version of B that is offline (MetaEditor.offlineParentInMeta()
> does that). So the deserialized version we put to HashSet and the
> deserialized version we query contains() from HashSet are different in the
> offline field, thus HRI.equals() fail.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira