Class GammaTxnConfig
- java.lang.Object
-
- org.multiverse.stms.gamma.transactions.GammaTxnConfig
-
- All Implemented Interfaces:
TxnConfig
,MultiverseConstants
,GammaConstants
public final class GammaTxnConfig extends java.lang.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 Summary
Fields Modifier and Type Field Description BackoffPolicy
backoffPolicy
boolean
blockingAllowed
boolean
controlFlowErrorsReused
boolean
dirtyCheck
java.lang.String
familyName
GlobalConflictCounter
globalConflictCounter
static java.util.concurrent.atomic.AtomicLong
idGenerator
boolean
inconsistentReadAllowed
boolean
interruptible
boolean
isAnonymous
boolean
isFat
IsolationLevel
isolationLevel
int
maxFixedLengthTransactionSize
int
maximumPoorMansConflictScanLength
int
maxRetries
int
minimalArrayTreeSize
java.util.ArrayList<TxnListener>
permanentListeners
PropagationLevel
propagationLevel
LockMode
readLockMode
int
readLockModeAsInt
boolean
readonly
boolean
speculative
java.util.concurrent.atomic.AtomicReference<SpeculativeGammaConfiguration>
speculativeConfiguration
int
spinCount
GammaStm
stm
long
timeoutNs
TraceLevel
traceLevel
boolean
trackReads
boolean
unrepeatableReadAllowed
LockMode
writeLockMode
int
writeLockModeAsInt
boolean
writeSkewAllowed
-
Fields inherited from interface org.multiverse.stms.gamma.GammaConstants
FAILURE, MASK_CONFLICT, MASK_SUCCESS, MASK_UNREGISTERED, REGISTRATION_DONE, REGISTRATION_NONE, REGISTRATION_NOT_NEEDED, TRANLOCAL_COMMUTING, TRANLOCAL_CONSTRUCTING, TRANLOCAL_READ, TRANLOCAL_WRITE, TRANSACTIONTYPE_FAT_FIXED_LENGTH, TRANSACTIONTYPE_FAT_MONO, TRANSACTIONTYPE_FAT_VARIABLE_LENGTH, TRANSACTIONTYPE_LEAN_FIXED_LENGTH, TRANSACTIONTYPE_LEAN_MONO, TX_ABORTED, TX_ACTIVE, TX_COMMITTED, TX_PREPARED, TYPE_BOOLEAN, TYPE_DOUBLE, TYPE_INT, TYPE_LONG, TYPE_REF, VERSION_UNCOMMITTED
-
Fields inherited from interface org.multiverse.MultiverseConstants
LOCKMODE_EXCLUSIVE, LOCKMODE_NONE, LOCKMODE_READ, LOCKMODE_WRITE, SHAKE_BUGS, SPIN_YIELD, TRACING_ENABLED
-
-
Constructor Summary
Constructors Modifier Constructor Description GammaTxnConfig(GammaStm stm)
GammaTxnConfig(GammaStm stm, int maxFixedLengthTransactionSize)
GammaTxnConfig(GammaStm stm, GammaStmConfig config)
private
GammaTxnConfig(GammaTxnConfig config)
Makes a clone of the given GammaTxnConfig.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description GammaTxnConfig
addPermanentListener(TxnListener listener)
BackoffPolicy
getBackoffPolicy()
Returns the BackoffPolicy used by the Stm when a transaction conflicts with another transaction.java.lang.String
getFamilyName()
Returns the family name of this Txn.GlobalConflictCounter
getGlobalConflictCounter()
IsolationLevel
getIsolationLevel()
Gets the IsolationLevel used.int
getMaxRetries()
Returns the maximum number of times this Txn be retried before failing.java.util.List<TxnListener>
getPermanentListeners()
Returns an unmodifiable list containing all permanent TxnListener.PropagationLevel
getPropagationLevel()
Returns the PropagationLevel used.LockMode
getReadLockMode()
Gets the current LockMode for all reads.SpeculativeGammaConfiguration
getSpeculativeConfiguration()
int
getSpinCount()
Returns the maximum number of times the transaction is allowed to spin on a read to become readable (perhaps it is locked).GammaStm
getStm()
Returns the Stm that creates transactions based on this configuration.long
getTimeoutNs()
Returns the total timeout in nanoseconds.TraceLevel
getTraceLevel()
Returns the TraceLevel.LockMode
getWriteLockMode()
Gets the current LockMode for all writes.GammaTxnConfig
init()
boolean
isBlockingAllowed()
If an explicit retry (so a blocking transaction) is allowed.boolean
isControlFlowErrorsReused()
Checks if theControlFlowError
is cached or a new one is used.boolean
isDirtyCheckEnabled()
Checks if dirty check is enabled on writes when a transaction commits.private boolean
isFat()
boolean
isInterruptible()
Checks if the Txn can be interrupted if it is blocking.boolean
isReadonly()
Checks if this Txn is readonly.boolean
isReadTrackingEnabled()
Checks if this transaction does automatic read tracking.boolean
isSpeculative()
Checks if speculative configuration is enabled.GammaTxnConfig
setBackoffPolicy(BackoffPolicy backoffPolicy)
GammaTxnConfig
setBlockingAllowed(boolean blockingAllowed)
GammaTxnConfig
setControlFlowErrorsReused(boolean controlFlowErrorsReused)
GammaTxnConfig
setDirtyCheckEnabled(boolean dirtyCheck)
GammaTxnConfig
setFamilyName(java.lang.String familyName)
GammaTxnConfig
setFat()
GammaTxnConfig
setInterruptible(boolean interruptible)
GammaTxnConfig
setIsolationLevel(IsolationLevel isolationLevel)
GammaTxnConfig
setMaximumPoorMansConflictScanLength(int maximumPoorMansConflictScanLength)
GammaTxnConfig
setMaxRetries(int maxRetries)
GammaTxnConfig
setPropagationLevel(PropagationLevel propagationLevel)
GammaTxnConfig
setReadLockMode(LockMode readLockMode)
GammaTxnConfig
setReadonly(boolean readonly)
GammaTxnConfig
setReadTrackingEnabled(boolean trackReads)
GammaTxnConfig
setSpeculative(boolean speculativeConfigEnabled)
GammaTxnConfig
setSpinCount(int spinCount)
GammaTxnConfig
setTimeoutNs(long timeoutNs)
GammaTxnConfig
setTraceLevel(TraceLevel traceLevel)
GammaTxnConfig
setWriteLockMode(LockMode writeLockMode)
java.lang.String
toString()
void
updateSpeculativeConfigurationToUseCommute()
void
updateSpeculativeConfigurationToUseConstructedObjects()
void
updateSpeculativeConfigurationToUseEnsure()
void
updateSpeculativeConfigurationToUseExplicitLocking()
void
updateSpeculativeConfigurationToUseListeners()
void
updateSpeculativeConfigurationToUseMinimalTransactionLength(int newLength)
void
updateSpeculativeConfigurationToUseNonRefType()
void
updateSpeculativeConfigurationToUseRichMansConflictScan()
void
updateSpeculativeConfigureToUseAbortOnly()
-
-
-
Field Detail
-
idGenerator
public static final java.util.concurrent.atomic.AtomicLong idGenerator
-
speculativeConfiguration
public final java.util.concurrent.atomic.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 java.lang.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 java.util.ArrayList<TxnListener> permanentListeners
-
unrepeatableReadAllowed
public boolean unrepeatableReadAllowed
-
-
Constructor Detail
-
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 Detail
-
getReadLockMode
public LockMode getReadLockMode()
Description copied from interface:TxnConfig
Gets the current LockMode for all reads.- Specified by:
getReadLockMode
in interfaceTxnConfig
- Returns:
- the current LockMode for all reads.
- See Also:
TxnFactoryBuilder.setReadLockMode(LockMode)
-
getWriteLockMode
public LockMode getWriteLockMode()
Description copied from interface:TxnConfig
Gets the current LockMode for all writes.- Specified by:
getWriteLockMode
in interfaceTxnConfig
- Returns:
- the current LockMode for all writes.
- See Also:
TxnFactoryBuilder.setWriteLockMode(LockMode)
-
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 interfaceTxnConfig
- Returns:
- the IsolationLevel.
- See Also:
TxnFactoryBuilder.setIsolationLevel(IsolationLevel)
-
isControlFlowErrorsReused
public boolean isControlFlowErrorsReused()
Description copied from interface:TxnConfig
Checks if theControlFlowError
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 interfaceTxnConfig
- Returns:
- true if the ControlFlowError is reused.
- See Also:
TxnFactoryBuilder.setControlFlowErrorsReused(boolean)
-
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 interfaceTxnConfig
- Returns:
- the total remaining timeout.
- See Also:
TxnFactoryBuilder.setTimeoutNs(long)
-
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 interfaceTxnConfig
- Returns:
- the TraceLevel.
- See Also:
TxnFactoryBuilder.setTraceLevel(TraceLevel)
-
isInterruptible
public boolean isInterruptible()
Description copied from interface:TxnConfig
Checks if the Txn can be interrupted if it is blocking.- Specified by:
isInterruptible
in interfaceTxnConfig
- Returns:
- true if the Txn can be interrupted if it is blocking, false otherwise.
- See Also:
TxnFactoryBuilder.setInterruptible(boolean)
-
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 interfaceTxnConfig
- Returns:
- the BackoffPolicy used.
- See Also:
TxnFactoryBuilder.setBackoffPolicy(BackoffPolicy)
-
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 someSpeculativeConfigurationError
. 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 interfaceTxnConfig
- Returns:
- true if speculative configuration is enabled.
- See Also:
TxnFactoryBuilder.setSpeculative(boolean)
-
getFamilyName
public java.lang.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 interfaceTxnConfig
- Returns:
- the familyName. The returned value can be null.
- See Also:
TxnFactoryBuilder.setFamilyName(String)
-
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 interfaceTxnConfig
- Returns:
- true if readonly, false otherwise.
- See Also:
TxnFactoryBuilder.setReadonly(boolean)
-
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 interfaceTxnConfig
- Returns:
- the maximum number of spins
- See Also:
TxnFactoryBuilder.setSpinCount(int)
-
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 interfaceTxnConfig
- Returns:
- true of dirty check is enabled.
- See Also:
TxnFactoryBuilder.setDirtyCheckEnabled(boolean)
-
getStm
public GammaStm getStm()
Description copied from interface:TxnConfig
Returns the Stm that creates transactions based on this configuration.
-
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 interfaceTxnConfig
- Returns:
- true if the transaction does automatic read tracking, false otherwise.
- See Also:
TxnFactoryBuilder.setReadTrackingEnabled(boolean)
-
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 interfaceTxnConfig
- Returns:
- true if explicit retry is allowed, false otherwise.
- See Also:
TxnFactoryBuilder.setBlockingAllowed(boolean)
-
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 interfaceTxnConfig
- Returns:
- the maxRetries.
- See Also:
TxnFactoryBuilder.setMaxRetries(int)
-
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 interfaceTxnConfig
- Returns:
- the PropagationLevel used.
- See Also:
TxnFactoryBuilder.setPropagationLevel(PropagationLevel)
-
getPermanentListeners
public java.util.List<TxnListener> getPermanentListeners()
Description copied from interface:TxnConfig
Returns an unmodifiable list containing all permanent TxnListener.- Specified by:
getPermanentListeners
in interfaceTxnConfig
- Returns:
- unmodifiable List containing all permanent TxnListeners.
- See Also:
TxnFactoryBuilder.addPermanentListener(org.multiverse.api.lifecycle.TxnListener)
-
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(java.lang.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 java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-