Class FileWrapperJournal

java.lang.Object
org.apache.activemq.artemis.core.journal.impl.FileWrapperJournal
All Implemented Interfaces:
Journal, org.apache.activemq.artemis.core.server.ActiveMQComponent

public final class FileWrapperJournal extends Object
Journal used at a replicating backup server during the synchronization of data with the 'live' server. It just wraps a single JournalFile.

Its main purpose is to store the data as a Journal would, but without verifying records.

  • Field Details

    • currentFile

      protected volatile JournalFile currentFile
    • fileSize

      protected final int fileSize
    • removeExtraFilesOnLoad

      protected boolean removeExtraFilesOnLoad
  • Constructor Details

  • Method Details

    • replaceableRecord

      public void replaceableRecord(byte recordType)
    • start

      public void start() throws Exception
      Throws:
      Exception
    • stop

      public void stop() throws Exception
      Throws:
      Exception
    • isStarted

      public boolean isStarted()
    • appendAddRecord

      public void appendAddRecord(long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record, boolean sync, IOCompletion callback) throws Exception
      Throws:
      Exception
    • appendAddEvent

      public void appendAddEvent(long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record, boolean sync, IOCompletion callback) throws Exception
      Description copied from interface: Journal
      An event is data recorded on the journal, but it won't have any weight or deletes. It's always ready to be removed. It is useful on recovery data while in use with backup history journal.
      Throws:
      Exception
    • flush

      public void flush() throws Exception
      Description copied from interface: Journal
      It will make sure there are no more pending operations on the Executors.
      Throws:
      Exception
    • getMaxRecordSize

      public long getMaxRecordSize()
      The max size record that can be stored in the journal
      Returns:
      the max size record that can be stored in the journal
    • getWarningRecordSize

      public long getWarningRecordSize()
    • appendDeleteRecord

      public void appendDeleteRecord(long id, boolean sync, IOCompletion callback) throws Exception
      Throws:
      Exception
    • tryAppendDeleteRecord

      public void tryAppendDeleteRecord(long id, boolean sync, JournalUpdateCallback updateCallback, IOCompletion callback) throws Exception
      Throws:
      Exception
    • appendDeleteRecordTransactional

      public void appendDeleteRecordTransactional(long txID, long id, EncodingSupport record) throws Exception
      Throws:
      Exception
    • appendAddRecordTransactional

      public void appendAddRecordTransactional(long txID, long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record) throws Exception
      Throws:
      Exception
    • appendUpdateRecord

      public void appendUpdateRecord(long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record, boolean sync, IOCompletion callback) throws Exception
      Throws:
      Exception
    • tryAppendUpdateRecord

      public void tryAppendUpdateRecord(long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record, boolean sync, boolean replaceableUpdate, JournalUpdateCallback updateCallback, IOCompletion callback) throws Exception
      Throws:
      Exception
    • appendUpdateRecordTransactional

      public void appendUpdateRecordTransactional(long txID, long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record) throws Exception
      Throws:
      Exception
    • appendCommitRecord

      public void appendCommitRecord(long txID, boolean sync, IOCompletion callback, boolean lineUpContext) throws Exception
      Description copied from interface: Journal
      append a commit record to this Journal implementation
      Parameters:
      lineUpContext - if appendCommitRecord should call a storeLineUp. This is because the caller may have already taken into account
      Throws:
      Exception
    • appendPrepareRecord

      public void appendPrepareRecord(long txID, EncodingSupport transactionData, boolean sync, IOCompletion callback) throws Exception
      Throws:
      Exception
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • appendRollbackRecord

      public void appendRollbackRecord(long txID, boolean sync, IOCompletion callback) throws Exception
      Throws:
      Exception
    • load

      public JournalLoadInformation load(LoaderCallback reloadManager) throws Exception
      Throws:
      Exception
    • loadInternalOnly

      public JournalLoadInformation loadInternalOnly() throws Exception
      Description copied from interface: Journal
      Load internal data structures and not expose any data. This is only useful if you're using the journal but not interested on the current data. Useful in situations where the journal is being replicated, copied... etc.
      Throws:
      Exception
    • lineUpContext

      public void lineUpContext(IOCompletion callback)
    • load

      public JournalLoadInformation load(List<RecordInfo> committedRecords, List<PreparedTransactionInfo> preparedTransactions, TransactionFailureCallback transactionFailure, boolean fixbadtx) throws Exception
      Throws:
      Exception
    • load

      public JournalLoadInformation load(org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList<RecordInfo> committedRecords, List<PreparedTransactionInfo> preparedTransactions, TransactionFailureCallback transactionFailure, boolean fixbadtx) throws Exception
      Throws:
      Exception
    • getAlignment

      public int getAlignment() throws Exception
      Throws:
      Exception
    • getNumberOfRecords

      public int getNumberOfRecords()
    • getUserVersion

      public int getUserVersion()
    • loadSyncOnly

      public JournalLoadInformation loadSyncOnly(Journal.JournalState state) throws Exception
      Description copied from interface: Journal
      Load internal data structures, and remain waiting for synchronization to complete.
      Parameters:
      state - the current state of the journal, this parameter ensures consistency.
      Throws:
      Exception
    • createFilesForBackupSync

      public Map<Long, JournalFile> createFilesForBackupSync(long[] fileIds) throws Exception
      Description copied from interface: Journal
      Reserves journal file IDs, creates the necessary files for synchronization, and places references to these (reserved for sync) files in the map.

      During the synchronization between a replicating server and replica, we reserve in the replica the journal file IDs used in the replicating server. This call also makes sure the files are created empty without any kind of headers added.

      Parameters:
      fileIds - IDs to reserve for synchronization
      Returns:
      map to be filled with id and journal file pairs for synchronization
      Throws:
      Exception
    • synchronizationLock

      public void synchronizationLock()
      Description copied from interface: Journal
      Write lock the Journal and write lock the compacting process. Necessary only during replication for backup synchronization.
    • synchronizationUnlock

      public void synchronizationUnlock()
      Description copied from interface: Journal
      Unlock the Journal and the compacting process.
      See Also:
    • forceMoveNextFile

      public void forceMoveNextFile()
      Description copied from interface: Journal
      Force the usage of a new JournalFile.
    • getDataFiles

      public JournalFile[] getDataFiles()
      Description copied from interface: Journal
      Returns array with all JournalFiles in use.
      Returns:
      array with all JournalFiles in use
    • getFileFactory

      public SequentialFileFactory getFileFactory()
    • scheduleCompactAndBlock

      public void scheduleCompactAndBlock(int timeout) throws Exception
      Description copied from interface: Journal
      This method will start compact using the compactorExecutor and block up to timeout seconds
      Parameters:
      timeout - the timeout in seconds or block forever if <= 0
      Throws:
      Exception
    • replicationSyncPreserveOldFiles

      public void replicationSyncPreserveOldFiles()
      Description copied from interface: Journal
      Stops any operation that may delete or modify old (stale) data.

      Meant to be used during synchronization of data between a replicating server and its replica. Old files must not be compacted or deleted during synchronization.

    • replicationSyncFinished

      public void replicationSyncFinished()
      Description copied from interface: Journal
      Restarts file reclaim and compacting on the journal.

      Meant to be used to revert the effect of Journal.replicationSyncPreserveOldFiles(). it should only be called once the synchronization of the replica and replicating servers is completed.

    • setRemoveExtraFilesOnLoad

      public void setRemoveExtraFilesOnLoad(boolean setting)
      Specified by:
      setRemoveExtraFilesOnLoad in interface Journal
    • isRemoveExtraFilesOnLoad

      public boolean isRemoveExtraFilesOnLoad()
      Specified by:
      isRemoveExtraFilesOnLoad in interface Journal
    • appendAddRecord

      public void appendAddRecord(long id, byte recordType, byte[] record, boolean sync) throws Exception
      Specified by:
      appendAddRecord in interface Journal
      Throws:
      Exception
    • appendAddRecord

      public void appendAddRecord(long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record, boolean sync) throws Exception
      Specified by:
      appendAddRecord in interface Journal
      Throws:
      Exception
    • appendCommitRecord

      public void appendCommitRecord(long txID, boolean sync) throws Exception
      Specified by:
      appendCommitRecord in interface Journal
      Throws:
      Exception
    • appendCommitRecord

      public void appendCommitRecord(long txID, boolean sync, IOCompletion callback) throws Exception
      Specified by:
      appendCommitRecord in interface Journal
      Throws:
      Exception
    • appendUpdateRecord

      public void appendUpdateRecord(long id, byte recordType, byte[] record, boolean sync) throws Exception
      Specified by:
      appendUpdateRecord in interface Journal
      Throws:
      Exception
    • tryAppendUpdateRecord

      public void tryAppendUpdateRecord(long id, byte recordType, byte[] record, JournalUpdateCallback updateCallback, boolean sync, boolean replaceableRecord) throws Exception
      Specified by:
      tryAppendUpdateRecord in interface Journal
      Throws:
      Exception
    • appendUpdateRecordTransactional

      public void appendUpdateRecordTransactional(long txID, long id, byte recordType, byte[] record) throws Exception
      Specified by:
      appendUpdateRecordTransactional in interface Journal
      Throws:
      Exception
    • appendAddRecordTransactional

      public void appendAddRecordTransactional(long txID, long id, byte recordType, byte[] record) throws Exception
      Specified by:
      appendAddRecordTransactional in interface Journal
      Throws:
      Exception
    • appendDeleteRecordTransactional

      public void appendDeleteRecordTransactional(long txID, long id) throws Exception
      Specified by:
      appendDeleteRecordTransactional in interface Journal
      Throws:
      Exception
    • appendPrepareRecord

      public void appendPrepareRecord(long txID, byte[] transactionData, boolean sync) throws Exception
      Specified by:
      appendPrepareRecord in interface Journal
      Throws:
      Exception
    • appendPrepareRecord

      public void appendPrepareRecord(long txID, EncodingSupport transactionData, boolean sync) throws Exception
      Description copied from interface: Journal
      If the system crashed after a prepare was called, it should store information that is required to bring the transaction back to a state it could be committed.
      Specified by:
      appendPrepareRecord in interface Journal
      Parameters:
      transactionData - allows you to store any extra supporting user-data related to the transaction
      Throws:
      Exception
    • appendDeleteRecordTransactional

      public void appendDeleteRecordTransactional(long txID, long id, byte[] record) throws Exception
      Specified by:
      appendDeleteRecordTransactional in interface Journal
      Throws:
      Exception
    • appendUpdateRecord

      public void appendUpdateRecord(long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record, boolean sync) throws Exception
      Specified by:
      appendUpdateRecord in interface Journal
      Throws:
      Exception
    • tryAppendUpdateRecord

      public void tryAppendUpdateRecord(long id, byte recordType, org.apache.activemq.artemis.core.persistence.Persister persister, Object record, JournalUpdateCallback updateCallback, boolean sync, boolean replaceableUpdate) throws Exception
      Specified by:
      tryAppendUpdateRecord in interface Journal
      Throws:
      Exception
    • appendRollbackRecord

      public void appendRollbackRecord(long txID, boolean sync) throws Exception
      Specified by:
      appendRollbackRecord in interface Journal
      Throws:
      Exception
    • appendDeleteRecord

      public void appendDeleteRecord(long id, boolean sync) throws Exception
      Specified by:
      appendDeleteRecord in interface Journal
      Throws:
      Exception
    • tryAppendDeleteRecord

      public void tryAppendDeleteRecord(long id, JournalUpdateCallback updateCallback, boolean sync) throws Exception
      Specified by:
      tryAppendDeleteRecord in interface Journal
      Throws:
      Exception
    • getSyncCallback

      protected SyncIOCompletion getSyncCallback(boolean sync)
    • getFileSize

      public int getFileSize()
      Specified by:
      getFileSize in interface Journal