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:
Alan Davis
2014-05-16 20:07:48 +00:00
parent c505322c35
commit 9898a4c200

View File

@@ -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)