You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ma...@apache.org on 2007/07/02 21:26:24 UTC

svn commit: r552568 - in /directory/apacheds/trunk/mitosis/src: main/java/org/apache/directory/mitosis/service/ReplicationService.java test/java/org/apache/directory/mitosis/service/ReplicationServiceITest.java

Author: malderson
Date: Mon Jul  2 12:26:23 2007
New Revision: 552568

URL: http://svn.apache.org/viewvc?view=rev&rev=552568
Log:
Delete, move and rename operations are now replicated again and search/list operations filter out the tombstoned entries once more (DIRSERVER-929).

Modified:
    directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java
    directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceITest.java

Modified: directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java?view=diff&rev=552568&r1=552567&r2=552568
==============================================================================
--- directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java (original)
+++ directory/apacheds/trunk/mitosis/src/main/java/org/apache/directory/mitosis/service/ReplicationService.java Mon Jul  2 12:26:23 2007
@@ -60,7 +60,10 @@
 import org.apache.directory.server.core.interceptor.context.DeleteOperationContext;
 import org.apache.directory.server.core.interceptor.context.GetMatchedNameOperationContext;
 import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
+import org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext;
+import org.apache.directory.server.core.interceptor.context.MoveOperationContext;
 import org.apache.directory.server.core.interceptor.context.OperationContext;
+import org.apache.directory.server.core.interceptor.context.RenameOperationContext;
 import org.apache.directory.server.core.interceptor.context.SearchOperationContext;
 import org.apache.directory.server.core.invocation.InvocationStack;
 import org.apache.directory.server.core.partition.PartitionNexus;
@@ -383,9 +386,10 @@
     }
 
 
-    public void delete( NextInterceptor nextInterceptor, LdapDN name ) throws NamingException
+    @Override
+    public void delete( NextInterceptor next, OperationContext opContext ) throws NamingException
     {
-        Operation op = operationFactory.newDelete( name );
+        Operation op = operationFactory.newDelete( opContext.getDn() );
         op.execute( nexus, store, attrRegistry );
     }
 
@@ -395,27 +399,31 @@
         Operation op = operationFactory.newModify( modifyContext );
         op.execute( nexus, store, attrRegistry );
     }
-
-
-    public void modifyRn( NextInterceptor next, LdapDN oldName, String newRDN, boolean deleteOldRDN )
-        throws NamingException
+    
+    
+    @Override
+    public void move( NextInterceptor next, OperationContext opContext ) throws NamingException
     {
-        Operation op = operationFactory.newModifyRn( oldName, newRDN, deleteOldRDN );
+        MoveOperationContext moveOpContext = (MoveOperationContext) opContext;
+        Operation op = operationFactory.newMove( moveOpContext.getDn(), moveOpContext.getParent() );
         op.execute( nexus, store, attrRegistry );
     }
-
-
-    public void move( NextInterceptor next, LdapDN oldName, LdapDN newParentName, String newRDN, boolean deleteOldRDN )
-        throws NamingException
+    
+    
+    @Override
+    public void moveAndRename( NextInterceptor next, OperationContext opContext ) throws NamingException
     {
-        Operation op = operationFactory.newMove( oldName, newParentName, newRDN, deleteOldRDN );
+        MoveAndRenameOperationContext moveAndRenameOpContext = (MoveAndRenameOperationContext) opContext;
+        Operation op = operationFactory.newMove( moveAndRenameOpContext.getDn(), moveAndRenameOpContext.getParent(), moveAndRenameOpContext.getNewRdn(), moveAndRenameOpContext.getDelOldDn() );
         op.execute( nexus, store, attrRegistry );
     }
-
-
-    public void move( NextInterceptor next, LdapDN oldName, LdapDN newParentName ) throws NamingException
+    
+    
+    @Override
+    public void rename( NextInterceptor next, OperationContext opContext ) throws NamingException
     {
-        Operation op = operationFactory.newMove( oldName, newParentName );
+        RenameOperationContext renameOpContext = (RenameOperationContext) opContext;
+        Operation op = operationFactory.newModifyRn( renameOpContext.getDn(), renameOpContext.getNewRdn(), renameOpContext.getDelOldDn() );
         op.execute( nexus, store, attrRegistry );
     }
 
@@ -481,12 +489,13 @@
     }
 
 
