Class JDBCJournalImpl
java.lang.Object
org.apache.activemq.artemis.jdbc.store.drivers.AbstractJDBCDriver
org.apache.activemq.artemis.jdbc.store.journal.JDBCJournalImpl
- All Implemented Interfaces:
Journal,ActiveMQComponent
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.activemq.artemis.core.journal.Journal
Journal.JournalState -
Field Summary
Fields inherited from class org.apache.activemq.artemis.jdbc.store.drivers.AbstractJDBCDriver
connectionProvider, sqlProvider -
Constructor Summary
ConstructorsConstructorDescriptionJDBCJournalImpl(JDBCConnectionProvider connectionProvider, SQLProvider provider, ScheduledExecutorService scheduledExecutorService, Executor completeExecutor, IOCriticalErrorListener criticalIOErrorListener, long syncDelay) -
Method Summary
Modifier and TypeMethodDescriptionvoidappendAddEvent(long id, byte recordType, Persister persister, Object record, boolean sync, IOCompletion completionCallback) An event is data recorded on the journal, but it won't have any weight or deletes.voidappendAddRecord(long id, byte recordType, byte[] record, boolean sync) voidappendAddRecord(long id, byte recordType, Persister persister, Object record, boolean sync) voidappendAddRecord(long id, byte recordType, Persister persister, Object record, boolean sync, IOCompletion completionCallback) voidappendAddRecordTransactional(long txID, long id, byte recordType, byte[] record) voidappendAddRecordTransactional(long txID, long id, byte recordType, Persister persister, Object record) voidappendCommitRecord(long txID, boolean sync) voidappendCommitRecord(long txID, boolean sync, IOCompletion callback) voidappendCommitRecord(long txID, boolean sync, IOCompletion callback, boolean lineUpContext) append a commit record to thisJournalimplementationvoidappendDeleteRecord(long id, boolean sync) voidappendDeleteRecord(long id, boolean sync, IOCompletion completionCallback) voidappendDeleteRecordTransactional(long txID, long id) voidappendDeleteRecordTransactional(long txID, long id, byte[] record) voidappendDeleteRecordTransactional(long txID, long id, EncodingSupport record) voidappendPrepareRecord(long txID, byte[] transactionData, boolean sync) voidappendPrepareRecord(long txID, EncodingSupport transactionData, boolean sync) 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.voidappendPrepareRecord(long txID, EncodingSupport transactionData, boolean sync, IOCompletion callback) voidappendRollbackRecord(long txID, boolean sync) voidappendRollbackRecord(long txID, boolean sync, IOCompletion callback) voidappendUpdateRecord(long id, byte recordType, byte[] record, boolean sync) voidappendUpdateRecord(long id, byte recordType, Persister persister, Object record, boolean sync) voidappendUpdateRecord(long id, byte recordType, Persister persister, Object record, boolean sync, IOCompletion completionCallback) voidappendUpdateRecordTransactional(long txID, long id, byte recordType, byte[] record) voidappendUpdateRecordTransactional(long txID, long id, byte recordType, Persister persister, Object record) createFilesForBackupSync(long[] fileIds) Reserves journal file IDs, creates the necessary files for synchronization, and places references to these (reserved for sync) files in the map.protected voidvoiddestroy()voidflush()It will make sure there are no more pending operations on the Executors.voidForce the usage of a newJournalFile.intReturns array with allJournalFiles in use.intlongThe max size record that can be stored in the journalintintlongvoidhandleException(List<org.apache.activemq.artemis.jdbc.store.journal.JDBCJournalRecord> recordRef, Throwable e) public for tests only, not through APIbooleanbooleanvoidlineUpContext(IOCompletion callback) load(List<RecordInfo> committedRecords, List<PreparedTransactionInfo> preparedTransactions, TransactionFailureCallback failureCallback, boolean fixBadTX) load(LoaderCallback reloadManager) load(SparseArrayLinkedList<RecordInfo> committedRecords, List<PreparedTransactionInfo> preparedTransactions, TransactionFailureCallback failureCallback, boolean fixBadTX) Load internal data structures and not expose any data.loadSyncOnly(Journal.JournalState state) Load internal data structures, and remain waiting for synchronization to complete.protected voidvoidRestarts file reclaim and compacting on the journal.voidStops any operation that may delete or modify old (stale) data.voidscheduleCompactAndBlock(int timeout) This method will start compact using the compactorExecutor and block up to timeout secondsvoidsetRemoveExtraFilesOnLoad(boolean removeExtraFilesOnLoad) voidstart()voidstop()voidstop(boolean sync) intsync()final voidWrite lock the Journal and write lock the compacting process.final voidUnlock the Journal and the compacting process.voidtryAppendDeleteRecord(long id, boolean sync, JournalUpdateCallback updateCallback, IOCompletion completionCallback) voidtryAppendDeleteRecord(long id, JournalUpdateCallback updateCallback, boolean sync) voidtryAppendUpdateRecord(long id, byte recordType, byte[] record, JournalUpdateCallback updateCallback, boolean sync, boolean replaceableRecord) voidtryAppendUpdateRecord(long id, byte recordType, Persister persister, Object record, boolean sync, boolean replaceableUpdate, JournalUpdateCallback updateCallback, IOCompletion completionCallback) voidtryAppendUpdateRecord(long id, byte recordType, Persister persister, Object record, JournalUpdateCallback updateCallback, boolean sync, boolean replaceableUpdate) Methods inherited from class org.apache.activemq.artemis.jdbc.store.drivers.AbstractJDBCDriver
createTable, getJdbcConnectionProvider, getSqlProvider, setJdbcConnectionProvider, setSqlProviderMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.activemq.artemis.core.server.ActiveMQComponent
asyncStopMethods inherited from interface org.apache.activemq.artemis.core.journal.Journal
appendAddRecord, appendAddRecord, appendAddRecordTransactional, appendUpdateRecord, appendUpdateRecord, appendUpdateRecordTransactional, forceBackup, getCriticalErrorListener, getHistoryFolder, isHistory, load, load, processBackup, processBackupCleanup, replaceableRecord, setCriticalErrorListener, setHistoryFolder, tryAppendUpdateRecord, tryAppendUpdateRecord
-
Constructor Details
-
JDBCJournalImpl
public JDBCJournalImpl(JDBCConnectionProvider connectionProvider, SQLProvider provider, ScheduledExecutorService scheduledExecutorService, Executor completeExecutor, IOCriticalErrorListener criticalIOErrorListener, long syncDelay)
-
-
Method Details
-
setRemoveExtraFilesOnLoad
public void setRemoveExtraFilesOnLoad(boolean removeExtraFilesOnLoad) - Specified by:
setRemoveExtraFilesOnLoadin interfaceJournal
-
isRemoveExtraFilesOnLoad
public boolean isRemoveExtraFilesOnLoad()- Specified by:
isRemoveExtraFilesOnLoadin interfaceJournal
-
appendAddEvent
public void appendAddEvent(long id, byte recordType, Persister persister, Object record, boolean sync, IOCompletion completionCallback) throws Exception Description copied from interface:JournalAn 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.- Specified by:
appendAddEventin interfaceJournal- Throws:
Exception
-
start
- Specified by:
startin interfaceActiveMQComponent- Overrides:
startin classAbstractJDBCDriver- Throws:
SQLException
-
flush
Description copied from interface:JournalIt will make sure there are no more pending operations on the Executors. -
getMaxRecordSize
public long getMaxRecordSize()The max size record that can be stored in the journal- Specified by:
getMaxRecordSizein interfaceJournal- Returns:
- the max size record that can be stored in the journal
-
getWarningRecordSize
public long getWarningRecordSize()- Specified by:
getWarningRecordSizein interfaceJournal
-
createSchema
- Specified by:
createSchemain classAbstractJDBCDriver- Throws:
SQLException
-
prepareStatements
protected void prepareStatements()- Specified by:
prepareStatementsin classAbstractJDBCDriver
-
stop
- Specified by:
stopin interfaceActiveMQComponent- Overrides:
stopin classAbstractJDBCDriver- Throws:
SQLException
-
stop
- Throws:
SQLException
-
destroy
- Overrides:
destroyin classAbstractJDBCDriver- Throws:
Exception
-
sync
public int sync() -
handleException
public void handleException(List<org.apache.activemq.artemis.jdbc.store.journal.JDBCJournalRecord> recordRef, Throwable e) public for tests only, not through API -
appendAddRecord
- Specified by:
appendAddRecordin interfaceJournal- Throws:
Exception
-
appendAddRecord
public void appendAddRecord(long id, byte recordType, Persister persister, Object record, boolean sync) throws Exception - Specified by:
appendAddRecordin interfaceJournal- Throws:
Exception
-
appendAddRecord
public void appendAddRecord(long id, byte recordType, Persister persister, Object record, boolean sync, IOCompletion completionCallback) throws Exception - Specified by:
appendAddRecordin interfaceJournal- Throws:
Exception
-
appendUpdateRecord
public void appendUpdateRecord(long id, byte recordType, byte[] record, boolean sync) throws Exception - Specified by:
appendUpdateRecordin interfaceJournal- Throws:
Exception
-
tryAppendUpdateRecord
public void tryAppendUpdateRecord(long id, byte recordType, byte[] record, JournalUpdateCallback updateCallback, boolean sync, boolean replaceableRecord) throws Exception - Specified by:
tryAppendUpdateRecordin interfaceJournal- Throws:
Exception
-
appendUpdateRecord
public void appendUpdateRecord(long id, byte recordType, Persister persister, Object record, boolean sync) throws Exception - Specified by:
appendUpdateRecordin interfaceJournal- Throws:
Exception
-
tryAppendUpdateRecord
public void tryAppendUpdateRecord(long id, byte recordType, Persister persister, Object record, JournalUpdateCallback updateCallback, boolean sync, boolean replaceableUpdate) throws Exception - Specified by:
tryAppendUpdateRecordin interfaceJournal- Throws:
Exception
-
appendUpdateRecord
public void appendUpdateRecord(long id, byte recordType, Persister persister, Object record, boolean sync, IOCompletion completionCallback) throws Exception - Specified by:
appendUpdateRecordin interfaceJournal- Throws:
Exception
-
tryAppendUpdateRecord
public void tryAppendUpdateRecord(long id, byte recordType, Persister persister, Object record, boolean sync, boolean replaceableUpdate, JournalUpdateCallback updateCallback, IOCompletion completionCallback) throws Exception - Specified by:
tryAppendUpdateRecordin interfaceJournal- Throws:
Exception
-
appendDeleteRecord
- Specified by:
appendDeleteRecordin interfaceJournal- Throws:
Exception
-
tryAppendDeleteRecord
public void tryAppendDeleteRecord(long id, JournalUpdateCallback updateCallback, boolean sync) throws Exception - Specified by:
tryAppendDeleteRecordin interfaceJournal- Throws:
Exception
-
appendDeleteRecord
public void appendDeleteRecord(long id, boolean sync, IOCompletion completionCallback) throws Exception - Specified by:
appendDeleteRecordin interfaceJournal- Throws:
Exception
-
tryAppendDeleteRecord
public void tryAppendDeleteRecord(long id, boolean sync, JournalUpdateCallback updateCallback, IOCompletion completionCallback) throws Exception - Specified by:
tryAppendDeleteRecordin interfaceJournal- Throws:
Exception
-
appendAddRecordTransactional
public void appendAddRecordTransactional(long txID, long id, byte recordType, byte[] record) throws Exception - Specified by:
appendAddRecordTransactionalin interfaceJournal- Throws:
Exception
-
appendAddRecordTransactional
public void appendAddRecordTransactional(long txID, long id, byte recordType, Persister persister, Object record) throws Exception - Specified by:
appendAddRecordTransactionalin interfaceJournal- Throws:
Exception
-
appendUpdateRecordTransactional
public void appendUpdateRecordTransactional(long txID, long id, byte recordType, byte[] record) throws Exception - Specified by:
appendUpdateRecordTransactionalin interfaceJournal- Throws:
Exception
-
appendUpdateRecordTransactional
public void appendUpdateRecordTransactional(long txID, long id, byte recordType, Persister persister, Object record) throws Exception - Specified by:
appendUpdateRecordTransactionalin interfaceJournal- Throws:
Exception
-
appendDeleteRecordTransactional
- Specified by:
appendDeleteRecordTransactionalin interfaceJournal- Throws:
Exception
-
appendDeleteRecordTransactional
public void appendDeleteRecordTransactional(long txID, long id, EncodingSupport record) throws Exception - Specified by:
appendDeleteRecordTransactionalin interfaceJournal- Throws:
Exception
-
appendDeleteRecordTransactional
- Specified by:
appendDeleteRecordTransactionalin interfaceJournal- Throws:
Exception
-
appendCommitRecord
- Specified by:
appendCommitRecordin interfaceJournal- Throws:
Exception
-
appendCommitRecord
- Specified by:
appendCommitRecordin interfaceJournal- Throws:
Exception
-
appendCommitRecord
public void appendCommitRecord(long txID, boolean sync, IOCompletion callback, boolean lineUpContext) throws Exception Description copied from interface:Journalappend a commit record to thisJournalimplementation- Specified by:
appendCommitRecordin interfaceJournallineUpContext- 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) throws Exception Description copied from interface:JournalIf 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:
appendPrepareRecordin interfaceJournaltransactionData- allows you to store any extra supporting user-data related to the transaction- Throws:
Exception
-
appendPrepareRecord
public void appendPrepareRecord(long txID, EncodingSupport transactionData, boolean sync, IOCompletion callback) throws Exception - Specified by:
appendPrepareRecordin interfaceJournal- Throws:
Exception
-
appendPrepareRecord
- Specified by:
appendPrepareRecordin interfaceJournal- Throws:
Exception
-
appendRollbackRecord
- Specified by:
appendRollbackRecordin interfaceJournal- Throws:
Exception
-
appendRollbackRecord
- Specified by:
appendRollbackRecordin interfaceJournal- Throws:
Exception
-
load
-
loadInternalOnly
Description copied from interface:JournalLoad 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.- Specified by:
loadInternalOnlyin interfaceJournal- Throws:
Exception
-
loadSyncOnly
Description copied from interface:JournalLoad internal data structures, and remain waiting for synchronization to complete.- Specified by:
loadSyncOnlyin interfaceJournal- Parameters:
state- the current state of the journal, this parameter ensures consistency.- Throws:
Exception
-
lineUpContext
- Specified by:
lineUpContextin interfaceJournal
-
load
public JournalLoadInformation load(SparseArrayLinkedList<RecordInfo> committedRecords, List<PreparedTransactionInfo> preparedTransactions, TransactionFailureCallback failureCallback, boolean fixBadTX) throws Exception -
load
public JournalLoadInformation load(List<RecordInfo> committedRecords, List<PreparedTransactionInfo> preparedTransactions, TransactionFailureCallback failureCallback, boolean fixBadTX) throws Exception -
getAlignment
- Specified by:
getAlignmentin interfaceJournal- Throws:
Exception
-
getNumberOfRecords
public int getNumberOfRecords()- Specified by:
getNumberOfRecordsin interfaceJournal
-
getUserVersion
public int getUserVersion()- Specified by:
getUserVersionin interfaceJournal
-
createFilesForBackupSync
Description copied from interface:JournalReserves 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.
- Specified by:
createFilesForBackupSyncin interfaceJournal- Parameters:
fileIds- IDs to reserve for synchronization- Returns:
- map to be filled with id and journal file pairs for synchronization
- Throws:
Exception
-
synchronizationLock
public final void synchronizationLock()Description copied from interface:JournalWrite lock the Journal and write lock the compacting process. Necessary only during replication for backup synchronization.- Specified by:
synchronizationLockin interfaceJournal
-
synchronizationUnlock
public final void synchronizationUnlock()Description copied from interface:JournalUnlock the Journal and the compacting process.- Specified by:
synchronizationUnlockin interfaceJournal- See Also:
-
forceMoveNextFile
Description copied from interface:JournalForce the usage of a newJournalFile.- Specified by:
forceMoveNextFilein interfaceJournal- Throws:
Exception
-
getDataFiles
Description copied from interface:JournalReturns array with allJournalFiles in use.- Specified by:
getDataFilesin interfaceJournal- Returns:
- array with all
JournalFiles in use
-
getFileFactory
- Specified by:
getFileFactoryin interfaceJournal
-
getFileSize
public int getFileSize()- Specified by:
getFileSizein interfaceJournal
-
scheduleCompactAndBlock
Description copied from interface:JournalThis method will start compact using the compactorExecutor and block up to timeout seconds- Specified by:
scheduleCompactAndBlockin interfaceJournal- Parameters:
timeout- the timeout in seconds or block forever if<= 0- Throws:
Exception
-
replicationSyncPreserveOldFiles
public void replicationSyncPreserveOldFiles()Description copied from interface:JournalStops 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.
- Specified by:
replicationSyncPreserveOldFilesin interfaceJournal
-
replicationSyncFinished
public void replicationSyncFinished()Description copied from interface:JournalRestarts 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.- Specified by:
replicationSyncFinishedin interfaceJournal
-
isStarted
public boolean isStarted()- Specified by:
isStartedin interfaceActiveMQComponent
-