scala.concurrent.stm

Txn

object Txn

The Txn object provides methods that operate on the current transaction context. These methods are only valid within an atomic block or a transaction life-cycle handler, which is checked at compile time by requiring that an implicit InTxn or InTxnEnd be available.

Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. Txn
  2. AnyRef
  3. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Type Members

  1. case class ExplicitRetryCause(timeoutNanos: Option[Long]) extends TransientRollbackCause with Product with Serializable

    The RollbackCause for an atomic block execution attempt that ended with a call to retry or retryFor.

  2. trait ExternalDecider extends AnyRef

    An ExternalDecider is given the final control over the decision of whether or not to commit a transaction, which allows two-phase commit to be integrated with a single non-transactional resource.

  3. case class OptimisticFailureCause(category: Symbol, trigger: Option[Any]) extends TransientRollbackCause with Product with Serializable

    The RollbackCause for a NestingLevel whose optimistic execution was invalid, and that should be retried.

  4. sealed abstract class PermanentRollbackCause extends RollbackCause

    RollbackCauses for which the failure is permanent and no attempt should be made to retry the underlying atomic block.

  5. sealed abstract class RollbackCause extends AnyRef

    A record of the reason that a atomic block execution attempt was rolled back.

  6. case class RolledBack(cause: RollbackCause) extends Status with Product with Serializable

    The Status for an atomic block execution attempt that is being or that has been cancelled.

  7. sealed abstract class Status extends AnyRef

    The current state of an attempt to execute an atomic block.

  8. sealed abstract class TransientRollbackCause extends RollbackCause

    RollbackCauses for which the failure is transient and another attempt should be made to execute the underlying atomic block.

  9. case class UncaughtExceptionCause(x: Throwable) extends PermanentRollbackCause with Product with Serializable

    The RollbackCause for an atomic block that should not be restarted because it threw an exception.

Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. object Active extends Status with Product with Serializable

    The Status for a transaction nesting level that may perform Ref reads and writes, that is waiting for a child nesting level to complete, or that has been merged into an Active parent nesting level.

  7. object Committed extends Status with Product with Serializable

    The Status for the nesting levels of a transaction that has been committed.

  8. object Committing extends Status with Product with Serializable

    The Status for the nesting levels of a transaction that has decided to commit, but whose Ref writes are not yet visible to other threads.

  9. object Prepared extends Status with Product with Serializable

    The Status for the nesting levels of a transaction that has successfully acquired all write permissions necessary to succeed, and that has delegated the final commit decision to an external decider.

  10. object Preparing extends Status with Product with Serializable

    The Status for the nesting levels of a transaction that are attempting to commit, but for which the outcome is uncertain.

  11. def afterCommit(handler: (Status) ⇒ Unit)(implicit txn: InTxnEnd): Unit

    Arranges for handler to be executed as soon as possible after the current transaction is committed, if this nesting level is part of the overall transaction commit.

    Arranges for handler to be executed as soon as possible after the current transaction is committed, if this nesting level is part of the overall transaction commit. Details:

    • no transaction will be active while the handler is run, but it may access Refs using a new top-level atomic block or .single;
    • the handler runs after all internal locks have been released, so any values read or written in the transaction might already have been changed by another thread before the handler is executed;
    • handlers will be executed in their registration order; and
    • handlers may be registered so long as the current transaction status is not RolledBack or Committed.
  12. def afterCompletion(handler: (Status) ⇒ Unit)(implicit txn: InTxnEnd): Unit

    Arranges for handler to be called as both an after-commit and after-rollback handler.

    Arranges for handler to be called as both an after-commit and after-rollback handler.

    Equivalent to:

    afterRollback(handler)
    afterCommit(handler)
  13. def afterRollback(handler: (Status) ⇒ Unit)(implicit txn: InTxnEnd): Unit

    Arranges for handler to be executed as soon as possible after the current nesting level is rolled back, or runs the handler immediately if the current nesting level's status is already RolledBack.

    Arranges for handler to be executed as soon as possible after the current nesting level is rolled back, or runs the handler immediately if the current nesting level's status is already RolledBack. Details:

    • the handler will be executed during any partial rollback that includes the current nesting level;
    • the handler will be run before any additional attempts to execute the atomic block;
    • handlers will be run in the reverse of their registration order; and
    • handlers may be registered so long as the current transaction status is not Committed.
  14. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  15. def beforeCommit(handler: (InTxn) ⇒ Unit)(implicit txn: InTxn): Unit

    Arranges for handler to be executed as late as possible while the root nesting level of the current transaction is still Active, unless the current nesting level is rolled back.

    Arranges for handler to be executed as late as possible while the root nesting level of the current transaction is still Active, unless the current nesting level is rolled back. Reads, writes and additional nested transactions may be performed inside the handler. Details:

    • it is possible that after handler is run the transaction might still be rolled back;
    • it is okay to call beforeCommit from inside handler, the reentrantly added handler will be included in this before-commit phase; and
    • before-commit handlers will be executed in their registration order.
  16. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  17. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  18. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  19. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  20. def findCurrent(implicit mt: MaybeTxn): Option[InTxn]

    Returns Some(t) if called from inside the static or dynamic scope of the transaction context t, None otherwise.

    Returns Some(t) if called from inside the static or dynamic scope of the transaction context t, None otherwise. If an implicit InTxn is available it may be used.

  21. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  22. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  23. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  24. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  25. final def notify(): Unit

    Definition Classes
    AnyRef
  26. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  27. def retry(implicit txn: InTxn): Nothing

    Rolls back the current nesting level for modular blocking.

    Rolls back the current nesting level for modular blocking. It will be retried, but only after some memory location observed by this transaction has been changed. If any alternatives to this atomic block were provided via orAtomic or atomic.oneOf, then the alternative will be tried before blocking.

    Exceptions thrown
    IllegalStateException

    if the transaction is not active.

  28. def retryFor(timeout: Long, unit: TimeUnit = TimeUnit.MILLISECONDS)(implicit txn: InTxn): Unit

    Causes the transaction to roll back and retry using modular blocking with a timeout, or returns immediately if the timeout has already expired.

    Causes the transaction to roll back and retry using modular blocking with a timeout, or returns immediately if the timeout has already expired. The STM keeps track of the total amount of blocking that has occurred during modular blocking; this time is apportioned among the calls to View.tryAwait and retryFor that are part of the current attempt. retryFor(0) is a no-op.

    Returns only if the timeout has expired.

    timeout

    the maximum amount of time that this retryFor should block, in units of unit.

    unit

    the units in which to measure timeout, by default milliseconds.

  29. def rollback(cause: RollbackCause)(implicit txn: InTxnEnd): Nothing

    Causes the current nesting level to be rolled back due to the specified cause.

    Causes the current nesting level to be rolled back due to the specified cause. This method may only be called by the thread executing the transaction; obtain a NestingLevel instance n and call n.requestRollback(cause) if you wish to doom a transaction from another thread.

    Exceptions thrown
    IllegalStateException

    if the current transaction has already decided to commit.

  30. def setExternalDecider(decider: ExternalDecider)(implicit txn: InTxnEnd): Unit

    (rare) Delegates final decision of the outcome of the transaction to decider if the current nesting level participates in the top-level commit.

    (rare) Delegates final decision of the outcome of the transaction to decider if the current nesting level participates in the top-level commit. This method can succeed with at most one value per top-level transaction.

    Exceptions thrown
    IllegalArgumentException

    if setExternalDecider(d) was previously called in this transaction, d != decider, and the nesting level from which setExternalDecider(d) was called has not rolled back.

    IllegalStateException

    if the current transaction's status is not Active or Preparing

  31. def status(implicit txn: InTxnEnd): Status

    Returns the status of the current nesting level of the current transaction, equivalent to NestingLevel.current.status.

  32. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  33. def toString(): String

    Definition Classes
    AnyRef → Any
  34. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  35. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  36. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  37. def whileCommitting(handler: (InTxnEnd) ⇒ Unit)(implicit txn: InTxnEnd): Unit

    (rare) Arranges for handler to be called after (if) it has been decided that the current transaction will commit, but before the writes made by the transaction have become available to other threads.

    (rare) Arranges for handler to be called after (if) it has been decided that the current transaction will commit, but before the writes made by the transaction have become available to other threads. While-committing handlers can lead to scalability problems, because while this transaction is in the Committing state it might obstruct other transactions. Details:

    • the handler must not access any Refs, even using Ref.single;
    • handlers will be executed in their registration order; and
    • handlers may be registered so long as the current transaction status is not RolledBack or Committed.
  38. def whilePreparing(handler: (InTxnEnd) ⇒ Unit)(implicit txn: InTxnEnd): Unit

    (rare) Arranges for handler to be called after the Ref reads and writes have been checked for serializability, but before the decision has been made to commit or roll back.

    (rare) Arranges for handler to be called after the Ref reads and writes have been checked for serializability, but before the decision has been made to commit or roll back. While-preparing handlers can lead to scalability problems, because while this transaction is in the Preparing state it might obstruct other transactions. Details:

    • the handler must not access any Refs, even using Ref.single;
    • handlers will be executed in their registration order; and
    • handlers may be registered while the transaction is active, or from a while-preparing callback during the Preparing phase.

Inherited from AnyRef

Inherited from Any

Ungrouped