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

Guanghao Zhang updated HBASE-20583:
-----------------------------------
    Resolution: Fixed
        Status: Resolved  (was: Patch Available)

Pushed to master, branch-2 and branch-2.0. Thanks [~Apache9] and [~stack] for 
reviewing.

> SplitLogWorker should handle FileNotFoundException when split a wal
> -------------------------------------------------------------------
>
>                 Key: HBASE-20583
>                 URL: https://issues.apache.org/jira/browse/HBASE-20583
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Guanghao Zhang
>            Assignee: Guanghao Zhang
>            Priority: Major
>             Fix For: 2.0.1
>
>         Attachments: HBASE-20583.master.001.patch, 
> HBASE-20583.master.001.patch
>
>
> When a split task is finished, master will delete the wal first, then remove 
> the task's zk node. So if master crashed after delelte the wal, the zk task 
> node may be leaved on zk. When master resubmit this task, the task will 
> failed by FileNotFoundException.
> We also handle FileNotFoundException in WALSplitter. But not handle this in 
> SplitLogWorker.
>  
> {code:java}
>   try {
>     in = getReader(path, reporter);
>   } catch (EOFException e) {
>     if (length <= 0) {
>       // TODO should we ignore an empty, not-last log file if skip.errors
>       // is false? Either way, the caller should decide what to do. E.g.
>       // ignore if this is the last log in sequence.
>       // TODO is this scenario still possible if the log has been
>       // recovered (i.e. closed)
>       LOG.warn("Could not open {} for reading. File is empty", path, e);
>     }
>     // EOFException being ignored
>     return null;
>   }
> } catch (IOException e) {
>   if (e instanceof FileNotFoundException) {
>     // A wal file may not exist anymore. Nothing can be recovered so move on
>     LOG.warn("File {} does not exist anymore", path, e);
>     return null;
>   }
> }{code}
> {code:java}
> // Here fs.getFileStatus may throw FileNotFoundException, too. We should 
> handle this exception as the WALSplitter.getReader.
> try {
>   if (!WALSplitter.splitLogFile(walDir, fs.getFileStatus(new Path(walDir, 
> filename)),
>     fs, conf, p, sequenceIdChecker,
>       server.getCoordinatedStateManager().getSplitLogWorkerCoordination(), 
> factory)) {
>     return Status.PREEMPTED;
>   }
> } 
> {code}
>  
>  



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

Reply via email to