[ 
https://issues.apache.org/jira/browse/HBASE-21354?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Allan Yang updated HBASE-21354:
-------------------------------
    Description: 
Good news! [~stack], [~Apache9], I may find the case 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.

  was:
Good news! [~stack], [~Apache9], I may find the case of mysterious ‘Corrupted 
procedure’ or some procedures disappeared after master restarts.
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.


> 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
>
> Good news! [~stack], [~Apache9], I may find the case 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