Search in sources :

Example 1 with EditLogInputException

use of org.apache.hadoop.hdfs.server.namenode.EditLogInputException in project hadoop by apache.

the class EditLogTailer method doTailEdits.

@VisibleForTesting
void doTailEdits() throws IOException, InterruptedException {
    // Write lock needs to be interruptible here because the 
    // transitionToActive RPC takes the write lock before calling
    // tailer.stop() -- so if we're not interruptible, it will
    // deadlock.
    namesystem.writeLockInterruptibly();
    try {
        FSImage image = namesystem.getFSImage();
        long lastTxnId = image.getLastAppliedTxId();
        if (LOG.isDebugEnabled()) {
            LOG.debug("lastTxnId: " + lastTxnId);
        }
        Collection<EditLogInputStream> streams;
        try {
            streams = editLog.selectInputStreams(lastTxnId + 1, 0, null, inProgressOk, true);
        } catch (IOException ioe) {
            // This is acceptable. If we try to tail edits in the middle of an edits
            // log roll, i.e. the last one has been finalized but the new inprogress
            // edits file hasn't been started yet.
            LOG.warn("Edits tailer failed to find any streams. Will try again " + "later.", ioe);
            return;
        }
        if (LOG.isDebugEnabled()) {
            LOG.debug("edit streams to load from: " + streams.size());
        }
        // Once we have streams to load, errors encountered are legitimate cause
        // for concern, so we don't catch them here. Simple errors reading from
        // disk are ignored.
        long editsLoaded = 0;
        try {
            editsLoaded = image.loadEdits(streams, namesystem);
        } catch (EditLogInputException elie) {
            editsLoaded = elie.getNumEditsLoaded();
            throw elie;
        } finally {
            if (editsLoaded > 0 || LOG.isDebugEnabled()) {
                LOG.debug(String.format("Loaded %d edits starting from txid %d ", editsLoaded, lastTxnId));
            }
        }
        if (editsLoaded > 0) {
            lastLoadTimeMs = monotonicNow();
        }
        lastLoadedTxnId = image.getLastAppliedTxId();
    } finally {
        namesystem.writeUnlock();
    }
}
Also used : FSImage(org.apache.hadoop.hdfs.server.namenode.FSImage) EditLogInputStream(org.apache.hadoop.hdfs.server.namenode.EditLogInputStream) EditLogInputException(org.apache.hadoop.hdfs.server.namenode.EditLogInputException) IOException(java.io.IOException) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Aggregations

VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 IOException (java.io.IOException)1 EditLogInputException (org.apache.hadoop.hdfs.server.namenode.EditLogInputException)1 EditLogInputStream (org.apache.hadoop.hdfs.server.namenode.EditLogInputStream)1 FSImage (org.apache.hadoop.hdfs.server.namenode.FSImage)1