You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2010/05/20 23:32:36 UTC
svn commit: r946798 - in
/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core:
DefaultOperationManager.java authz/AciAuthorizationInterceptor.java
exception/ExceptionInterceptor.java referral/ReferralInterceptor.java
Author: elecharny
Date: Thu May 20 21:32:36 2010
New Revision: 946798
URL: http://svn.apache.org/viewvc?rev=946798&view=rev
Log:
Speed up the delete operation by removing useless calls to lookup(), entry existence, child existence.
Minor refactoring done
Modified:
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java?rev=946798&r1=946797&r2=946798&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java Thu May 20 21:32:36 2010
@@ -396,7 +396,7 @@ public class DefaultOperationManager imp
if ( parentEntry != null )
{
// We have found a parent referral for the current DN
- DN childDn = (DN)dn.getSuffix( parentEntry.getDn().size() );
+ DN childDn = dn.getSuffix( parentEntry.getDn().size() );
if ( directoryService.getReferralManager().isReferral( dn ) )
{
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java?rev=946798&r1=946797&r2=946798&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java Thu May 20 21:32:36 2010
@@ -495,42 +495,47 @@ public class AciAuthorizationInterceptor
public void delete( NextInterceptor next, DeleteOperationContext deleteContext ) throws Exception
{
+ CoreSession session = deleteContext.getSession();
+
// bypass authz code if we are disabled
- if ( ! deleteContext.getSession().getDirectoryService().isAccessControlEnabled() )
+ if ( ! session.getDirectoryService().isAccessControlEnabled() )
{
next.delete( deleteContext );
return;
}
- DN name = deleteContext.getDn();
- LdapPrincipal principal = deleteContext.getSession().getEffectivePrincipal();
+ DN dn = deleteContext.getDn();
+ LdapPrincipal principal = session.getEffectivePrincipal();
DN principalDn = principal.getDN();
- Entry entry = deleteContext.lookup( name, ByPassConstants.LOOKUP_BYPASS );
+ Entry entry = deleteContext.getEntry();
- protectCriticalEntries( name );
+ protectCriticalEntries( dn );
// bypass authz code but manage caches if operation is performed by the admin
if ( isPrincipalAnAdministrator( principalDn ) )
{
next.delete( deleteContext );
- tupleCache.subentryDeleted( name, entry );
- groupCache.groupDeleted( name, entry );
+
+ tupleCache.subentryDeleted( dn, entry );
+ groupCache.groupDeleted( dn, entry );
+
return;
}
Set<DN> userGroups = groupCache.getGroups( principalDn.getNormName() );
Collection<ACITuple> tuples = new HashSet<ACITuple>();
- addPerscriptiveAciTuples( deleteContext, tuples, name, ((ClonedServerEntry)entry).getOriginalEntry() );
+ addPerscriptiveAciTuples( deleteContext, tuples, dn, ((ClonedServerEntry)entry).getOriginalEntry() );
addEntryAciTuples( tuples, entry );
- addSubentryAciTuples( deleteContext, tuples, name, entry );
+ addSubentryAciTuples( deleteContext, tuples, dn, entry );
engine.checkPermission( schemaManager, deleteContext, userGroups, principalDn,
- principal.getAuthenticationLevel(), name, null, null, REMOVE_PERMS, tuples, entry, null );
+ principal.getAuthenticationLevel(), dn, null, null, REMOVE_PERMS, tuples, entry, null );
next.delete( deleteContext );
- tupleCache.subentryDeleted( name, entry );
- groupCache.groupDeleted( name, entry );
+
+ tupleCache.subentryDeleted( dn, entry );
+ groupCache.groupDeleted( dn, entry );
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java?rev=946798&r1=946797&r2=946798&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java Thu May 20 21:32:36 2010
@@ -54,7 +54,6 @@ import org.apache.directory.shared.ldap.
import org.apache.directory.shared.ldap.entry.Value;
import org.apache.directory.shared.ldap.exception.LdapAliasException;
import org.apache.directory.shared.ldap.exception.LdapAttributeInUseException;
-import org.apache.directory.shared.ldap.exception.LdapContextNotEmptyException;
import org.apache.directory.shared.ldap.exception.LdapEntryAlreadyExistsException;
import org.apache.directory.shared.ldap.exception.LdapNoSuchObjectException;
import org.apache.directory.shared.ldap.exception.LdapUnwillingToPerformException;
@@ -216,45 +215,24 @@ public class ExceptionInterceptor extend
*/
public void delete( NextInterceptor nextInterceptor, DeleteOperationContext opContext ) throws Exception
{
- DN name = opContext.getDn();
+ DN dn = opContext.getDn();
- if ( name.getNormName().equalsIgnoreCase( subschemSubentryDn.getNormName() ) )
+ if ( dn.equals( subschemSubentryDn ) )
{
throw new LdapUnwillingToPerformException( ResultCodeEnum.UNWILLING_TO_PERFORM,
I18n.err( I18n.ERR_253, subschemSubentryDn ) );
}
- // check if entry to delete exists
- String msg = "Attempt to delete non-existant entry: ";
- assertHasEntry( opContext, msg, name );
-
- // check if entry to delete has children (only leaves can be deleted)
- boolean hasChildren = false;
- EntryFilteringCursor list = nextInterceptor.list( new ListOperationContext( opContext.getSession(), name ) );
-
- if ( list.next() )
- {
- hasChildren = true;
- }
-
- list.close();
-
- if ( hasChildren )
- {
- LdapContextNotEmptyException e = new LdapContextNotEmptyException();
- //e.setResolvedName( new DN( name.getName() ) );
- throw e;
- }
+ nextInterceptor.delete( opContext );
+ // Update the alias cache
synchronized( notAliasCache )
{
- if ( notAliasCache.containsKey( name.getNormName() ) )
+ if ( notAliasCache.containsKey( dn.getNormName() ) )
{
- notAliasCache.remove( name.getNormName() );
+ notAliasCache.remove( dn.getNormName() );
}
}
-
- nextInterceptor.delete( opContext );
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java?rev=946798&r1=946797&r2=946798&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java Thu May 20 21:32:36 2010
@@ -270,11 +270,11 @@ public class ReferralInterceptor extends
*/
public void delete( NextInterceptor next, DeleteOperationContext opContext ) throws Exception
{
- Entry entry = opContext.getEntry();
-
// First delete the entry into the server
next.delete( opContext );
+ Entry entry = opContext.getEntry();
+
// Check if the entry exists and is a referral itself
// If so, we have to update the referralManager
if ( ( entry != null ) && isReferral( entry ) )