Guanghao Zhang created HBASE-20583:
--------------------------------------

             Summary: 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


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