java.io.Closeable
, java.lang.AutoCloseable
InternalEngine
public abstract class Engine
extends java.lang.Object
implements java.io.Closeable
Modifier and Type | Class | Description |
---|---|---|
static class |
Engine.CommitId |
|
static class |
Engine.Delete |
|
static class |
Engine.DeleteResult |
|
static interface |
Engine.EventListener |
|
static class |
Engine.Get |
|
static class |
Engine.GetResult |
|
static class |
Engine.Index |
|
static class |
Engine.IndexCommitRef |
|
static class |
Engine.IndexResult |
|
protected static class |
Engine.IndexThrottle |
A throttling class that can be activated, causing the
acquireThrottle method to block on a lock when throttling
is enabled |
static class |
Engine.NoOp |
|
protected static class |
Engine.NoOpLock |
A Lock implementation that always allows the lock to be acquired
|
static class |
Engine.NoOpResult |
|
static class |
Engine.Operation |
|
static class |
Engine.Result |
Base class for index and delete operation results
Holds result meta data (e.g.
|
static class |
Engine.Searcher |
|
static class |
Engine.SearcherScope |
|
static class |
Engine.SyncedFlushResult |
|
static interface |
Engine.Warmer |
Called for each new opened engine searcher to warm new segments
|
Modifier and Type | Field | Description |
---|---|---|
protected java.lang.String |
allocationId |
|
protected EngineConfig |
engineConfig |
|
protected Engine.EventListener |
eventListener |
|
protected org.apache.lucene.util.SetOnce<java.lang.Exception> |
failedEngine |
|
protected java.util.concurrent.locks.ReentrantLock |
failEngineLock |
|
static java.lang.String |
HISTORY_UUID_KEY |
|
protected java.util.concurrent.atomic.AtomicBoolean |
isClosed |
|
protected long |
lastWriteNanos |
|
protected org.apache.logging.log4j.Logger |
logger |
|
protected ReleasableLock |
readLock |
|
protected java.util.concurrent.locks.ReentrantReadWriteLock |
rwl |
|
protected ShardId |
shardId |
|
protected Store |
store |
|
static java.lang.String |
SYNC_COMMIT_ID |
|
protected ReleasableLock |
writeLock |
Modifier | Constructor | Description |
---|---|---|
protected |
Engine(EngineConfig engineConfig) |
Modifier and Type | Method | Description |
---|---|---|
abstract Engine.IndexCommitRef |
acquireLastIndexCommit(boolean flushFirst) |
Snapshots the most recent index and returns a handle to it.
|
abstract Engine.IndexCommitRef |
acquireSafeIndexCommit() |
Snapshots the most recent safe index commit from the engine.
|
Engine.Searcher |
acquireSearcher(java.lang.String source) |
Returns a new searcher instance.
|
abstract Engine.Searcher |
acquireSearcher(java.lang.String source,
Engine.SearcherScope scope) |
Returns a new searcher instance.
|
java.io.Closeable |
acquireTranslogRetentionLock() |
|
abstract void |
activateThrottling() |
Request that this engine throttle incoming indexing requests to one thread.
|
void |
close() |
|
protected abstract void |
closeNoLock(java.lang.String reason,
java.util.concurrent.CountDownLatch closedLatch) |
Method to close the engine while the write lock is held.
|
CommitStats |
commitStats() |
get commits stats for the last commit
|
EngineConfig |
config() |
|
abstract void |
deactivateThrottling() |
Reverses a previous
activateThrottling() call. |
abstract Engine.DeleteResult |
delete(Engine.Delete delete) |
Perform document delete operation on the engine
|
protected void |
ensureOpen() |
|
protected void |
ensureOpen(java.lang.Exception suppressed) |
|
abstract boolean |
ensureTranslogSynced(java.util.stream.Stream<Translog.Location> locations) |
Ensures that all locations in the given stream have been written to the underlying storage.
|
int |
estimateTranslogOperationsFromMinSeq(long minSeqNo) |
Returns the estimated number of translog operations in this engine whose seq# at least the provided seq#.
|
void |
failEngine(java.lang.String reason,
java.lang.Exception failure) |
fail engine due to some error.
|
abstract int |
fillSeqNoGaps(long primaryTerm) |
Fills up the local checkpoints history with no-ops until the local checkpoint
and the max seen sequence ID are identical.
|
abstract Engine.CommitId |
flush() |
Flushes the state of the engine including the transaction log, clearing memory and persisting
documents in the lucene index to disk including a potentially heavy and durable fsync operation.
|
abstract Engine.CommitId |
flush(boolean force,
boolean waitIfOngoing) |
Flushes the state of the engine including the transaction log, clearing memory.
|
void |
flushAndClose() |
Flush the engine (committing segments to disk and truncating the
translog) and close it.
|
void |
forceMerge(boolean flush) |
Force merges to 1 segment
|
abstract void |
forceMerge(boolean flush,
int maxNumSegments,
boolean onlyExpungeDeletes,
boolean upgrade,
boolean upgradeOnlyAncientSegments) |
Triggers a forced merge on this engine
|
abstract Engine.GetResult |
get(Engine.Get get,
java.util.function.BiFunction<java.lang.String,Engine.SearcherScope,Engine.Searcher> searcherFactory) |
|
protected Engine.GetResult |
getFromSearcher(Engine.Get get,
java.util.function.BiFunction<java.lang.String,Engine.SearcherScope,Engine.Searcher> searcherFactory,
Engine.SearcherScope scope) |
|
abstract java.lang.String |
getHistoryUUID() |
returns the history uuid for the engine
|
abstract long |
getIndexBufferRAMBytesUsed() |
How much heap is used that would be freed by a refresh.
|
abstract long |
getIndexThrottleTimeInMillis() |
Returns the number of milliseconds this engine was under index throttling.
|
protected abstract org.apache.lucene.index.SegmentInfos |
getLastCommittedSegmentInfos() |
|
long |
getLastSyncedGlobalCheckpoint() |
Returns the latest global checkpoint value that has been persisted in the underlying storage (i.e.
|
long |
getLastWriteNanos() |
Returns the timestamp of the last write in nanoseconds.
|
abstract LocalCheckpointTracker |
getLocalCheckpointTracker() |
The sequence number service for this engine.
|
MergeStats |
getMergeStats() |
|
protected Segment[] |
getSegmentInfo(org.apache.lucene.index.SegmentInfos lastCommittedSegmentInfos,
boolean verbose) |
|
Translog.Location |
getTranslogLastWriteLocation() |
Returns the last location that the translog of this engine has written into.
|
TranslogStats |
getTranslogStats() |
|
abstract long |
getWritingBytes() |
Returns how many bytes we are currently moving from heap to disk
|
protected static long |
guardedRamBytesUsed(org.apache.lucene.util.Accountable a) |
Returns 0 in the case where accountable is null, otherwise returns
ramBytesUsed() |
abstract Engine.IndexResult |
index(Engine.Index index) |
Perform document index operation on the engine
|
protected static boolean |
isMergedSegment(org.apache.lucene.index.LeafReader reader) |
Returns whether a leaf reader comes from a merge (versus flush or addIndexes).
|
boolean |
isRecovering() |
Returns
true iff this engine is currently recovering from translog. |
abstract boolean |
isThrottled() |
Returns the
true iff this engine is currently under index throttling. |
boolean |
isTranslogSyncNeeded() |
Checks if the underlying storage sync is required.
|
protected boolean |
maybeFailEngine(java.lang.String source,
java.lang.Exception e) |
Check whether the engine should be failed
|
abstract void |
maybePruneDeletes() |
Tries to prune buffered deletes from the version map.
|
Translog.Snapshot |
newTranslogSnapshotFromMinSeqNo(long minSeqNo) |
Creates a new translog snapshot from this engine for reading translog operations whose seq# at least the provided seq#.
|
abstract Engine.NoOpResult |
noOp(Engine.NoOp noOp) |
|
void |
onSettingsChanged() |
|
abstract Engine |
recoverFromTranslog() |
Performs recovery from the transaction log.
|
abstract void |
refresh(java.lang.String source) |
Synchronously refreshes the engine for new search operations to reflect the latest
changes.
|
boolean |
refreshNeeded() |
|
abstract void |
restoreLocalCheckpointFromTranslog() |
Marks operations in the translog as completed.
|
abstract void |
rollTranslogGeneration() |
Rolls the translog generation and cleans unneeded.
|
abstract java.util.List<Segment> |
segments(boolean verbose) |
The list of segments in the engine.
|
SegmentsStats |
segmentsStats(boolean includeSegmentFileSizes) |
Global stats on segments.
|
abstract boolean |
shouldPeriodicallyFlush() |
Checks if this engine should be flushed periodically.
|
boolean |
shouldRollTranslogGeneration() |
Tests whether or not the translog generation should be rolled to a new generation.
|
abstract void |
skipTranslogRecovery() |
Do not replay translog operations, but make the engine be ready.
|
abstract Engine.SyncedFlushResult |
syncFlush(java.lang.String syncId,
Engine.CommitId expectedCommitId) |
Attempts to do a special commit where the given syncID is put into the commit data.
|
abstract void |
syncTranslog() |
|
abstract void |
trimTranslog() |
checks and removes translog files that no longer need to be retained.
|
abstract void |
writeIndexingBuffer() |
Called when our engine is using too much heap and should move buffered indexed/deleted documents to disk.
|
protected void |
writerSegmentStats(SegmentsStats stats) |
public static final java.lang.String SYNC_COMMIT_ID
public static final java.lang.String HISTORY_UUID_KEY
protected final ShardId shardId
protected final java.lang.String allocationId
protected final org.apache.logging.log4j.Logger logger
protected final EngineConfig engineConfig
protected final Store store
protected final java.util.concurrent.atomic.AtomicBoolean isClosed
protected final Engine.EventListener eventListener
protected final java.util.concurrent.locks.ReentrantLock failEngineLock
protected final java.util.concurrent.locks.ReentrantReadWriteLock rwl
protected final ReleasableLock readLock
protected final ReleasableLock writeLock
protected final org.apache.lucene.util.SetOnce<java.lang.Exception> failedEngine
protected volatile long lastWriteNanos
protected Engine(EngineConfig engineConfig)
protected static long guardedRamBytesUsed(org.apache.lucene.util.Accountable a)
ramBytesUsed()
protected static boolean isMergedSegment(org.apache.lucene.index.LeafReader reader)
public final EngineConfig config()
protected abstract org.apache.lucene.index.SegmentInfos getLastCommittedSegmentInfos()
public MergeStats getMergeStats()
public abstract java.lang.String getHistoryUUID()
public abstract long getWritingBytes()
public abstract long getIndexThrottleTimeInMillis()
public abstract boolean isThrottled()
true
iff this engine is currently under index throttling.getIndexThrottleTimeInMillis()
public abstract Engine.IndexResult index(Engine.Index index) throws java.io.IOException
index
- operation to performEngine.IndexResult
containing updated translog location, version and
document specific failures
Note: engine level failures (i.e. persistent engine failures) are thrownjava.io.IOException
public abstract Engine.DeleteResult delete(Engine.Delete delete) throws java.io.IOException
delete
- operation to performEngine.DeleteResult
containing updated translog location, version and
document specific failures
Note: engine level failures (i.e. persistent engine failures) are thrownjava.io.IOException
public abstract Engine.NoOpResult noOp(Engine.NoOp noOp)
public abstract Engine.SyncedFlushResult syncFlush(java.lang.String syncId, Engine.CommitId expectedCommitId) throws EngineException
syncId
- id of this syncexpectedCommitId
- the expected value ofEngineException
protected final Engine.GetResult getFromSearcher(Engine.Get get, java.util.function.BiFunction<java.lang.String,Engine.SearcherScope,Engine.Searcher> searcherFactory, Engine.SearcherScope scope) throws EngineException
EngineException
public abstract Engine.GetResult get(Engine.Get get, java.util.function.BiFunction<java.lang.String,Engine.SearcherScope,Engine.Searcher> searcherFactory) throws EngineException
EngineException
public final Engine.Searcher acquireSearcher(java.lang.String source) throws EngineException
source
- the source API or routing that triggers this searcher acquireEngineException
Engine.Searcher.close()
public abstract Engine.Searcher acquireSearcher(java.lang.String source, Engine.SearcherScope scope) throws EngineException
source
- the source API or routing that triggers this searcher acquirescope
- the scope of this searcher ie. if the searcher will be used for get or search purposesEngineException
Engine.Searcher.close()
public boolean isTranslogSyncNeeded()
public abstract boolean ensureTranslogSynced(java.util.stream.Stream<Translog.Location> locations) throws java.io.IOException
java.io.IOException
public abstract void syncTranslog() throws java.io.IOException
java.io.IOException
public java.io.Closeable acquireTranslogRetentionLock()
public Translog.Snapshot newTranslogSnapshotFromMinSeqNo(long minSeqNo) throws java.io.IOException
java.io.IOException
public int estimateTranslogOperationsFromMinSeq(long minSeqNo)
public TranslogStats getTranslogStats()
public Translog.Location getTranslogLastWriteLocation()
protected final void ensureOpen(java.lang.Exception suppressed)
protected final void ensureOpen()
public CommitStats commitStats()
public abstract LocalCheckpointTracker getLocalCheckpointTracker()
public long getLastSyncedGlobalCheckpoint()
public final SegmentsStats segmentsStats(boolean includeSegmentFileSizes)
protected void writerSegmentStats(SegmentsStats stats)
public abstract long getIndexBufferRAMBytesUsed()
AlreadyClosedException
.protected Segment[] getSegmentInfo(org.apache.lucene.index.SegmentInfos lastCommittedSegmentInfos, boolean verbose)
public abstract java.util.List<Segment> segments(boolean verbose)
public final boolean refreshNeeded()
@Nullable public abstract void refresh(java.lang.String source) throws EngineException
EngineException
public abstract void writeIndexingBuffer() throws EngineException
EngineException
public abstract boolean shouldPeriodicallyFlush()
public abstract Engine.CommitId flush(boolean force, boolean waitIfOngoing) throws EngineException
force
- if true
a lucene commit is executed even if no changes need to be committed.waitIfOngoing
- if true
this call will block until all currently running flushes have finished.
Otherwise this call will return without blocking.EngineException
public abstract Engine.CommitId flush() throws EngineException
EngineException
public abstract void trimTranslog() throws EngineException
TranslogDeletionPolicy
for detailsEngineException
public boolean shouldRollTranslogGeneration()
true
if the current generation should be rolled to a new generationpublic abstract void rollTranslogGeneration() throws EngineException
EngineException
public void forceMerge(boolean flush) throws java.io.IOException
java.io.IOException
public abstract void forceMerge(boolean flush, int maxNumSegments, boolean onlyExpungeDeletes, boolean upgrade, boolean upgradeOnlyAncientSegments) throws EngineException, java.io.IOException
EngineException
java.io.IOException
public abstract Engine.IndexCommitRef acquireLastIndexCommit(boolean flushFirst) throws EngineException
flushFirst
- indicates whether the engine should flush before returning the snapshotEngineException
public abstract Engine.IndexCommitRef acquireSafeIndexCommit() throws EngineException
EngineException
public void failEngine(java.lang.String reason, @Nullable java.lang.Exception failure)
protected boolean maybeFailEngine(java.lang.String source, java.lang.Exception e)
protected abstract void closeNoLock(java.lang.String reason, java.util.concurrent.CountDownLatch closedLatch)
public void flushAndClose() throws java.io.IOException
java.io.IOException
public void close() throws java.io.IOException
close
in interface java.lang.AutoCloseable
close
in interface java.io.Closeable
java.io.IOException
public void onSettingsChanged()
public long getLastWriteNanos()
Engine.Operation.startTime()
is used which might be
slightly inaccurate.System.nanoTime()
,
Engine.Operation.startTime()
public abstract void activateThrottling()
deactivateThrottling()
.public abstract void deactivateThrottling()
activateThrottling()
call.public abstract void restoreLocalCheckpointFromTranslog() throws java.io.IOException
java.io.IOException
- if an I/O exception occurred reading the translogpublic abstract int fillSeqNoGaps(long primaryTerm) throws java.io.IOException
primaryTerm
- the shards primary term this engine was created forjava.io.IOException
public abstract Engine recoverFromTranslog() throws java.io.IOException
java.io.IOException
public abstract void skipTranslogRecovery()
public boolean isRecovering()
true
iff this engine is currently recovering from translog.public abstract void maybePruneDeletes()