Class GammaTxnConfig

java.lang.Object
org.multiverse.stms.gamma.transactions.GammaTxnConfig
All Implemented Interfaces:
TxnConfig, MultiverseConstants, GammaConstants

public final class GammaTxnConfig extends Object implements TxnConfig, GammaConstants
A configuration object that contains the configuration for a GammaTxn.

GammaTxnConfig object is considered to be immutable. The only mutable part if the speculative configuration that can get upgraded if enabled and speculations failed.

  • Field Details

    • idGenerator

      public static final AtomicLong idGenerator
    • speculativeConfiguration

      public final AtomicReference<SpeculativeGammaConfiguration> speculativeConfiguration
    • stm

      public final GammaStm stm
    • globalConflictCounter

      public final GlobalConflictCounter globalConflictCounter
    • propagationLevel

      public PropagationLevel propagationLevel
    • isolationLevel

      public IsolationLevel isolationLevel
    • writeSkewAllowed

      public boolean writeSkewAllowed
    • inconsistentReadAllowed

      public boolean inconsistentReadAllowed
    • readLockMode

      public LockMode readLockMode
    • writeLockMode

      public LockMode writeLockMode
    • readLockModeAsInt

      public int readLockModeAsInt
    • writeLockModeAsInt

      public int writeLockModeAsInt
    • familyName

      public String familyName
    • isAnonymous

      public boolean isAnonymous
    • interruptible

      public boolean interruptible
    • readonly

      public boolean readonly
    • spinCount

      public int spinCount
    • dirtyCheck

      public boolean dirtyCheck
    • minimalArrayTreeSize

      public int minimalArrayTreeSize
    • trackReads

      public boolean trackReads
    • blockingAllowed

      public boolean blockingAllowed
    • maxRetries

      public int maxRetries
    • speculative

      public boolean speculative
    • maxFixedLengthTransactionSize

      public int maxFixedLengthTransactionSize
    • backoffPolicy

      public BackoffPolicy backoffPolicy
    • timeoutNs

      public long timeoutNs
    • traceLevel

      public TraceLevel traceLevel
    • controlFlowErrorsReused

      public boolean controlFlowErrorsReused
    • isFat

      public boolean isFat
    • maximumPoorMansConflictScanLength

      public int maximumPoorMansConflictScanLength
    • permanentListeners

      public ArrayList<TxnListener> permanentListeners
    • unrepeatableReadAllowed

      public boolean unrepeatableReadAllowed
  • Constructor Details

    • GammaTxnConfig

      public GammaTxnConfig(GammaStm stm)
    • GammaTxnConfig

      public GammaTxnConfig(GammaStm stm, GammaStmConfig config)
    • GammaTxnConfig

      private GammaTxnConfig(GammaTxnConfig config)
      Makes a clone of the given GammaTxnConfig.
      Parameters:
      config - the GammaTxnConfig to clone.
    • GammaTxnConfig

      public GammaTxnConfig(GammaStm stm, int maxFixedLengthTransactionSize)
  • Method Details

    • getReadLockMode

      public LockMode getReadLockMode()
      Description copied from interface: TxnConfig
      Gets the current LockMode for all reads.
      Specified by:
      getReadLockMode in interface TxnConfig
      Returns:
      the current LockMode for all reads.
      See Also:
    • getWriteLockMode

      public LockMode getWriteLockMode()
      Description copied from interface: TxnConfig
      Gets the current LockMode for all writes.
      Specified by:
      getWriteLockMode in interface TxnConfig
      Returns:
      the current LockMode for all writes.
      See Also:
    • getIsolationLevel

      public IsolationLevel getIsolationLevel()
      Description copied from interface: TxnConfig
      Gets the IsolationLevel used. With the IsolationLevel you have control on the isolated behavior between transactions.
      Specified by:
      getIsolationLevel in interface TxnConfig
      Returns:
      the IsolationLevel.
      See Also:
    • isControlFlowErrorsReused

      public boolean isControlFlowErrorsReused()
      Description copied from interface: TxnConfig
      Checks if the ControlFlowError is cached or a new one is used.

      Exception creation can be very expensive, so by default the ControlFlowError is reused, but this can be problematic when debugging.

      Specified by:
      isControlFlowErrorsReused in interface TxnConfig
      Returns:
      true if the ControlFlowError is reused.
      See Also:
    • getSpeculativeConfiguration

      public SpeculativeGammaConfiguration getSpeculativeConfiguration()
    • getTimeoutNs

      public long getTimeoutNs()
      Description copied from interface: TxnConfig
      Returns the total timeout in nanoseconds. Long.MAX_VALUE indicates that there is no timeout.
      Specified by:
      getTimeoutNs in interface TxnConfig
      Returns:
      the total remaining timeout.
      See Also:
    • getTraceLevel

      public TraceLevel getTraceLevel()
      Description copied from interface: TxnConfig
      Returns the TraceLevel. With the TraceLevel you have control on the logging.
      Specified by:
      getTraceLevel in interface TxnConfig
      Returns:
      the TraceLevel.
      See Also:
    • isInterruptible

      public boolean isInterruptible()
      Description copied from interface: TxnConfig
      Checks if the Txn can be interrupted if it is blocking.
      Specified by:
      isInterruptible in interface TxnConfig
      Returns:
      true if the Txn can be interrupted if it is blocking, false otherwise.
      See Also:
    • getBackoffPolicy

      public BackoffPolicy getBackoffPolicy()
      Description copied from interface: TxnConfig
      Returns the BackoffPolicy used by the Stm when a transaction conflicts with another transaction.
      Specified by:
      getBackoffPolicy in interface TxnConfig
      Returns:
      the BackoffPolicy used.
      See Also:
    • isSpeculative

      public boolean isSpeculative()
      Description copied from interface: TxnConfig
      Checks if speculative configuration is enabled. When enabled the STM is able to select better performing/scalable implementations at the cost of some SpeculativeConfigurationError. This will be caught by the TxnExecutor and the transaction will be retried, so in most cases this is not something to worry about, but it can be confusing in the beginning because of unexpected failures in the execution of transactions.
      Specified by:
      isSpeculative in interface TxnConfig
      Returns:
      true if speculative configuration is enabled.
      See Also:
    • getFamilyName

      public String getFamilyName()
      Description copied from interface: TxnConfig
      Returns the family name of this Txn. Every transaction in principle should have a family name. This information can be used for debugging/logging purposes but also other techniques that rely to know something about similar types of transactions like profiling.
      Specified by:
      getFamilyName in interface TxnConfig
      Returns:
      the familyName. The returned value can be null.
      See Also:
    • isReadonly

      public boolean isReadonly()
      Description copied from interface: TxnConfig
      Checks if this Txn is readonly. With a readonly transaction you can prevent any updates or new objects being created.
      Specified by:
      isReadonly in interface TxnConfig
      Returns:
      true if readonly, false otherwise.
      See Also:
    • getSpinCount

      public int getSpinCount()
      Description copied from interface: TxnConfig
      Returns the maximum number of times the transaction is allowed to spin on a read to become readable (perhaps it is locked).
      Specified by:
      getSpinCount in interface TxnConfig
      Returns:
      the maximum number of spins
      See Also:
    • isDirtyCheckEnabled

      public boolean isDirtyCheckEnabled()
      Description copied from interface: TxnConfig
      Checks if dirty check is enabled on writes when a transaction commits. Turning of saves time, but forces writes that cause no change.
      Specified by:
      isDirtyCheckEnabled in interface TxnConfig
      Returns:
      true of dirty check is enabled.
      See Also:
    • getStm

      public GammaStm getStm()
      Description copied from interface: TxnConfig
      Returns the Stm that creates transactions based on this configuration.
      Specified by:
      getStm in interface TxnConfig
      Returns:
      the stm.
    • getGlobalConflictCounter

      public GlobalConflictCounter getGlobalConflictCounter()
    • isReadTrackingEnabled

      public boolean isReadTrackingEnabled()
      Description copied from interface: TxnConfig
      Checks if this transaction does automatic read tracking. Read tracking is needed for blocking transactions, but also for writeskew detection. Disadvantage of read tracking is that it is more expensive because the reads not to be registered on some datastructure so that they are tracked.
      Specified by:
      isReadTrackingEnabled in interface TxnConfig
      Returns:
      true if the transaction does automatic read tracking, false otherwise.
      See Also:
    • isBlockingAllowed

      public boolean isBlockingAllowed()
      Description copied from interface: TxnConfig
      If an explicit retry (so a blocking transaction) is allowed. With this property one can prevent that a Txn is able to block waiting for some change.
      Specified by:
      isBlockingAllowed in interface TxnConfig
      Returns:
      true if explicit retry is allowed, false otherwise.
      See Also:
    • getMaxRetries

      public int getMaxRetries()
      Description copied from interface: TxnConfig
      Returns the maximum number of times this Txn be retried before failing. The returned value will always be equal or larger than 0. If the value is getAndSet high and you are encountering a lot of TooManyRetryExceptions it could be that the objects are just not concurrent enough.
      Specified by:
      getMaxRetries in interface TxnConfig
      Returns:
      the maxRetries.
      See Also:
    • getPropagationLevel

      public PropagationLevel getPropagationLevel()
      Description copied from interface: TxnConfig
      Returns the PropagationLevel used. With the PropagationLevel you have control on how the transaction is dealing with nesting of transactions.
      Specified by:
      getPropagationLevel in interface TxnConfig
      Returns:
      the PropagationLevel used.
      See Also:
    • getPermanentListeners

      public List<TxnListener> getPermanentListeners()
      Description copied from interface: TxnConfig
      Returns an unmodifiable list containing all permanent TxnListener.
      Specified by:
      getPermanentListeners in interface TxnConfig
      Returns:
      unmodifiable List containing all permanent TxnListeners.
      See Also:
    • updateSpeculativeConfigurationToUseNonRefType

      public void updateSpeculativeConfigurationToUseNonRefType()
    • updateSpeculativeConfigurationToUseListeners

      public void updateSpeculativeConfigurationToUseListeners()
    • updateSpeculativeConfigureToUseAbortOnly

      public void updateSpeculativeConfigureToUseAbortOnly()
    • updateSpeculativeConfigurationToUseCommute

      public void updateSpeculativeConfigurationToUseCommute()
    • updateSpeculativeConfigurationToUseExplicitLocking

      public void updateSpeculativeConfigurationToUseExplicitLocking()
    • updateSpeculativeConfigurationToUseConstructedObjects

      public void updateSpeculativeConfigurationToUseConstructedObjects()
    • updateSpeculativeConfigurationToUseRichMansConflictScan

      public void updateSpeculativeConfigurationToUseRichMansConflictScan()
    • updateSpeculativeConfigurationToUseMinimalTransactionLength

      public void updateSpeculativeConfigurationToUseMinimalTransactionLength(int newLength)
    • updateSpeculativeConfigurationToUseEnsure

      public void updateSpeculativeConfigurationToUseEnsure()
    • init

      public GammaTxnConfig init()
    • isFat

      private boolean isFat()
    • setTimeoutNs

      public GammaTxnConfig setTimeoutNs(long timeoutNs)
    • setFamilyName

      public GammaTxnConfig setFamilyName(String familyName)
    • setMaxRetries

      public GammaTxnConfig setMaxRetries(int maxRetries)
    • setMaximumPoorMansConflictScanLength

      public GammaTxnConfig setMaximumPoorMansConflictScanLength(int maximumPoorMansConflictScanLength)
    • setReadTrackingEnabled

      public GammaTxnConfig setReadTrackingEnabled(boolean trackReads)
    • setSpeculative

      public GammaTxnConfig setSpeculative(boolean speculativeConfigEnabled)
    • setReadonly

      public GammaTxnConfig setReadonly(boolean readonly)
    • setDirtyCheckEnabled

      public GammaTxnConfig setDirtyCheckEnabled(boolean dirtyCheck)
    • setBlockingAllowed

      public GammaTxnConfig setBlockingAllowed(boolean blockingAllowed)
    • setInterruptible

      public GammaTxnConfig setInterruptible(boolean interruptible)
    • setControlFlowErrorsReused

      public GammaTxnConfig setControlFlowErrorsReused(boolean controlFlowErrorsReused)
    • setSpinCount

      public GammaTxnConfig setSpinCount(int spinCount)
    • setBackoffPolicy

      public GammaTxnConfig setBackoffPolicy(BackoffPolicy backoffPolicy)
    • setTraceLevel

      public GammaTxnConfig setTraceLevel(TraceLevel traceLevel)
    • setPropagationLevel

      public GammaTxnConfig setPropagationLevel(PropagationLevel propagationLevel)
    • setIsolationLevel

      public GammaTxnConfig setIsolationLevel(IsolationLevel isolationLevel)
    • setWriteLockMode

      public GammaTxnConfig setWriteLockMode(LockMode writeLockMode)
    • setReadLockMode

      public GammaTxnConfig setReadLockMode(LockMode readLockMode)
    • setFat

      public GammaTxnConfig setFat()
    • addPermanentListener

      public GammaTxnConfig addPermanentListener(TxnListener listener)
    • toString

      public String toString()
      Overrides:
      toString in class Object