Improvement to AuthorityDAOImpl to not perform pointless checks (DB getChildAssoc query) to see if a ROLE_ is a person, it never can be and null results aren't cached. This saves a DB query at the start of many REST API calls (as authenticated WS calls first check isGuest() etc.).

YourKit profiler results for Share READ heavy multi-user JMeter test:
Before: 220s
After: 200s
Specifically; org.alfresco.repo.security.authority.AuthorityServiceImpl.hasGuestAuthority() - before 26.7s - after 0.041s

Unit tests run:
org.alfresco.repo.security.SecurityTestSuite
org.alfresco.repo.security.authentication.*Test
org.alfresco.repo.security.authority.*Test
org.alfresco.repo.security.person.PersonTest


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@55761 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2013-09-20 15:38:52 +00:00
parent 359dc9fc1f
commit c5fafd6ad4

View File

@@ -1260,23 +1260,21 @@ public class AuthorityDAOImpl implements AuthorityDAO, NodeServicePolicies.Befor
} }
} }
private NodeRef getAuthorityOrNull(String name) private NodeRef getAuthorityOrNull(final String name)
{ {
try try
{ {
if (AuthorityType.getAuthorityType(name).equals(AuthorityType.USER)) final AuthorityType authType = AuthorityType.getAuthorityType(name);
switch (authType)
{ {
case USER:
return personService.getPerson(name, false); return personService.getPerson(name, false);
} case GUEST:
else if (AuthorityType.getAuthorityType(name).equals(AuthorityType.GUEST)) case ADMIN:
{ case EVERYONE:
return personService.getPerson(name, false); case OWNER:
} return null;
else if (AuthorityType.getAuthorityType(name).equals(AuthorityType.ADMIN)) default:
{
return personService.getPerson(name, false);
}
else
{ {
Pair <String, String> cacheKey = cacheKey(name); Pair <String, String> cacheKey = cacheKey(name);
NodeRef result = authorityLookupCache.get(cacheKey); NodeRef result = authorityLookupCache.get(cacheKey);
@@ -1290,6 +1288,7 @@ public class AuthorityDAOImpl implements AuthorityDAO, NodeServicePolicies.Befor
return result.equals(NULL_NODEREF) ? null : result; return result.equals(NULL_NODEREF) ? null : result;
} }
} }
}
catch (NoSuchPersonException e) catch (NoSuchPersonException e)
{ {
return null; return null;