Merged BRANCHES/DEV/mward/head_locktry_fix to HEAD:

55423: ALF-20031: LockStore is no longer used as a cache for persistent locks - it only holds Lifetime.EPHEMERAL locks.
   55458: ALF-20031: added repeatable read within transactions to LockStores
   55461: ALF-20031: moved transactional test code into separate test classes to avoid clutter.
   55470: ALF-20031: added test for LockStore reads when no transaction is available.
   55473: Generated LockState.toString() to aid debugging, stack trace clarity etc.
   55481: ALF-20031: added tests for null value behaviour (transactional repeatable reads).
   55663: ALF-20031: (work in progress, broken tests) removing concurrency locks from AbstractLockStore.
   55664: ALF-20031: moved inner Thread classes to anonymous inner classes as there will be more of these coming.
   55675: ALF-20031: fixed AbstractLockStoreTxTest
   55681: ALF-20031: added more test cases to AbstractLockStoreTxTest
   55683: Added missing tests to enterprise.repo.cluster package's BuildSafeTestSuite.
   55684: ALF-20031: Fix HazelcastLockStoreTest to clear lock store backing map in createLockStore() fixture setup.
   55688: Commented LockStore.clear() as a DO NOT USE method.
   55694: ALF-20031: removed LockStore.contains() as this is not required, and was currently unsafe (no repeatable reads).
   55696: ALF-20031: Fix AbstractLockStore.clear(): was not clearing transactionally scoped map.
   55700: ALF-20031: removed concurrency locks from LockServiceImpl.getLockState(NodeRef)
   55712: ALF-20031: removed concurrency lock from LockServiceImpl.lock()
   55716: ALF-20031: removed lockstore locking from LockableAspectInterceptor.
   55718: ALF-20031: renamed method to isEphemeralLock()
   55719: ALF-20031: removed concurrency lock from LockServiceImpl.unlock()
   55728: ALF-20031: added cm:lockLifetime property to content model, and added persistence within lockservice.
   55732: ALF-20031: LockableAspectInterceptor no longer uses ephemeral lockstore for setProperties() handling.
   55753: ALF-20031: upon tx rollback, ephemeral locks are now rolled back to the last known value, rather than always being unlocked.
   55759: ALF-20031: temporary fix, AbstractLockStoreTxTest needs further attention for thread coordination.
   55760: ALF-20091: disabled spawning of new transactions in LockKeeperImpl.refreshAllLocks()
   55767: ALF-20031: changed AbstractLockStore to use getFullyAuthenticatedUser() instead of getRunAsUser().
   55833: ALF-20091: reverted LockKeeperImpl to previous (create new tx) behaviour. Altered test to use separate transactions per lock phase.
   55855: ALF-20031: fixed ReplicationServiceIntegrationTest, LockableAspectInterceptor's handling of cm:lockLifetime.



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@55893 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Matt Ward
2013-09-24 12:14:46 +00:00
parent 50bf8c4948
commit 4055228bdb
15 changed files with 1063 additions and 353 deletions

View File

@@ -80,23 +80,20 @@ public class LockKeeperImplTest extends TestCase
}
/*
* Tests a basic sequence of lock, refresh, remove, refresh in a single transaction
* Tests a basic sequence of lock, refresh, remove, refresh in separate transactions
*/
public void testBasicLockUnlock() throws Exception
{
logger.debug("testBasicLockUnlock");
final RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper();
final String FILE_NAME = "LockKeeperImplTestNode";
RetryingTransactionCallback<Void> testITCB = new RetryingTransactionCallback<Void>() {
RetryingTransactionCallback<Boolean> lockCB = new RetryingTransactionCallback<Boolean>() {
@Override
public Void execute() throws Throwable
{
String FILE_NAME = "LockKeeperImplTestNode";
NodeRef companyHome = repositoryHelper.getCompanyHome();
public Boolean execute() throws Throwable
{
NodeRef companyHome = repositoryHelper.getCompanyHome();
NodeRef nodeRef = nodeService.getChildByName(companyHome, ContentModel.ASSOC_CONTAINS, FILE_NAME);
if(nodeRef == null)
@@ -108,24 +105,48 @@ public class LockKeeperImplTest extends TestCase
logger.debug("first lock");
lockKeeper.addLock(nodeRef);
assertTrue("node not locked", nodeService.hasAspect(nodeRef, ContentModel.ASPECT_LOCKABLE));
logger.debug("first refresh");
lockKeeper.refreshAllLocks();
lockKeeper.removeLock(nodeRef);
assertFalse("node not unlocked", nodeService.hasAspect(nodeRef, ContentModel.ASPECT_LOCKABLE));
logger.debug("second refresh");
lockKeeper.refreshAllLocks();
boolean locked = nodeService.hasAspect(nodeRef, ContentModel.ASPECT_LOCKABLE);
return locked;
}
};
boolean locked = tran.doInTransaction(lockCB);
assertTrue("node not locked", locked);
RetryingTransactionCallback<Void> refreshCB = new RetryingTransactionCallback<Void>() {
@Override
public Void execute() throws Throwable
{
logger.debug("first refresh");
lockKeeper.refreshAllLocks();
return null;
}
};
tran.doInTransaction(testITCB);
tran.doInTransaction(refreshCB);
RetryingTransactionCallback<Boolean> removeCB = new RetryingTransactionCallback<Boolean>() {
@Override
public Boolean execute() throws Throwable
{
NodeRef companyHome = repositoryHelper.getCompanyHome();
NodeRef nodeRef = nodeService.getChildByName(companyHome, ContentModel.ASSOC_CONTAINS, FILE_NAME);
lockKeeper.removeLock(nodeRef);
boolean locked = nodeService.hasAspect(nodeRef, ContentModel.ASPECT_LOCKABLE);
return locked;
}
};
locked = tran.doInTransaction(removeCB);
assertFalse("node not unlocked", locked);
RetryingTransactionCallback<Void> refreshAgainCB = new RetryingTransactionCallback<Void>() {
@Override
public Void execute() throws Throwable
{
logger.debug("second refresh");
lockKeeper.refreshAllLocks();
return null;
}
};
tran.doInTransaction(refreshAgainCB);
}
/*