You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Pankaj Kumar (JIRA)" <ji...@apache.org> on 2018/07/27 10:43:00 UTC

[jira] [Commented] (HBASE-20583) SplitLogWorker should handle FileNotFoundException when split a wal

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

Pankaj Kumar commented on HBASE-20583:
--------------------------------------

This issue is applicable to branch-1.x as well, please correct me if I'm wrong.

Shall we backport this to branch-1?

> 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)