-    public NamingEnumeration list( NextInterceptor nextInterceptor, LdapDN baseName ) throws NamingException
+    @Override
+    public NamingEnumeration list( NextInterceptor next, OperationContext opContext ) throws NamingException
     {
         DirContext ctx = ( DirContext ) InvocationStack.getInstance().peek().getCaller();
-        NamingEnumeration e = nextInterceptor.search(
+        NamingEnumeration e = next.search(
             new SearchOperationContext( 
-                baseName, ctx.getEnvironment(),
+                opContext.getDn(), ctx.getEnvironment(),
                 new PresenceNode( SchemaConstants.OBJECT_CLASS_AT_OID ),
                 new SearchControls() ) );
 
@@ -495,9 +504,12 @@
     }
 
 
-    public NamingEnumeration search( NextInterceptor nextInterceptor, LdapDN baseName, Map environment, ExprNode filter,
-        SearchControls searchControls ) throws NamingException
+    @Override
+    public NamingEnumeration<SearchResult> search( NextInterceptor next, OperationContext opContext ) throws NamingException
     {
+        SearchOperationContext searchOpContext = (SearchOperationContext) opContext;
+        SearchControls searchControls = searchOpContext.getSearchControls();
+        
         if ( searchControls.getReturningAttributes() != null )
         {
             String[] oldAttrIds = searchControls.getReturningAttributes();
@@ -507,8 +519,8 @@
             searchControls.setReturningAttributes( newAttrIds );
         }
         
-        NamingEnumeration e = nextInterceptor.search( 
-            new SearchOperationContext( baseName, environment, filter, searchControls ) );
+        NamingEnumeration e = next.search( 
+            new SearchOperationContext( searchOpContext.getDn(), searchOpContext.getEnv(), searchOpContext.getFilter(), searchControls ) );
         return new SearchResultFilteringEnumeration( e, searchControls, InvocationStack.getInstance().peek(),
             Constants.DELETED_ENTRIES_FILTER, "Search Replication filter" );
     }

Modified: directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceITest.java?view=diff&rev=552568&r1=552567&r2=552568
==============================================================================
--- directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceITest.java (original)
+++ directory/apacheds/trunk/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceITest.java Mon Jul  2 12:26:23 2007
@@ -30,6 +30,7 @@
 
 import javax.naming.Context;
 import javax.naming.InitialContext;
+import javax.naming.NamingException;
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
 import javax.naming.ldap.InitialLdapContext;
@@ -48,6 +49,7 @@
 import org.apache.directory.server.core.configuration.MutableStartupConfiguration;
 import org.apache.directory.server.core.configuration.ShutdownConfiguration;
 import org.apache.directory.server.core.jndi.CoreContextFactory;
+import org.apache.directory.shared.ldap.exception.LdapNameNotFoundException;
 import org.apache.directory.shared.ldap.message.AttributesImpl;
 import org.apache.mina.util.AvailablePortFinder;
 
@@ -72,21 +74,11 @@
         destroyAllReplicas();
     }
 
-    public void testOneWayBind() throws Exception
+    public void testOneWay() throws Exception
     {
-        LdapContext ctxA = getReplicaContext( "A" );
-        LdapContext ctxB = getReplicaContext( "B" );
-        LdapContext ctxC = getReplicaContext( "C" );
-
-        Attributes entry = new AttributesImpl( true );
-        entry.put( "cn", "test" );
-        entry.put( "objectClass", "top" );
-        ctxA.bind( "cn=test,ou=system", entry );
-
-        Thread.sleep( 7000 );
-
-        Assert.assertNotNull( ctxB.lookup( "cn=test,ou=system" ) );
-        Assert.assertNotNull( ctxC.lookup( "cn=test,ou=system" ) );
+        String dn1 = "cn=test,ou=system";
+        testOneWayBind( dn1 );
+        testOneWayUnbind( dn1 );
     }
     
     public void _testTwoWayBind() throws Exception
@@ -112,6 +104,52 @@
         Assert.assertEquals( "B", getAttributeValue( ctxA, "cn=test,ou=system", "ou" ) );
         Assert.assertEquals( "B", getAttributeValue( ctxB, "cn=test,ou=system", "ou" ) );
         Assert.assertEquals( "B", getAttributeValue( ctxC, "cn=test,ou=system", "ou" ) );
+    }
+    
+    private void testOneWayBind( String dn ) throws Exception
+    {
+        LdapContext ctxA = getReplicaContext( "A" );
+        LdapContext ctxB = getReplicaContext( "B" );
+        LdapContext ctxC = getReplicaContext( "C" );
+        
+        Attributes entry = new AttributesImpl( true );
+        entry.put( "cn", "test" );
+        entry.put( "objectClass", "top" );
+        ctxA.bind( dn, entry );
+
+        Thread.sleep( 7000 );
+
+        Assert.assertNotNull( ctxB.lookup( dn ) );
+        Assert.assertNotNull( ctxC.lookup( dn ) );
+    }
+    
+    private void testOneWayUnbind( String dn ) throws Exception
+    {
+        LdapContext ctxA = getReplicaContext( "A" );
+        LdapContext ctxB = getReplicaContext( "B" );
+        LdapContext ctxC = getReplicaContext( "C" );
+        
+        ctxA.unbind( dn );
+        
+        Thread.sleep( 7000 );
+        
+        assertNotExists( ctxA, dn );
+        assertNotExists( ctxB, dn );
+        assertNotExists( ctxC, dn );
+    }
+    
+    private void assertNotExists( LdapContext ctx, String dn ) throws NamingException
+    {
+        try
+        {
+            ctx.lookup( dn );
+        }
+        catch ( LdapNameNotFoundException e )
+        {
+            // This is expected so return immediately.
+            return;
+        }
+        throw new AssertionError( "The entry exists" );
     }
     
     private String getAttributeValue( LdapContext ctx, String name, String attrName ) throws Exception