Class LifecycleTransaction
java.lang.Object
org.apache.cassandra.utils.concurrent.Transactional.AbstractTransactional
org.apache.cassandra.db.lifecycle.LifecycleTransaction
- All Implemented Interfaces:
AutoCloseable,ILifecycleTransaction,LifecycleNewTracker,Transactional
public class LifecycleTransaction
extends Transactional.AbstractTransactional
implements ILifecycleTransaction
IMPORTANT: When this object is involved in a transactional graph, for correct behaviour its commit MUST occur before
any others, since it may legitimately fail. This is consistent with the Transactional API, which permits one failing
action to occur at the beginning of the commit phase, but also *requires* that the prepareToCommit() phase only take
actions that can be rolled back.
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface org.apache.cassandra.utils.concurrent.Transactional
Transactional.AbstractTransactional -
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionvoidcancel(Iterable<SSTableReader> cancels) remove the readers from the set we're modifyingvoidcancel(SSTableReader cancel) remove the reader from the set we're modifyingvoidcall when a consistent batch of changes is ready to be made atomically visible these will be exposed in the Tracker atomically, or an exception will be thrown; in this case the transaction should be rolled backcurrent()returns the currently visible readers managed by this transactioncurrent(SSTableReader reader) return the current version of the provided reader, whether or not it is visible or staged; i.e.undo all of the changes made by this transaction, resetting the state to its original formpoint of no return: commit all changes, but leave all readers marked as compactingprotected ThrowabledoPostCleanup(Throwable accumulate) perform an exception-safe post-abort cleanupvoidDo any preparatory work prior to commit.getFiles(Path folder, BiPredicate<File, Directories.FileType> filter, Directories.OnTxnErr onTxnErr) Get the files in the folder specified, provided that the filter returns true.booleanisObsolete(SSTableReader reader) indicates if the reader has been marked for obsoletionbooleanorg.apache.cassandra.db.lifecycle.LogTransactionlog()voidobsolete(SSTableReader reader) mark this reader as for obsoletion : on checkpoint() the reader will be removed from the live setvoidobsolete every file in the original transactionstatic LifecycleTransactionoffline(OperationType operationType) construct an empty Transaction with no existing readersstatic LifecycleTransactionoffline(OperationType operationType, Collection<SSTableReader> readers) construct a Transaction for use in an offline operationstatic LifecycleTransactionoffline(OperationType operationType, SSTableReader reader) construct a Transaction for use in an offline operationonlyOne()opId()opType()the set of readers guarded by this transaction _in their original instance/state_ call current(SSTableReader) on any reader in this set to get the latest instancestatic booleanstatic booleanremoveUnfinishedLeftovers(TableMetadata metadata) static voidRetry all deletions that failed the first time around (presumably b/c the sstable was still mmap'd.) Useful because there are times when we know GC has been invoked; also exposed as an mbean.voidrunOnAbort(Runnable fn) voidrunOnCommit(Runnable fn) split(Collection<SSTableReader> readers) remove the provided readers from this Transaction, and return a new Transaction to manage them only permitted to be called if the current Transaction has never been usedstate(SSTableReader reader) toString()voidCalled when a new table is about to be created, so that this table can be tracked by a transaction.voiduntrackNew(SSTable table) Called when a new table is no longer required, so that this table can be untracked by a transaction.voidupdate(Collection<SSTableReader> readers, boolean original) voidupdate(SSTableReader reader, boolean original) update a reader: if !original, this is a reader that is being introduced by this transaction; otherwise it must be in the originals() set, i.e.static voidDeletions run on the nonPeriodicTasks executor, (both failedDeletions or global tidiers in SSTableReader) so by scheduling a new empty task and waiting for it we ensure any prior deletion has completed.Methods inherited from class org.apache.cassandra.utils.concurrent.Transactional.AbstractTransactional
abort, abort, close, commit, commit, doPreCleanup, finish, prepareToCommit, stateMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.cassandra.utils.concurrent.Transactional
abort, close, commit, prepareToCommit
-
Field Details
-
tracker
-
-
Method Details
-
offline
construct a Transaction for use in an offline operation -
offline
public static LifecycleTransaction offline(OperationType operationType, Collection<SSTableReader> readers) construct a Transaction for use in an offline operation -
offline
construct an empty Transaction with no existing readers -
log
public org.apache.cassandra.db.lifecycle.LogTransaction log() -
opType
- Specified by:
opTypein interfaceLifecycleNewTracker- Returns:
- the type of operation tracking these sstables
-
opId
-
doPrepare
public void doPrepare()Description copied from class:Transactional.AbstractTransactionalDo any preparatory work prior to commit. This method should throw any exceptions that can be encountered during the finalization of the behaviour.- Specified by:
doPreparein classTransactional.AbstractTransactional
-
doCommit
point of no return: commit all changes, but leave all readers marked as compacting- Specified by:
doCommitin classTransactional.AbstractTransactional
-
doAbort
undo all of the changes made by this transaction, resetting the state to its original form- Specified by:
doAbortin classTransactional.AbstractTransactional
-
doPostCleanup
Description copied from class:Transactional.AbstractTransactionalperform an exception-safe post-abort cleanup- Overrides:
doPostCleanupin classTransactional.AbstractTransactional
-
isOffline
public boolean isOffline()- Specified by:
isOfflinein interfaceILifecycleTransaction
-
checkpoint
public void checkpoint()call when a consistent batch of changes is ready to be made atomically visible these will be exposed in the Tracker atomically, or an exception will be thrown; in this case the transaction should be rolled back- Specified by:
checkpointin interfaceILifecycleTransaction
-
update
update a reader: if !original, this is a reader that is being introduced by this transaction; otherwise it must be in the originals() set, i.e. a reader guarded by this transaction- Specified by:
updatein interfaceILifecycleTransaction
-
update
- Specified by:
updatein interfaceILifecycleTransaction
-
obsolete
mark this reader as for obsoletion : on checkpoint() the reader will be removed from the live set- Specified by:
obsoletein interfaceILifecycleTransaction
-
runOnCommit
-
runOnAbort
-
obsoleteOriginals
public void obsoleteOriginals()obsolete every file in the original transaction- Specified by:
obsoleteOriginalsin interfaceILifecycleTransaction
-
current
returns the currently visible readers managed by this transaction -
originals
the set of readers guarded by this transaction _in their original instance/state_ call current(SSTableReader) on any reader in this set to get the latest instance- Specified by:
originalsin interfaceILifecycleTransaction
-
isObsolete
indicates if the reader has been marked for obsoletion- Specified by:
isObsoletein interfaceILifecycleTransaction
-
current
return the current version of the provided reader, whether or not it is visible or staged; i.e. returns the first version present by testing staged, logged and originals in order.- Specified by:
currentin interfaceILifecycleTransaction
-
cancel
remove the reader from the set we're modifying -
cancel
remove the readers from the set we're modifying -
split
remove the provided readers from this Transaction, and return a new Transaction to manage them only permitted to be called if the current Transaction has never been used -
onlyOne
-
trackNew
Description copied from interface:LifecycleNewTrackerCalled when a new table is about to be created, so that this table can be tracked by a transaction.- Specified by:
trackNewin interfaceLifecycleNewTracker- Parameters:
table- - the new table to be tracked
-
untrackNew
Description copied from interface:LifecycleNewTrackerCalled when a new table is no longer required, so that this table can be untracked by a transaction.- Specified by:
untrackNewin interfaceLifecycleNewTracker- Parameters:
table- - the table to be untracked
-
removeUnfinishedLeftovers
-
removeUnfinishedLeftovers
-
getFiles
public static List<File> getFiles(Path folder, BiPredicate<File, Directories.FileType> filter, Directories.OnTxnErr onTxnErr) Get the files in the folder specified, provided that the filter returns true. A filter is given each file and its type, and decides which files should be returned and which should be discarded. To classify files into their type, we read transaction log files. Should we fail to read these log files after a few times, we look at onTxnErr to determine what to do.- Parameters:
folder- - the folder to scanonTxnErr- - how to handle a failure to read a txn log filefilter- - A function that receives each file and its type, it should return true to have the file returned- Returns:
- - the list of files that were scanned and for which the filter returned true
-
rescheduleFailedDeletions
public static void rescheduleFailedDeletions()Retry all deletions that failed the first time around (presumably b/c the sstable was still mmap'd.) Useful because there are times when we know GC has been invoked; also exposed as an mbean. -
waitForDeletions
public static void waitForDeletions()Deletions run on the nonPeriodicTasks executor, (both failedDeletions or global tidiers in SSTableReader) so by scheduling a new empty task and waiting for it we ensure any prior deletion has completed. -
state
-
toString
-