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

Duo Zhang commented on HBASE-21354:
-----------------------------------

So this could only happen after restarting, and it also requires that we fail 
to write the trailer for a file(not only the newest file, and maybe this could 
also happen with multiple restarts?)? As when rolling, we will reuse the 
storeTracker, so the storeTracker for a newer file will always contains all the 
procedures for an older file. I think we also need to add this to the comment 
to prevent someone changes it back in the future. And we can also mention in 
the comment that this will not cause any procedures can not be deleted, as if a 
procedure has been deleted, we can always get this information through the 
newest storeTracker(the global one).

No other problems. Nice catch, the patch is great. Thanks our mighty 
[~allan163].

> Procedure may be deleted improperly during master restarts resulting in 
> 'Corrupt'
> ---------------------------------------------------------------------------------
>
>                 Key: HBASE-21354
>                 URL: https://issues.apache.org/jira/browse/HBASE-21354
>             Project: HBase
>          Issue Type: Sub-task
>    Affects Versions: 2.1.0, 2.0.2
>            Reporter: Allan Yang
>            Assignee: Allan Yang
>            Priority: Major
>         Attachments: HBASE-21354.branch-2.0.001.patch, 
> HBASE-21354.branch-2.0.002.patch
>
>
> Good news! [~stack], [~Apache9], I may find the root cause of mysterious 
> ‘Corrupted procedure’ or some procedures disappeared after master 
> restarts(happens during ITBLL).
> This is because during master restarts, we load procedures from the log, and 
> builds the 'holdingCleanupTracker' according each log's tracker. We may mark 
> a procedure in the oldest log as deleted if one log doesn't contain the 
> procedure. This is Inappropriate since one log will not contain info of the 
> log if this procedure was not updated during the time. We can only delete the 
> procedure only if it is not in the global tracker, which have the whole 
> picture.
> {code}
> trackerNode = tracker.lookupClosestNode(trackerNode, procId);
>         if (trackerNode == null || !trackerNode.contains(procId) ||
>           trackerNode.isModified(procId)) {
>           // the procedure was removed or modified
>           node.delete(procId);
>         }
> {code}
> A test case(testProcedureShouldNotCleanOnLoad) shows cleanly how the 
> corruption happened in the patch.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to