[
https://issues.apache.org/jira/browse/HBASE-2337?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12902169#action_12902169
]
Jean-Daniel Cryans commented on HBASE-2337:
-------------------------------------------
HBASE-2437 was committed, can we close this Nicolas?
> log recovery: splitLog deletes old logs prematurely
> ---------------------------------------------------
>
> Key: HBASE-2337
> URL: https://issues.apache.org/jira/browse/HBASE-2337
> Project: HBase
> Issue Type: Bug
> Reporter: Kannan Muthukkaruppan
> Assignee: Nicolas Spiegelberg
> Priority: Blocker
> Fix For: 0.90.0
>
> Attachments: HBASE-2337-20.4.patch
>
>
> splitLog()'s purpose is to take a bunch of commit logs of a crashed RS and
> create per-region logs. splitLog() runs in the master. There are two cases
> where splitLog() might end up deleting an old log before actually creating
> (sync/closing) the newly created logs. If the master crashes in between
> deletion of the old log and creation of the new log, then edits could be lost
> irrecoverably.
> More specifically here are the two issues we (Nicolas, Aravind and I) noticed:
> Issue #1: The old logs are read one at a time. An in memory structure,
> logEntries (a map from region name to edits for the region), is populated.
> And the old logs are closed. Then the in-memory map is written out to per
> region files. Fix: We should move the file deletion to later.
> Issue #2: There is another little case. The per-region log file is written
> under the region directory (named oldlogfile.log or the constant
> HREGION_OLDLOGFILE_NAME). Before the master creates the file, it checks to
> see if there is already a file with that name, and if so, it renames it to
> oldlogfile.log.old, and then creates file oldlogfile.log again, and copies
> over the contents of oldlogfile.log.old to oldlogfile.log. It then proceeds
> to delete "oldlogfile.log.old", even though it hasn't closed/sync'ed
> "oldlogfile.log" yet.
> --
> I think we should be able to restructure the code such that all deletion of
> old logs happens *after* the new logs have been created (i.e. written to &
> closed).
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.