mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user