Class InternalEngine

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public class InternalEngine
    extends Engine
    • Constructor Detail

      • InternalEngine

        public InternalEngine​(EngineConfig engineConfig)
    • Method Detail

      • restoreLocalHistoryFromTranslog

        public int restoreLocalHistoryFromTranslog​(Engine.TranslogRecoveryRunner translogRecoveryRunner)
                                            throws java.io.IOException
        Description copied from class: Engine
        This method replays translog to restore the Lucene index which might be reverted previously. This ensures that all acknowledged writes are restored correctly when this engine is promoted.
        Specified by:
        restoreLocalHistoryFromTranslog in class Engine
        Returns:
        the number of translog operations have been recovered
        Throws:
        java.io.IOException
      • fillSeqNoGaps

        public int fillSeqNoGaps​(long primaryTerm)
                          throws java.io.IOException
        Description copied from class: Engine
        Fills up the local checkpoints history with no-ops until the local checkpoint and the max seen sequence ID are identical.
        Specified by:
        fillSeqNoGaps in class Engine
        Parameters:
        primaryTerm - the shards primary term this engine was created for
        Returns:
        the number of no-ops added
        Throws:
        java.io.IOException
      • recoverFromTranslog

        public InternalEngine recoverFromTranslog​(Engine.TranslogRecoveryRunner translogRecoveryRunner,
                                                  long recoverUpToSeqNo)
                                           throws java.io.IOException
        Description copied from class: Engine
        Performs recovery from the transaction log up to recoverUpToSeqNo (inclusive). This operation will close the engine if the recovery fails.
        Specified by:
        recoverFromTranslog in class Engine
        Parameters:
        translogRecoveryRunner - the translog recovery runner
        recoverUpToSeqNo - the upper bound, inclusive, of sequence number to be recovered
        Throws:
        java.io.IOException
      • skipTranslogRecovery

        public void skipTranslogRecovery()
        Description copied from class: Engine
        Do not replay translog operations, but make the engine be ready.
        Specified by:
        skipTranslogRecovery in class Engine
      • isTranslogSyncNeeded

        public boolean isTranslogSyncNeeded()
        Description copied from class: Engine
        Checks if the underlying storage sync is required.
        Specified by:
        isTranslogSyncNeeded in class Engine
      • ensureTranslogSynced

        public boolean ensureTranslogSynced​(java.util.stream.Stream<Translog.Location> locations)
                                     throws java.io.IOException
        Description copied from class: Engine
        Ensures that all locations in the given stream have been written to the underlying storage.
        Specified by:
        ensureTranslogSynced in class Engine
        Throws:
        java.io.IOException
      • syncTranslog

        public void syncTranslog()
                          throws java.io.IOException
        Specified by:
        syncTranslog in class Engine
        Throws:
        java.io.IOException
      • readHistoryOperations

        public Translog.Snapshot readHistoryOperations​(java.lang.String source,
                                                       MapperService mapperService,
                                                       long startingSeqNo)
                                                throws java.io.IOException
        Creates a new history snapshot for reading operations since the provided seqno. The returned snapshot can be retrieved from either Lucene index or translog files.
        Specified by:
        readHistoryOperations in class Engine
        Throws:
        java.io.IOException
      • estimateNumberOfHistoryOperations

        public int estimateNumberOfHistoryOperations​(java.lang.String source,
                                                     MapperService mapperService,
                                                     long startingSeqNo)
                                              throws java.io.IOException
        Returns the estimated number of history operations whose seq# at least the provided seq# in this engine.
        Specified by:
        estimateNumberOfHistoryOperations in class Engine
        Throws:
        java.io.IOException
      • getHistoryUUID

        public java.lang.String getHistoryUUID()
        Description copied from class: Engine
        returns the history uuid for the engine
        Specified by:
        getHistoryUUID in class Engine
      • getWritingBytes

        public long getWritingBytes()
        Returns how many bytes we are currently moving from indexing buffer to segments on disk
        Specified by:
        getWritingBytes in class Engine
      • assertPrimaryCanOptimizeAddDocument

        protected boolean assertPrimaryCanOptimizeAddDocument​(Engine.Index index)
      • assertPrimaryIncomingSequenceNumber

        protected boolean assertPrimaryIncomingSequenceNumber​(Engine.Operation.Origin origin,
                                                              long seqNo)
      • index

        public Engine.IndexResult index​(Engine.Index index)
                                 throws java.io.IOException
        Description copied from class: Engine
        Perform document index operation on the engine
        Specified by:
        index in class Engine
        Parameters:
        index - operation to perform
        Returns:
        Engine.IndexResult containing updated translog location, version and document specific failures Note: engine level failures (i.e. persistent engine failures) are thrown
        Throws:
        java.io.IOException
      • delete

        public Engine.DeleteResult delete​(Engine.Delete delete)
                                   throws java.io.IOException
        Description copied from class: Engine
        Perform document delete operation on the engine
        Specified by:
        delete in class Engine
        Parameters:
        delete - operation to perform
        Returns:
        Engine.DeleteResult containing updated translog location, version and document specific failures Note: engine level failures (i.e. persistent engine failures) are thrown
        Throws:
        java.io.IOException
      • assertNonPrimaryOrigin

        protected boolean assertNonPrimaryOrigin​(Engine.Operation operation)
      • maybePruneDeletes

        public void maybePruneDeletes()
        Description copied from class: Engine
        Tries to prune buffered deletes from the version map.
        Specified by:
        maybePruneDeletes in class Engine
      • preFlightCheckForNoOp

        protected java.util.Optional<java.lang.Exception> preFlightCheckForNoOp​(Engine.NoOp noOp)
                                                                         throws java.io.IOException
        Executes a pre-flight check for a given NoOp. If this method returns a non-empty result, the engine won't process this NoOp and returns a failure.
        Throws:
        java.io.IOException
      • refresh

        public void refresh​(java.lang.String source)
                     throws EngineException
        Description copied from class: Engine
        Synchronously refreshes the engine for new search operations to reflect the latest changes.
        Specified by:
        refresh in class Engine
        Throws:
        EngineException
      • syncFlush

        public Engine.SyncedFlushResult syncFlush​(java.lang.String syncId,
                                                  Engine.CommitId expectedCommitId)
                                           throws EngineException
        Description copied from class: Engine
        Attempts to do a special commit where the given syncID is put into the commit data. The attempt succeeds if there are not pending writes in lucene and the current point is equal to the expected one.
        Specified by:
        syncFlush in class Engine
        Parameters:
        syncId - id of this sync
        expectedCommitId - the expected value of
        Returns:
        true if the sync commit was made, false o.w.
        Throws:
        EngineException
      • shouldPeriodicallyFlush

        public boolean shouldPeriodicallyFlush()
        Description copied from class: Engine
        Checks if this engine should be flushed periodically. This check is mainly based on the uncommitted translog size and the translog flush threshold setting.
        Specified by:
        shouldPeriodicallyFlush in class Engine
      • flush

        public Engine.CommitId flush​(boolean force,
                                     boolean waitIfOngoing)
                              throws EngineException
        Description copied from class: Engine
        Flushes the state of the engine including the transaction log, clearing memory.
        Specified by:
        flush in class Engine
        Parameters:
        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.
        Returns:
        the commit Id for the resulting commit
        Throws:
        EngineException
      • shouldRollTranslogGeneration

        public boolean shouldRollTranslogGeneration()
        Description copied from class: Engine
        Tests whether or not the translog generation should be rolled to a new generation. This test is based on the size of the current generation compared to the configured generation threshold size.
        Specified by:
        shouldRollTranslogGeneration in class Engine
        Returns:
        true if the current generation should be rolled to a new generation
      • forceMerge

        public void forceMerge​(boolean flush,
                               int maxNumSegments,
                               boolean onlyExpungeDeletes,
                               boolean upgrade,
                               boolean upgradeOnlyAncientSegments)
                        throws EngineException,
                               java.io.IOException
        Description copied from class: Engine
        Triggers a forced merge on this engine
        Specified by:
        forceMerge in class Engine
        Throws:
        EngineException
        java.io.IOException
      • acquireLastIndexCommit

        public Engine.IndexCommitRef acquireLastIndexCommit​(boolean flushFirst)
                                                     throws EngineException
        Description copied from class: Engine
        Snapshots the most recent index and returns a handle to it. If needed will try and "commit" the lucene index to make sure we have a "fresh" copy of the files to snapshot.
        Specified by:
        acquireLastIndexCommit in class Engine
        Parameters:
        flushFirst - indicates whether the engine should flush before returning the snapshot
        Throws:
        EngineException
      • maybeFailEngine

        protected boolean maybeFailEngine​(java.lang.String source,
                                          java.lang.Exception e)
        Description copied from class: Engine
        Check whether the engine should be failed
        Overrides:
        maybeFailEngine in class Engine
      • getLastCommittedSegmentInfos

        protected org.apache.lucene.index.SegmentInfos getLastCommittedSegmentInfos()
        Specified by:
        getLastCommittedSegmentInfos in class Engine
      • getIndexBufferRAMBytesUsed

        public long getIndexBufferRAMBytesUsed()
        Description copied from class: Engine
        How much heap is used that would be freed by a refresh. Note that this may throw AlreadyClosedException.
        Specified by:
        getIndexBufferRAMBytesUsed in class Engine
      • segments

        public java.util.List<Segment> segments​(boolean verbose)
        Description copied from class: Engine
        The list of segments in the engine.
        Specified by:
        segments in class Engine
      • closeNoLock

        protected final void closeNoLock​(java.lang.String reason,
                                         java.util.concurrent.CountDownLatch closedLatch)
        Closes the engine without acquiring the write lock. This should only be called while the write lock is hold or in a disaster condition ie. if the engine is failed.
        Specified by:
        closeNoLock in class Engine
      • getReferenceManager

        protected final org.apache.lucene.search.ReferenceManager<org.apache.lucene.search.IndexSearcher> getReferenceManager​(Engine.SearcherScope scope)
        Specified by:
        getReferenceManager in class Engine
      • getIndexThrottleTimeInMillis

        public long getIndexThrottleTimeInMillis()
        Description copied from class: Engine
        Returns the number of milliseconds this engine was under index throttling.
        Specified by:
        getIndexThrottleTimeInMillis in class Engine
      • commitIndexWriter

        protected void commitIndexWriter​(org.apache.lucene.index.IndexWriter writer,
                                         Translog translog,
                                         @Nullable
                                         java.lang.String syncId)
                                  throws java.io.IOException
        Commits the specified index writer.
        Parameters:
        writer - the index writer to commit
        translog - the translog
        syncId - the sync flush ID (null if not committing a synced flush)
        Throws:
        java.io.IOException - if an I/O exception occurs committing the specfied writer
      • getLastSyncedGlobalCheckpoint

        public long getLastSyncedGlobalCheckpoint()
        Description copied from class: Engine
        Returns the latest global checkpoint value that has been persisted in the underlying storage (i.e. translog's checkpoint)
        Specified by:
        getLastSyncedGlobalCheckpoint in class Engine
      • getLocalCheckpoint

        public long getLocalCheckpoint()
        Specified by:
        getLocalCheckpoint in class Engine
        Returns:
        the local checkpoint for this Engine
      • waitForOpsToComplete

        public void waitForOpsToComplete​(long seqNo)
                                  throws java.lang.InterruptedException
        Description copied from class: Engine
        Waits for all operations up to the provided sequence number to complete.
        Specified by:
        waitForOpsToComplete in class Engine
        Parameters:
        seqNo - the sequence number that the checkpoint must advance to before this method returns
        Throws:
        java.lang.InterruptedException - if the thread was interrupted while blocking on the condition
      • markSeqNoAsSeen

        protected final void markSeqNoAsSeen​(long seqNo)
        Marks the given seq_no as seen and advances the max_seq_no of this engine to at least that value.
      • hasBeenProcessedBefore

        protected final boolean hasBeenProcessedBefore​(Engine.Operation op)
        Checks if the given operation has been processed in this engine or not.
        Returns:
        true if the given operation was processed; otherwise false.
      • getSeqNoStats

        public SeqNoStats getSeqNoStats​(long globalCheckpoint)
        Specified by:
        getSeqNoStats in class Engine
        Returns:
        a SeqNoStats object, using local state and the supplied global checkpoint
      • newChangesSnapshot

        public Translog.Snapshot newChangesSnapshot​(java.lang.String source,
                                                    MapperService mapperService,
                                                    long fromSeqNo,
                                                    long toSeqNo,
                                                    boolean requiredFullRange)
                                             throws java.io.IOException
        Description copied from class: Engine
        Creates a new history snapshot from Lucene for reading operations whose seqno in the requesting seqno range (both inclusive). This feature requires soft-deletes enabled. If soft-deletes are disabled, this method will throw an IllegalStateException.
        Specified by:
        newChangesSnapshot in class Engine
        Throws:
        java.io.IOException
      • hasCompleteOperationHistory

        public boolean hasCompleteOperationHistory​(java.lang.String source,
                                                   MapperService mapperService,
                                                   long startingSeqNo)
                                            throws java.io.IOException
        Description copied from class: Engine
        Checks if this engine has every operations since startingSeqNo(inclusive) in its history (either Lucene or translog)
        Specified by:
        hasCompleteOperationHistory in class Engine
        Throws:
        java.io.IOException
      • acquireRetentionLockForPeerRecovery

        public java.io.Closeable acquireRetentionLockForPeerRecovery()
        Description copied from class: Engine
        Acquires a lock on the translog files and Lucene soft-deleted documents to prevent them from being trimmed
        Specified by:
        acquireRetentionLockForPeerRecovery in class Engine
      • isRecovering

        public boolean isRecovering()
        Description copied from class: Engine
        Returns true iff this engine is currently recovering from translog.
        Overrides:
        isRecovering in class Engine
      • refreshIfNeeded

        protected final void refreshIfNeeded​(java.lang.String source,
                                             long requestingSeqNo)
        Refresh this engine **internally** iff the requesting seq_no is greater than the last refreshed checkpoint.
      • getMaxSeenAutoIdTimestamp

        public final long getMaxSeenAutoIdTimestamp()
        Description copied from class: Engine
        Returns the maximum auto_id_timestamp of all append-only index requests have been processed by this engine or the auto_id_timestamp received from its primary shard via Engine.updateMaxUnsafeAutoIdTimestamp(long). Notes this method returns the auto_id_timestamp of all append-only requests, not max_unsafe_auto_id_timestamp.
        Overrides:
        getMaxSeenAutoIdTimestamp in class Engine
      • updateMaxUnsafeAutoIdTimestamp

        public final void updateMaxUnsafeAutoIdTimestamp​(long newTimestamp)
        Description copied from class: Engine
        Forces this engine to advance its max_unsafe_auto_id_timestamp marker to at least the given timestamp. The engine will disable optimization for all append-only whose timestamp at most newTimestamp.
        Specified by:
        updateMaxUnsafeAutoIdTimestamp in class Engine
      • initializeMaxSeqNoOfUpdatesOrDeletes

        public void initializeMaxSeqNoOfUpdatesOrDeletes()
        Description copied from class: Engine
        A primary shard calls this method once to initialize the max_seq_no_of_updates marker using the max_seq_no from Lucene index and translog before replaying the local translog in its local recovery.
        Specified by:
        initializeMaxSeqNoOfUpdatesOrDeletes in class Engine