You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2006/11/07 03:43:01 UTC
svn commit: r471971 - in
/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis:
operation/AddEntryOperation.java operation/OperationFactory.java
service/ReplicationService.java
Author: akarasulu
Date: Mon Nov 6 18:43:00 2006
New Revision: 471971
URL: http://svn.apache.org/viewvc?view=rev&rev=471971
Log:
fixing issue with adding entry that was already deleted: DIRSERVER-774; also added socket reuse for config to get rid of bind exceptions
Modified:
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java?view=diff&rev=471971&r1=471970&r2=471971
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java Mon Nov 6 18:43:00 2006
@@ -20,11 +20,8 @@
package org.apache.directory.mitosis.operation;
-import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.operation.support.EntryUtil;
@@ -82,42 +79,15 @@
Attributes oldEntry = nexus.lookup( normalizedName );
if ( oldEntry != null )
{
- // Find the attributes that new entry doesn't have.
- Attributes attrsToRemove = ( Attributes ) oldEntry.clone();
- NamingEnumeration e = oldEntry.getAll();
- while ( e.hasMore() )
- {
- Attribute attr = ( Attribute ) e.next();
- String attrID = attr.getID();
- if ( entry.get( attrID ) != null )
- {
- attrsToRemove.remove( attrID );
- }
- }
-
- // Don't let RN attribute be removed
- String rnAttrID = NamespaceTools.getRdnAttribute( normalizedName.get( normalizedName.size() - 1 ) );
- attrsToRemove.remove( rnAttrID );
-
- // Delete the attributes.
- nexus.modify( normalizedName, DirContext.REMOVE_ATTRIBUTE, entry );
-
- // Remove RN attribute from new entry because it should be the same
- // with the old one.
- entry.remove( rnAttrID );
-
- // Now replace old entries with the new attributes
- nexus.modify( normalizedName, DirContext.REPLACE_ATTRIBUTE, entry );
- }
- else
- {
- String rdn = normalizedName.get( normalizedName.size() - 1 );
- // Remove the attribute first in case we're using a buggy
- // LockableAttributesImpl which doesn't replace old attributes
- // when we put a new one.
- entry.remove( NamespaceTools.getRdnAttribute( rdn ) );
- entry.put( NamespaceTools.getRdnAttribute( rdn ), NamespaceTools.getRdnValue( rdn ) );
- nexus.add( normalizedName, entry );
+ nexus.delete( normalizedName );
}
+
+ String rdn = normalizedName.get( normalizedName.size() - 1 );
+ // Remove the attribute first in case we're using a buggy
+ // LockableAttributesImpl which doesn't replace old attributes
+ // when we put a new one.
+ entry.remove( NamespaceTools.getRdnAttribute( rdn ) );
+ entry.put( NamespaceTools.getRdnAttribute( rdn ), NamespaceTools.getRdnValue( rdn ) );
+ nexus.add( normalizedName, entry );
}
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java?view=diff&rev=471971&r1=471970&r2=471971
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java Mon Nov 6 18:43:00 2006
@@ -243,6 +243,20 @@
{
if ( nexus.hasEntry( newEntryName ) )
{
+ Attributes entry = nexus.lookup( newEntryName );
+ Attribute deleted = entry.get( Constants.ENTRY_DELETED );
+ Object value = deleted == null ? null : deleted.get();
+
+ /*
+ * Check first if the entry has been marked as deleted before
+ * throwing an exception and delete the entry if so and return
+ * without throwing an exception.
+ */
+ if ( value != null && "true".equalsIgnoreCase( value.toString() ) )
+ {
+ return;
+ }
+
throw new NameAlreadyBoundException( newEntryName.toString() + " already exists." );
}
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java?view=diff&rev=471971&r1=471970&r2=471971
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java Mon Nov 6 18:43:00 2006
@@ -61,7 +61,6 @@
import org.apache.directory.shared.ldap.filter.FilterParserImpl;
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.mina.common.IoAcceptor;
-import org.apache.mina.common.IoServiceConfig;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
@@ -150,7 +149,8 @@
private void startNetworking() throws Exception
{
registry = new SocketAcceptor();
- IoServiceConfig config = new SocketAcceptorConfig();
+ SocketAcceptorConfig config = new SocketAcceptorConfig();
+ config.setReuseAddress( true );
config.getFilterChain().addLast( "protocol",
new ProtocolCodecFilter( new ReplicationServerProtocolCodecFactory() ) );