Class LifecycleTransaction

  • All Implemented Interfaces:
    java.lang.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.
    • Field Detail

      • tracker

        public final Tracker tracker
    • Method Detail

      • log

        public org.apache.cassandra.db.lifecycle.LogTransaction log()
      • doCommit

        public java.lang.Throwable doCommit​(java.lang.Throwable accumulate)
        point of no return: commit all changes, but leave all readers marked as compacting
        Specified by:
        doCommit in class Transactional.AbstractTransactional
      • doAbort

        public java.lang.Throwable doAbort​(java.lang.Throwable accumulate)
        undo all of the changes made by this transaction, resetting the state to its original form
        Specified by:
        doAbort in class Transactional.AbstractTransactional
      • 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:
        checkpoint in interface ILifecycleTransaction
      • update

        public void update​(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. a reader guarded by this transaction
        Specified by:
        update in interface ILifecycleTransaction
      • obsolete

        public void obsolete​(SSTableReader reader)
        mark this reader as for obsoletion : on checkpoint() the reader will be removed from the live set
        Specified by:
        obsolete in interface ILifecycleTransaction
      • runOnCommit

        public void runOnCommit​(java.lang.Runnable fn)
      • runOnAbort

        public void runOnAbort​(java.lang.Runnable fn)
      • current

        public java.lang.Iterable<SSTableReader> current()
        returns the currently visible readers managed by this transaction
      • originals

        public java.util.Set<SSTableReader> 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:
        originals in interface ILifecycleTransaction
      • current

        public SSTableReader current​(SSTableReader reader)
        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:
        current in interface ILifecycleTransaction
      • cancel

        public void cancel​(SSTableReader cancel)
        remove the reader from the set we're modifying
      • cancel

        public void cancel​(java.lang.Iterable<SSTableReader> cancels)
        remove the readers from the set we're modifying
      • split

        public LifecycleTransaction split​(java.util.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 used
      • trackNew

        public void trackNew​(SSTable table)
        Description copied from interface: LifecycleNewTracker
        Called when a new table is about to be created, so that this table can be tracked by a transaction.
        Specified by:
        trackNew in interface LifecycleNewTracker
        Parameters:
        table - - the new table to be tracked
      • untrackNew

        public void untrackNew​(SSTable table)
        Description copied from interface: LifecycleNewTracker
        Called when a new table is no longer required, so that this table can be untracked by a transaction.
        Specified by:
        untrackNew in interface LifecycleNewTracker
        Parameters:
        table - - the table to be untracked
      • removeUnfinishedLeftovers

        public static boolean removeUnfinishedLeftovers​(ColumnFamilyStore cfs)
      • removeUnfinishedLeftovers

        public static boolean removeUnfinishedLeftovers​(TableMetadata metadata)
      • getFiles

        public static java.util.List<File> getFiles​(java.nio.file.Path folder,
                                                    java.util.function.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 scan
        onTxnErr - - how to handle a failure to read a txn log file
        filter - - 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.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object