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

Allan Yang commented on HBASE-21354:
------------------------------------

Sorry for the compile error, thanks [~xucang] for reminding, thanks for 
[~Apache9] to fix it.

{quote}
we reset the partial flag for a ProcedureStoreTracker after reading all its 
content when loading, but this is not correct... Only the global store tracker 
can be reset to not partial at the end, the tracker for each file should remain 
partial.
{quote}
I think partial flag only means the tracker is rebuild successfully. it does 
not mean it is 'global' one or not. For a normal closed wal, the tracker inside 
the wal is the currently global tracker, it's partial flag is also false, and 
we will not rebuild tracker for it. 


> 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
>             Fix For: 3.0.0, 2.2.0, 2.1.1, 2.0.3
>
>         Attachments: HBASE-21354-addendum.patch, 
> HBASE-21354.branch-2.0.001.patch, HBASE-21354.branch-2.0.002.patch, 
> HBASE-21354.branch-2.0.003.patch, HBASE-21354.branch-2.0.004.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