Class 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.
  • Field Details

    • tracker

      public final Tracker tracker
  • Method Details

    • offline

      public static LifecycleTransaction offline(OperationType operationType, SSTableReader reader)
      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

      public static LifecycleTransaction offline(OperationType operationType)
      construct an empty Transaction with no existing readers
    • log

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

      public OperationType opType()
      Specified by:
      opType in interface LifecycleNewTracker
      Returns:
      the type of operation tracking these sstables
    • opId

      public TimeUUID opId()
    • doPrepare

      public void doPrepare()
      Description copied from class: Transactional.AbstractTransactional
      Do any preparatory work prior to commit. This method should throw any exceptions that can be encountered during the finalization of the behaviour.
      Specified by:
      doPrepare in class Transactional.AbstractTransactional
    • doCommit

      public Throwable doCommit(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 Throwable doAbort(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
    • doPostCleanup

      protected Throwable doPostCleanup(Throwable accumulate)
      Description copied from class: Transactional.AbstractTransactional
      perform an exception-safe post-abort cleanup
      Overrides:
      doPostCleanup in class Transactional.AbstractTransactional
    • isOffline

      public boolean isOffline()
      Specified by:
      isOffline in interface ILifecycleTransaction
    • 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
    • update

      public void update(Collection<SSTableReader> readers, boolean original)
      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(Runnable fn)
    • runOnAbort

      public void runOnAbort(Runnable fn)
    • obsoleteOriginals

      public void obsoleteOriginals()
      obsolete every file in the original transaction
      Specified by:
      obsoleteOriginals in interface ILifecycleTransaction
    • current

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

      public 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
    • isObsolete

      public boolean isObsolete(SSTableReader reader)
      indicates if the reader has been marked for obsoletion
      Specified by:
      isObsolete 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(Iterable<SSTableReader> cancels)
      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

      public SSTableReader onlyOne()
    • 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 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 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.
    • state

    • toString

      public String toString()
      Overrides:
      toString in class Object