mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud)
69947: Merged V4.2-BUG-FIX (4.2.3) to HEAD-BUG-FIX (4.3/Cloud) 69861: MNT-11371: Alfresco unable to bootstrap due to LockTryExceptions following an upgrade from 3.4.8 -> 3.4.13 -> 4.0.2 to either 4.1.8 or 4.2.1 Merged 4.1.N to V4.2.N (4.2.3) 69858: MNT-11371: Alfresco unable to bootstrap due to LockTryExceptions following an upgrade from 3.4.8 -> 3.4.13 -> 4.0.2 to either 4.1.8 or 4.2.1 Additional boolean parameter 'haveWriteLock' has been added to 'MessageServiceImpl.getResourceBundleBaseNames()' method. It serves to avoid unlocking external write locks. The method still assumes that read lock is acquired if 'haveWriteLock=false'. Read lock will be upgraded to write lock only if 'haveWriteLock' parameter is equal to false git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@70463 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -184,7 +184,7 @@ public class MessageServiceImpl implements MessageService
|
||||
LockHelper.tryLock(readLock, tryLockTimeout, "getting resource bundle base names in 'MessageServiceImpl.registerResourceBundle()'");
|
||||
try
|
||||
{
|
||||
tenantResourceBundleBaseNames = getResourceBundleBaseNames(tenantDomain);
|
||||
tenantResourceBundleBaseNames = getResourceBundleBaseNames(tenantDomain, false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -287,7 +287,7 @@ public class MessageServiceImpl implements MessageService
|
||||
// all locales
|
||||
loadedResourceBundlesForAllLocales = getLoadedResourceBundles(tenantDomain);
|
||||
cachedMessagesForAllLocales = getMessages(tenantDomain);
|
||||
resourceBundleBaseNamesForAllLocales = getResourceBundleBaseNames(tenantDomain);
|
||||
resourceBundleBaseNamesForAllLocales = getResourceBundleBaseNames(tenantDomain, false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -405,7 +405,7 @@ public class MessageServiceImpl implements MessageService
|
||||
tenantCachedMessages = getMessages(tenantDomain);
|
||||
props = tenantCachedMessages.get(locale);
|
||||
|
||||
tenantResourceBundleBaseNames = getResourceBundleBaseNames(tenantDomain);
|
||||
tenantResourceBundleBaseNames = getResourceBundleBaseNames(tenantDomain, false);
|
||||
loadedBundleCount = tenantResourceBundleBaseNames.size();
|
||||
}
|
||||
finally
|
||||
@@ -451,7 +451,7 @@ public class MessageServiceImpl implements MessageService
|
||||
try
|
||||
{
|
||||
// get registered resource bundles
|
||||
Set<String> resBundleBaseNames = getResourceBundleBaseNames(tenantDomain);
|
||||
Set<String> resBundleBaseNames = getResourceBundleBaseNames(tenantDomain, true);
|
||||
|
||||
int count = 0;
|
||||
|
||||
@@ -595,7 +595,7 @@ public class MessageServiceImpl implements MessageService
|
||||
LockHelper.tryLock(readLock, tryLockTimeout, "getting resource bundle base names in 'MessageServiceImpl.getRegisteredBundles()'");
|
||||
try
|
||||
{
|
||||
return getResourceBundleBaseNames(getTenantDomain());
|
||||
return getResourceBundleBaseNames(getTenantDomain(), false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -603,7 +603,7 @@ public class MessageServiceImpl implements MessageService
|
||||
}
|
||||
}
|
||||
|
||||
private Set<String> getResourceBundleBaseNames(String tenantDomain)
|
||||
private Set<String> getResourceBundleBaseNames(String tenantDomain, boolean haveWriteLock)
|
||||
{
|
||||
// Assume a read lock is present
|
||||
Set<String> resourceBundleBaseNames = resourceBundleBaseNamesCache.get(tenantDomain);
|
||||
@@ -611,10 +611,14 @@ public class MessageServiceImpl implements MessageService
|
||||
{
|
||||
return resourceBundleBaseNames;
|
||||
}
|
||||
|
||||
// They are not there. Upgrade to the write lock.
|
||||
readLock.unlock();
|
||||
LockHelper.tryLock(writeLock, tryLockTimeout, "getting cached resource bundle base names by tenant domain in 'MessageServiceImpl.getRegisteredBundles()'");
|
||||
|
||||
if (!haveWriteLock)
|
||||
{
|
||||
// They are not there. Upgrade to the write lock.
|
||||
readLock.unlock();
|
||||
LockHelper.tryLock(writeLock, tryLockTimeout, "getting cached resource bundle base names by tenant domain in 'MessageServiceImpl.getRegisteredBundles()'");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
resourceBundleBaseNames = resourceBundleBaseNamesCache.get(tenantDomain);
|
||||
@@ -627,8 +631,11 @@ public class MessageServiceImpl implements MessageService
|
||||
}
|
||||
finally
|
||||
{
|
||||
writeLock.unlock();
|
||||
LockHelper.tryLock(readLock, tryLockTimeout, "upgrading to read lock in MessageServiceImpl.getResourceBundleBaseNames()");
|
||||
if (!haveWriteLock)
|
||||
{
|
||||
writeLock.unlock();
|
||||
LockHelper.tryLock(readLock, tryLockTimeout, "upgrading to read lock in MessageServiceImpl.getResourceBundleBaseNames()");
|
||||
}
|
||||
}
|
||||
|
||||
if (resourceBundleBaseNames == null)
|
||||
|
Reference in New Issue
Block a user