org.multiverse.stms.gamma.transactions
Interface GammaTxnFactoryBuilder

All Superinterfaces:
TxnFactoryBuilder

public interface GammaTxnFactoryBuilder
extends TxnFactoryBuilder

A TxnFactoryBuilder tailored for the GammaStm.

Author:
Peter Veentjer.

Method Summary
 GammaTxnFactoryBuilder addPermanentListener(TxnListener listener)
          Adds a permanent Txn TxnListener.
 GammaTxnConfig getConfig()
          Returns the TxnConfig used by this TxnFactoryBuilder.
 GammaTxnFactory newTransactionFactory()
          Builds a new TxnFactory.
 GammaTxnExecutor newTxnExecutor()
          Builds a new TxnExecutor optimized for executing transactions created by this TxnFactoryBuilder.
 GammaTxnFactoryBuilder setBackoffPolicy(BackoffPolicy backoffPolicy)
          Sets the Txn BackoffPolicy.
 GammaTxnFactoryBuilder setBlockingAllowed(boolean blockingAllowed)
          Sets if the Txn is allowed to do an explicit retry (needed for a blocking operation).
 GammaTxnFactoryBuilder setControlFlowErrorsReused(boolean reused)
          Sets if the ControlFlowError is reused.
 GammaTxnFactoryBuilder setDirtyCheckEnabled(boolean dirtyCheckEnabled)
          Sets if the Txn dirty check is enabled.
 GammaTxnFactoryBuilder setFamilyName(String familyName)
          Sets the Txn familyname.
 GammaTxnFactoryBuilder setFat()
           
 GammaTxnFactoryBuilder setInterruptible(boolean interruptible)
          Sets if the Txn can be interrupted while doing blocking operations.
 GammaTxnFactoryBuilder setIsolationLevel(IsolationLevel isolationLevel)
          Sets the IsolationLevel on the Txn.
 GammaTxnFactoryBuilder setMaxRetries(int maxRetries)
          Sets the the maximum count a Txn can be retried.
 GammaTxnFactoryBuilder setPropagationLevel(PropagationLevel propagationLevel)
          Sets the PropagationLevel used.
 GammaTxnFactoryBuilder setReadLockMode(LockMode lockMode)
          Sets the Txn LockMode for all reads.
 GammaTxnFactoryBuilder setReadonly(boolean readonly)
          Sets the readonly property on a Txn.
 GammaTxnFactoryBuilder setReadTrackingEnabled(boolean enabled)
          Sets if the Txn should automatically track all reads that have been done.
 GammaTxnFactoryBuilder setSpeculative(boolean enabled)
          With the speculative configuration enabled, the Stm is allowed to determine optimal settings for a Txn.
 GammaTxnFactoryBuilder setSpinCount(int spinCount)
          Sets the maximum number of spins that are allowed when a Txn can't be read/written/locked because it is locked by another transaction.
 GammaTxnFactoryBuilder setTimeoutNs(long timeoutNs)
          Sets the timeout (the maximum time a Txn is allowed to block.
 GammaTxnFactoryBuilder setTraceLevel(TraceLevel traceLevel)
          Sets the Txn TraceLevel.
 GammaTxnFactoryBuilder setWriteLockMode(LockMode lockMode)
          Sets the Txn LockMode for all writes.
 

Method Detail

getConfig

GammaTxnConfig getConfig()
Description copied from interface: TxnFactoryBuilder
Returns the TxnConfig used by this TxnFactoryBuilder.

Specified by:
getConfig in interface TxnFactoryBuilder
Returns:
the used TxnConfig.

setFat

GammaTxnFactoryBuilder setFat()

setControlFlowErrorsReused

GammaTxnFactoryBuilder setControlFlowErrorsReused(boolean reused)
Description copied from interface: TxnFactoryBuilder
Sets if the ControlFlowError is reused. Normally you don't want to reuse them because they can be expensive to create (especially the stacktrace) and they could be created very often. But for debugging purposes it can be quite annoying because you want to see the stacktrace.

Specified by:
setControlFlowErrorsReused in interface TxnFactoryBuilder
Parameters:
reused - true if ControlFlowErrors should be reused.
Returns:
the updated TxnFactoryBuilder.
See Also:
TxnConfig.isControlFlowErrorsReused()

setReadLockMode

GammaTxnFactoryBuilder setReadLockMode(LockMode lockMode)
Description copied from interface: TxnFactoryBuilder
Sets the Txn LockMode for all reads. If a LockMode is set higher than LockMode.None, this transaction will locks all reads (and writes since a read is needed for a write) and the transaction automatically becomes serialized.

Specified by:
setReadLockMode in interface TxnFactoryBuilder
Parameters:
lockMode - the LockMode to set.
Returns:
the updated TxnFactoryBuilder.
See Also:
TxnConfig.getReadLockMode(), LockMode

setWriteLockMode

GammaTxnFactoryBuilder setWriteLockMode(LockMode lockMode)
Description copied from interface: TxnFactoryBuilder
Sets the Txn LockMode for all writes. For a write, always a read needs to be done, so if the read LockMode is

Freshly constructed objects that are not committed, automatically are locked with LockMode.Exclusive.

If the write LockMode is set after the read LockMode and the write LockMode is lower than the read LockMode, an IllegalTxnFactoryException will be thrown when a TxnFactory is created.

If the write LockMode is set before the read LockMode and the write LockMode is lower than the read LockMode, the write LockMode automatically is upgraded to that of the read LockMode. This makes setting the readLock mode less of a nuisance.

Specified by:
setWriteLockMode in interface TxnFactoryBuilder
Parameters:
lockMode - the LockMode to set.
Returns:
the updated TxnFactoryBuilder.
See Also:
TxnConfig.getWriteLockMode(), LockMode

setFamilyName

GammaTxnFactoryBuilder setFamilyName(String familyName)
Description copied from interface: TxnFactoryBuilder
Sets the Txn familyname. If an TxnExecutor is used inside a method, a useful familyname could be the full name of the class and the method.

The transaction familyName is useful debugging purposes, but has not other meaning.

Specified by:
setFamilyName in interface TxnFactoryBuilder
Parameters:
familyName - the familyName of the transaction.
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.getFamilyName()

setPropagationLevel

GammaTxnFactoryBuilder setPropagationLevel(PropagationLevel propagationLevel)
Description copied from interface: TxnFactoryBuilder
Sets the PropagationLevel used. With the PropagationLevel you have control on how the transaction deals with transaction nesting. The default is PropagationLevel.Requires which automatically starts a transaction is one is missing, or lifts on a transaction if available.

Specified by:
setPropagationLevel in interface TxnFactoryBuilder
Parameters:
propagationLevel - the new PropagationLevel
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.getPropagationLevel(), PropagationLevel

addPermanentListener

GammaTxnFactoryBuilder addPermanentListener(TxnListener listener)
Description copied from interface: TxnFactoryBuilder
Adds a permanent Txn TxnListener. All permanent listeners are always executed after all normal listeners are executed. If the same listener is added multiple times, it will be executed multiple times.

This method is very useful for integrating Multiverse in other JVM based environments because with this approach you have a callback when transaction aborts/commit and can add your own logic. See the TxnListener for more information about normal vs permanent listeners.

Specified by:
addPermanentListener in interface TxnFactoryBuilder
Parameters:
listener - the permanent listener to add.
Returns:
the updated TxnFactoryBuilder.
See Also:
TxnConfig.getPermanentListeners()

setTraceLevel

GammaTxnFactoryBuilder setTraceLevel(TraceLevel traceLevel)
Description copied from interface: TxnFactoryBuilder
Sets the Txn TraceLevel. With tracing it is possible to see what is happening inside a transaction.

Specified by:
setTraceLevel in interface TxnFactoryBuilder
Parameters:
traceLevel - the new traceLevel.
Returns:
the updated TxnFactoryBuilder.
See Also:
TxnConfig.getTraceLevel(), TraceLevel

setTimeoutNs

GammaTxnFactoryBuilder setTimeoutNs(long timeoutNs)
Description copied from interface: TxnFactoryBuilder
Sets the timeout (the maximum time a Txn is allowed to block. Long.MAX_VALUE indicates that an unbound timeout should be used.

Specified by:
setTimeoutNs in interface TxnFactoryBuilder
Parameters:
timeoutNs - the timeout specified in nano seconds
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.getTimeoutNs(), Txn.getRemainingTimeoutNs()

setInterruptible

GammaTxnFactoryBuilder setInterruptible(boolean interruptible)
Description copied from interface: TxnFactoryBuilder
Sets if the Txn can be interrupted while doing blocking operations.

Specified by:
setInterruptible in interface TxnFactoryBuilder
Parameters:
interruptible - if the transaction can be interrupted while doing blocking operations.
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.isInterruptible()

setBackoffPolicy

GammaTxnFactoryBuilder setBackoffPolicy(BackoffPolicy backoffPolicy)
Description copied from interface: TxnFactoryBuilder
Sets the Txn BackoffPolicy. Policy is used to backoff when a transaction conflicts with another Txn. See the BackoffPolicy for more information.

Specified by:
setBackoffPolicy in interface TxnFactoryBuilder
Parameters:
backoffPolicy - the backoff policy to use.
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.getBackoffPolicy()

setDirtyCheckEnabled

GammaTxnFactoryBuilder setDirtyCheckEnabled(boolean dirtyCheckEnabled)
Description copied from interface: TxnFactoryBuilder
Sets if the Txn dirty check is enabled. Dirty check is that something only needs to be written, if there really is a change (else it will be interpreted as a read). If it is disabled, it will always write, and this could prevent the aba isolation anomaly, but causes more conflicts so more contention. In most cases enabling it is the best option.

Specified by:
setDirtyCheckEnabled in interface TxnFactoryBuilder
Parameters:
dirtyCheckEnabled - true if dirty check should be executed, false otherwise.
Returns:
the updated TxnFactoryBuilder.
See Also:
TxnConfig.isDirtyCheckEnabled()

setSpinCount

GammaTxnFactoryBuilder setSpinCount(int spinCount)
Description copied from interface: TxnFactoryBuilder
Sets the maximum number of spins that are allowed when a Txn can't be read/written/locked because it is locked by another transaction.

Setting the value to a very high value, could lead to more an increased chance of a live locking.

Specified by:
setSpinCount in interface TxnFactoryBuilder
Parameters:
spinCount - the maximum number of spins
Returns:
the updated TxnFactoryBuilder.
See Also:
TxnConfig.getSpinCount()

setReadonly

GammaTxnFactoryBuilder setReadonly(boolean readonly)
Description copied from interface: TxnFactoryBuilder
Sets the readonly property on a Txn. If a transaction is configured as readonly, no write operations (also no construction of new transactional objects making use of that transaction) is allowed

Specified by:
setReadonly in interface TxnFactoryBuilder
Parameters:
readonly - true if the transaction should be readonly, false otherwise.
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.isReadonly()

setReadTrackingEnabled

GammaTxnFactoryBuilder setReadTrackingEnabled(boolean enabled)
Description copied from interface: TxnFactoryBuilder
Sets if the Txn should automatically track all reads that have been done. This is needed for blocking operations, but also for other features like writeskew detection.

Tracking reads puts more pressure on the transaction since it needs to store all reads, but it reduces the chance of read conflicts, since once read from main memory, it can be retrieved from the transaction. The transaction is free to track reads even though this property is disabled.

Specified by:
setReadTrackingEnabled in interface TxnFactoryBuilder
Parameters:
enabled - true if read tracking enabled, false otherwise.
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.isReadTrackingEnabled()

setSpeculative

GammaTxnFactoryBuilder setSpeculative(boolean enabled)
Description copied from interface: TxnFactoryBuilder
With the speculative configuration enabled, the Stm is allowed to determine optimal settings for a Txn.

Some behavior like readonly or the need for tracking reads can be determined runtime. The system can start with a readonly non readtracking transaction and upgrade to an update or a read tracking once a write or retry happens.

It depends on the Stm implementation on which properties it is going to speculate.

Enabling it can cause a few unexpected 'retries' of transactions, but it can seriously improve performance.

Specified by:
setSpeculative in interface TxnFactoryBuilder
Parameters:
enabled - indicates if speculative configuration should be enabled.
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.isSpeculative()

setMaxRetries

GammaTxnFactoryBuilder setMaxRetries(int maxRetries)
Description copied from interface: TxnFactoryBuilder
Sets the the maximum count a Txn can be retried. The default is 1000. Setting it to a very low value could mean that a transaction can't complete. Setting it to a very high value could lead to live-locking.

If the speculative configuration mechanism is enabled (TxnFactoryBuilder.setSpeculative(boolean)), a few retries are done in the beginning to figure out the best settings.

Specified by:
setMaxRetries in interface TxnFactoryBuilder
Parameters:
maxRetries - the maximum number of times a transaction can be tried.
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.getMaxRetries()

setIsolationLevel

GammaTxnFactoryBuilder setIsolationLevel(IsolationLevel isolationLevel)
Description copied from interface: TxnFactoryBuilder
Sets the IsolationLevel on the Txn.

The Txn is free to upgraded to a higher IsolationLevel. This is essentially the same behavior you get when Oracle is used, where a read uncommitted is upgraded to a read committed and a repeatable read is upgraded to the Oracle version of serialized (so with the writeskew problem still there).

Specified by:
setIsolationLevel in interface TxnFactoryBuilder
Parameters:
isolationLevel - the new IsolationLevel
Returns:
the updated TxnFactoryBuilder
See Also:
TxnConfig.getIsolationLevel(), IsolationLevel

setBlockingAllowed

GammaTxnFactoryBuilder setBlockingAllowed(boolean blockingAllowed)
Description copied from interface: TxnFactoryBuilder
Sets if the Txn is allowed to do an explicit retry (needed for a blocking operation). One use case for disallowing it, it when the transaction is used inside an actor, and you don't want that inside the logic executed by the agent a blocking operations is done (e.g. taking an item of a blocking queue).

Specified by:
setBlockingAllowed in interface TxnFactoryBuilder
Parameters:
blockingAllowed - true if explicit retry is allowed, false otherwise.
Returns:
the updated TxnFactoryBuilder

newTransactionFactory

GammaTxnFactory newTransactionFactory()
Description copied from interface: TxnFactoryBuilder
Builds a new TxnFactory.

Specified by:
newTransactionFactory in interface TxnFactoryBuilder
Returns:
the build TxnFactory.

newTxnExecutor

GammaTxnExecutor newTxnExecutor()
Description copied from interface: TxnFactoryBuilder
Builds a new TxnExecutor optimized for executing transactions created by this TxnFactoryBuilder.

Specified by:
newTxnExecutor in interface TxnFactoryBuilder
Returns:
the created TxnExecutor.


Copyright © 2012. All Rights Reserved.