Merged V2.9 to HEAD

9845: Merged V2.2 to V2.9
      9733: Merged V2.1 to V2.2
         9281: Improvements to index AUTO recovery
         9316: Fixed ETWOONE-193: Transactional caches not being cleaned up after rollback (2.1.4 regression)
         9317: Fixed ETWOONE-194: Faster void handling during index tracking
         9365: Improved performance for finding which snapshots have been indexed
         9413: Support to retrieve read/write state of the transaction and ensure Lucene commits are handled last
         9414: ACT-3245: Updating node properties and aspects don't bump the alf_node.version value
         9415: Code cleanup: Removed unnecessary empty methods
         9416: Fixed creation of multiple thread pools
         9417: Full index recovery absorbs indexing exceptions by default
         9418: Added AUTO index recovery option to sample in line with Wiki docs
         9419: ETWOONE-194: Index tracking is too slow
         9420: Fixed ETWOONE-201: Better logging and configurability for RetryingTransactionHelper
         9421: Fixed ETWOONE-202: SPlit person cleanup doesn't break read-only transactions
         9422: Follow up on CHK-3317: Removed use of JDK 1.6 NavigableMap interface
         9423: Fixed unit test after CHK-3317
         9424: More test fixes after CHK-3317
         9425: Ensure that index tracking tests don't run too long.
         9426: Made concurrent reindexing optional.  It is on by default.
         9509: ACT-3539: Mid-transaction locking on Lucene resources
         9547: Multithreaded index tracking startup: Handle previously lagging single-threaded rebuilds


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@10592 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2008-08-30 03:11:18 +00:00
parent 75646b4234
commit 0ac7884d1b
31 changed files with 1934 additions and 536 deletions

View File

@@ -134,6 +134,42 @@ public abstract class AlfrescoTransactionSupport
}
}
/**
*
* @author Derek Hulley
* @since 2.1.4
*/
public static enum TxnReadState
{
/** No transaction is active */
TXN_NONE,
/** The current transaction is read-only */
TXN_READ_ONLY,
/** The current transaction supports writes */
TXN_READ_WRITE
}
/**
* @return Returns the read-write state of the current transaction
* @since 2.1.4
*/
public static TxnReadState getTransactionReadState()
{
if (!TransactionSynchronizationManager.isSynchronizationActive())
{
return TxnReadState.TXN_NONE;
}
// Find the read-write state of the txn
if (TransactionSynchronizationManager.isCurrentTransactionReadOnly())
{
return TxnReadState.TXN_READ_ONLY;
}
else
{
return TxnReadState.TXN_READ_WRITE;
}
}
/**
* Are there any pending changes which must be synchronized with the store?
*
@@ -710,26 +746,6 @@ public abstract class AlfrescoTransactionSupport
logger.debug("After completion (" + statusStr + "): " + this);
}
// commit/rollback Lucene
for (LuceneIndexerAndSearcher lucene : lucenes)
{
try
{
if (status == TransactionSynchronization.STATUS_COMMITTED)
{
lucene.commit();
}
else
{
lucene.rollback();
}
}
catch (RuntimeException e)
{
logger.error("After completion (" + statusStr + ") Lucene exception", e);
}
}
List<TransactionListener> iterableListeners = getListenersIterable();
// notify listeners
if (status == TransactionSynchronization.STATUS_COMMITTED)
@@ -765,6 +781,46 @@ public abstract class AlfrescoTransactionSupport
}
}
// commit/rollback Lucene
for (LuceneIndexerAndSearcher lucene : lucenes)
{
try
{
if (status == TransactionSynchronization.STATUS_COMMITTED)
{
lucene.commit();
}
else
{
lucene.rollback();
}
}
catch (RuntimeException e)
{
logger.error("After completion (" + statusStr + ") Lucene exception", e);
}
}
// Clean up the transactional caches
for (TransactionalCache<Serializable, Object> cache : transactionalCaches)
{
try
{
if (status == TransactionSynchronization.STATUS_COMMITTED)
{
cache.afterCommit();
}
else
{
cache.afterRollback();
}
}
catch (RuntimeException e)
{
logger.error("After completion (" + statusStr + ") TransactionalCache exception", e);
}
}
// clear the thread's registrations and synchronizations
AlfrescoTransactionSupport.clearSynchronization();
}