@InterfaceAudience.LimitedPrivate(value="Configuration") public class AsyncFSWAL extends AbstractFSWAL<WALProvider.AsyncWriter>
Here 'waitingConsumePayloads' acts as the RingBuffer in FSHLog.
For append, we process it as follow:
shouldScheduleConsumer() for more details.
waitingConsumePayloads and insert it into
toWriteAppendstoWriteAppends, append it to the AsyncWriter, and insert it into
unackedAppendsbatchSize, or there is a sync request, then we call
sync on the AsyncWriter.unackedAppends and drop it.unackedAppends back to toWriteAppends and
wait for writing them again.
Here we only describe the logic of doReplaceWriter. The main logic of rollWriter is same with
FSHLog.
For a normal roll request(for example, we have reached the log roll size):
waitingRoll(int) to true and
readyForRolling to false, and then wait on readyForRolling(see
waitForSafePoint()).waitingConsumePayloads if
waitingRoll(int) is true, and also stop writing the entries in toWriteAppends out.
unackedAppends is empty,
signal the readyForRollingCond.writerBroken(int) and waitingRoll(int) to false.WAL.Entry, WAL.Reader| 限定符和类型 | 字段和说明 |
|---|---|
static String |
ASYNC_WAL_USE_SHARED_EVENT_LOOP |
static String |
ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS |
static boolean |
DEFAULT_ASYNC_WAL_USE_SHARED_EVENT_LOOP |
static int |
DEFAULT_ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS |
static long |
DEFAULT_WAL_BATCH_SIZE |
static String |
WAL_BATCH_SIZE |
blocksize, closed, conf, coprocessorHost, DEFAULT_SLOW_SYNC_TIME_MS, filenum, fs, highestSyncedTxid, highestUnsyncedTxid, implClassName, listeners, logrollsize, maxLogs, numEntries, ourFiles, prefixPathStr, rollRequested, rollWriterLock, sequenceIdAccounting, shutdown, slowSyncNs, totalLogSize, useHsync, walArchiveDir, walDir, walFile2Props, walFilePrefix, walFileSuffix| 构造器和说明 |
|---|
AsyncFSWAL(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path rootDir,
String logDir,
String archiveDir,
org.apache.hadoop.conf.Configuration conf,
List<WALActionsListener> listeners,
boolean failIfWALExists,
String prefix,
String suffix,
org.apache.hbase.thirdparty.io.netty.channel.EventLoopGroup eventLoopGroup,
Class<? extends org.apache.hbase.thirdparty.io.netty.channel.Channel> channelClass) |
| 限定符和类型 | 方法和说明 |
|---|---|
protected long |
append(RegionInfo hri,
WALKeyImpl key,
WALEdit edits,
boolean inMemstore)
Append a set of edits to the WAL.
|
protected WALProvider.AsyncWriter |
createWriterInstance(org.apache.hadoop.fs.Path path) |
protected void |
doAppend(WALProvider.AsyncWriter writer,
org.apache.hadoop.hbase.regionserver.wal.FSWALEntry entry) |
protected boolean |
doCheckLogLowReplication() |
protected void |
doReplaceWriter(org.apache.hadoop.fs.Path oldPath,
org.apache.hadoop.fs.Path newPath,
WALProvider.AsyncWriter nextWriter)
Notice that you need to clear the
AbstractFSWAL.rollRequested flag in this method, as the new writer
will begin to work before returning from this method. |
protected void |
doShutdown() |
void |
sync()
Sync what we have in the WAL.
|
void |
sync(boolean forceSync) |
void |
sync(long txid)
Sync the WAL if the txId was not already sync'd.
|
void |
sync(long txid,
boolean forceSync) |
abortCacheFlush, appendData, appendEntry, appendMarker, atHeadOfRingBufferEventHandlerAppend, blockOnSync, checkLogLowReplication, close, completeCacheFlush, computeFilename, getCoprocessorHost, getCurrentFileName, getEarliestMemStoreSeqNum, getEarliestMemStoreSeqNum, getFilenum, getFileNumFromFileName, getLogFileSize, getLogFileSizeIfBeingWritten, getNumLogFiles, getNumRolledLogFiles, getPreallocatedEventCount, getSyncFuture, getWALArchivePath, init, isLogRollRequested, logRollAndSetupWalProps, main, postSync, registerWALActionsListener, requestLogRoll, requestLogRoll, rollWriter, rollWriter, shutdown, stampSequenceIdAndPublishToRingBuffer, startCacheFlush, startCacheFlush, toString, unregisterWALActionsListener, updateStorepublic static final long DEFAULT_WAL_BATCH_SIZE
public static final String ASYNC_WAL_USE_SHARED_EVENT_LOOP
public static final boolean DEFAULT_ASYNC_WAL_USE_SHARED_EVENT_LOOP
public static final String ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS
public static final int DEFAULT_ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS
public AsyncFSWAL(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path rootDir,
String logDir,
String archiveDir,
org.apache.hadoop.conf.Configuration conf,
List<WALActionsListener> listeners,
boolean failIfWALExists,
String prefix,
String suffix,
org.apache.hbase.thirdparty.io.netty.channel.EventLoopGroup eventLoopGroup,
Class<? extends org.apache.hbase.thirdparty.io.netty.channel.Channel> channelClass)
throws FailedLogCloseException,
IOException
protected long append(RegionInfo hri, WALKeyImpl key, WALEdit edits, boolean inMemstore) throws IOException
AbstractFSWALkey will have the region edit/sequence id filled in.
NOTE: This append, at a time that is usually after this call returns, starts an mvcc
transaction by calling 'begin' wherein which we assign this update a sequenceid. At assignment
time, we stamp all the passed in Cells inside WALEdit with their sequenceId. You must
'complete' the transaction this mvcc transaction by calling
MultiVersionConcurrencyControl#complete(...) or a variant otherwise mvcc will get stuck. Do it
in the finally of a try/finally block within which this append lives and any subsequent
operations like sync or update of memstore, etc. Get the WriteEntry to pass mvcc out of the
passed in WALKey walKey parameter. Be warned that the WriteEntry is not
immediately available on return from this method. It WILL be available subsequent to a sync of
this append; otherwise, you will just have to wait on the WriteEntry to get filled in.append 在类中 AbstractFSWAL<WALProvider.AsyncWriter>hri - the regioninfo associated with appendkey - Modified by this call; we add to it this edits region edit/sequence id.edits - Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit
sequence id that is after all currently appended edits.inMemstore - Always true except for case where we are writing a region event meta
marker edit, for example, a compaction completion record into the WAL or noting a
Region Open event. In these cases the entry is just so we can finish an unfinished
compaction after a crash when the new Server reads the WAL on recovery, etc. These
transition event 'Markers' do not go via the memstore. When memstore is false,
we presume a Marker event edit.key will have the region edit/sequence id
in it.IOExceptionpublic void sync()
throws IOException
WALIOExceptionpublic void sync(long txid)
throws IOException
WALtxid - Transaction id to sync to.IOExceptionpublic void sync(boolean forceSync)
throws IOException
forceSync - Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush
vs hsync.IOExceptionpublic void sync(long txid,
boolean forceSync)
throws IOException
txid - Transaction id to sync to.forceSync - Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush
vs hsync.IOExceptionprotected WALProvider.AsyncWriter createWriterInstance(org.apache.hadoop.fs.Path path) throws IOException
createWriterInstance 在类中 AbstractFSWAL<WALProvider.AsyncWriter>IOExceptionprotected void doReplaceWriter(org.apache.hadoop.fs.Path oldPath,
org.apache.hadoop.fs.Path newPath,
WALProvider.AsyncWriter nextWriter)
throws IOException
AbstractFSWALAbstractFSWAL.rollRequested flag in this method, as the new writer
will begin to work before returning from this method. If we clear the flag after returning from
this call, we may miss a roll request. The implementation class should choose a proper place to
clear the AbstractFSWAL.rollRequested flag so we do not miss a roll request, typically before you
start writing to the new writer.doReplaceWriter 在类中 AbstractFSWAL<WALProvider.AsyncWriter>IOExceptionprotected void doShutdown()
throws IOException
doShutdown 在类中 AbstractFSWAL<WALProvider.AsyncWriter>IOExceptionprotected void doAppend(WALProvider.AsyncWriter writer, org.apache.hadoop.hbase.regionserver.wal.FSWALEntry entry)
doAppend 在类中 AbstractFSWAL<WALProvider.AsyncWriter>protected boolean doCheckLogLowReplication()
Copyright © 2007–2020 The Apache Software Foundation. All rights reserved.