You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2011/04/04 12:35:24 UTC

svn commit: r1088546 - in /directory/apacheds/trunk: protocol-ldap/src/main/java/org/apache/directory/server/ldap/ server-config/src/main/java/org/apache/directory/server/config/beans/ server-config/src/main/resources/ service-builder/src/main/java/org...

Author: kayyagari
Date: Mon Apr  4 10:35:24 2011
New Revision: 1088546

URL: http://svn.apache.org/viewvc?rev=1088546&view=rev
Log:
o added support for reading replication configuration and starting the replication consumers
o added a new entry in config.ldif for holding the replication consumer configuration


Modified:
    directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java
    directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/LdapServerBean.java
    directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/ReplConsumerBean.java
    directory/apacheds/trunk/server-config/src/main/resources/config.ldif
    directory/apacheds/trunk/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java

Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java?rev=1088546&r1=1088545&r2=1088546&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapServer.java Mon Apr  4 10:35:24 2011
@@ -53,9 +53,8 @@ import org.apache.directory.server.ldap.
 import org.apache.directory.server.ldap.handlers.bind.MechanismHandler;
 import org.apache.directory.server.ldap.handlers.extended.StartTlsHandler;
 import org.apache.directory.server.ldap.handlers.ssl.LdapsInitializer;
+import org.apache.directory.server.ldap.replication.ReplicationConsumer;
 import org.apache.directory.server.ldap.replication.ReplicationRequestHandler;
-import org.apache.directory.server.ldap.replication.SyncReplConsumer;
-import org.apache.directory.server.ldap.replication.SyncreplConfiguration;
 import org.apache.directory.server.protocol.shared.DirectoryBackedService;
 import org.apache.directory.server.protocol.shared.transport.TcpTransport;
 import org.apache.directory.server.protocol.shared.transport.Transport;
@@ -65,7 +64,6 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.extras.controls.SyncInfoValue;
 import org.apache.directory.shared.ldap.extras.controls.SyncRequestValue;
 import org.apache.directory.shared.ldap.extras.controls.SyncStateValue;
-import org.apache.directory.shared.ldap.model.message.extended.NoticeOfDisconnect;
 import org.apache.directory.shared.ldap.model.constants.SaslQoP;
 import org.apache.directory.shared.ldap.model.exception.LdapConfigurationException;
 import org.apache.directory.shared.ldap.model.message.AbandonRequest;
@@ -85,6 +83,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.model.message.controls.PagedResults;
 import org.apache.directory.shared.ldap.model.message.controls.PersistentSearch;
 import org.apache.directory.shared.ldap.model.message.controls.Subentries;
+import org.apache.directory.shared.ldap.model.message.extended.NoticeOfDisconnect;
 import org.apache.directory.shared.util.Strings;
 import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
 import org.apache.mina.core.filterchain.IoFilterChainBuilder;
@@ -213,9 +212,7 @@ public class LdapServer extends Director
 
     private ReplicationRequestHandler replicationReqHandler;
 
-    private List<SyncreplConfiguration> providerConfigs;
-
-    private List<SyncReplConsumer> replConsumers;
+    private List<ReplicationConsumer> replConsumers;
 
 
     /**
@@ -636,11 +633,9 @@ public class LdapServer extends Director
      */
     private void startConsumers() throws Exception
     {
-        if ( providerConfigs != null )
+        if ( replConsumers != null )
         {
-            replConsumers = new ArrayList<SyncReplConsumer>( providerConfigs.size() );
-
-            for ( final SyncreplConfiguration config : providerConfigs )
+            for ( final ReplicationConsumer consumer : replConsumers )
             {
                 Runnable consumerTask = new Runnable()
                 {
@@ -648,16 +643,14 @@ public class LdapServer extends Director
                     {
                         try
                         {
-                            SyncReplConsumer consumer = new SyncReplConsumer();
-                            LOG.info( "starting the replication consumer with config {}", config );
-                            consumer.init( getDirectoryService(), config );
-                            consumer.connect();
+                            LOG.info( "starting the replication consumer with config {}", consumer );
+                            consumer.init( getDirectoryService() );
                             replConsumers.add( consumer );
-                            consumer.startSync();
+                            consumer.start();
                         }
                         catch ( Exception e )
                         {
-                            LOG.error( "Failed to start the consumer with config {}", config );
+                            LOG.error( "Failed to start the consumer with config {}", consumer );
                             throw new RuntimeException( e );
                         }
                     }
@@ -678,10 +671,10 @@ public class LdapServer extends Director
     {
         if ( replConsumers != null )
         {
-            for ( SyncReplConsumer consumer : replConsumers )
+            for ( ReplicationConsumer consumer : replConsumers )
             {
-                LOG.info( "stopping the consumer with id {}", consumer.getConfig().getReplicaId() );
-                consumer.disconnet();
+                LOG.info( "stopping the consumer with id {}", consumer.getId() );
+                consumer.stop();
             }
         }
     }
@@ -1331,9 +1324,9 @@ public class LdapServer extends Director
     }
 
 
-    public void setReplProviderConfigs( List<SyncreplConfiguration> providerConfigs )
+    public void setReplConsumers( List<ReplicationConsumer> replConsumers )
     {
-        this.providerConfigs = providerConfigs;
+        this.replConsumers = replConsumers;
     }
 
 

Modified: directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/LdapServerBean.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/LdapServerBean.java?rev=1088546&r1=1088545&r2=1088546&view=diff
==============================================================================
--- directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/LdapServerBean.java (original)
+++ directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/LdapServerBean.java Mon Apr  4 10:35:24 2011
@@ -65,13 +65,13 @@ public class LdapServerBean extends DSBa
     @ConfigurationElement(attributeType = "ads-certificatePassword")
     private String certificatePassword;
 
-    /** tells if the replication is enabled */
-    @ConfigurationElement(attributeType = "ads-enableReplProvider")
-    private boolean enableReplProvider;
+    /** the replication request handler, server will be in replication provider/master mode if a valid FQCN is given */
+    @ConfigurationElement(attributeType = "ads-replReqHandler")
+    private String replReqHandler;
 
     /** The replication consumer Bean */
-    @ConfigurationElement
-    private ReplConsumerBean replConsumer;
+    @ConfigurationElement(attributeType = "ads-replConsumers", container = "replConsumers")
+    private List<ReplConsumerBean> replConsumers;
 
     /** The replication producer Bean */
     @ConfigurationElement
@@ -255,38 +255,20 @@ public class LdapServerBean extends DSBa
 
 
     /**
-     * @return the replProviderImpl
-     *
-    public ReplicationProviderBean getReplProviderImpl()
-    {
-        return replProviderImpl;
-    }
-
-    
-    /**
-     * @param replProviderImpl the replProviderImpl to set
-     *
-    public void setReplProviderImpl( ReplicationProviderBean replProviderImpl )
-    {
-        this.replProviderImpl = replProviderImpl;
-    }
-
-    
-    /**
-     * @return the enableReplProvider
+     * @return the replReqHandler
      */
-    public boolean isEnableReplProvider()
+    public String getReplReqHandler()
     {
-        return enableReplProvider;
+        return replReqHandler;
     }
 
 
     /**
-     * @param enableReplProvider the enableReplProvider to set
+     * @param replReqHandler the replReqHandler to set
      */
-    public void setEnableReplProvider( boolean enableReplProvider )
+    public void setReplReqHandler( String replReqHandler )
     {
-        this.enableReplProvider = enableReplProvider;
+        this.replReqHandler = replReqHandler;
     }
 
 
@@ -354,22 +336,34 @@ public class LdapServerBean extends DSBa
     /**
      * @return the Replication Consumer Bean
      */
-    public ReplConsumerBean getReplConsumer()
+    public List<ReplConsumerBean> getReplConsumers()
     {
-        return replConsumer;
+        return replConsumers;
     }
 
 
     /**
-     * @param replConsumer the Replication Consumer Bean to set
+     * @param replConsumers the Replication Consumer Bean to set
      */
-    public void setReplConsumer( ReplConsumerBean replConsumer )
+    public void setReplConsumer( List<ReplConsumerBean> replConsumers )
     {
-        this.replConsumer = replConsumer;
+        this.replConsumers = replConsumers;
     }
 
 
     /**
+     * @param replConsumers the Replication Consumer Bean to set
+     */
+    public void addReplConsumers( ReplConsumerBean... replConsumers )
+    {
+        for( ReplConsumerBean bean : replConsumers )
+        {
+            this.replConsumers.add( bean );
+        }
+    }
+
+    
+    /**
      * @return the replProvider
      */
     public ReplProviderBean getReplProvider()
@@ -403,7 +397,7 @@ public class LdapServerBean extends DSBa
         sb.append( toString( tabs, "  sasl principal", saslPrincipal ) );
         sb.append( tabs ).append( "  sasl host : " ).append( saslHost ).append( '\n' );
         sb.append( toString( tabs, "  confidentiality required", confidentialityRequired ) );
-        sb.append( toString( tabs, "  enable replication provider", enableReplProvider ) );
+        sb.append( toString( tabs, "  enable replication provider", replReqHandler ) );
 
         if ( ( extendedOpHandlers != null ) && ( extendedOpHandlers.size() > 0 ) )
         {
@@ -435,11 +429,16 @@ public class LdapServerBean extends DSBa
             }
         }
 
-        if ( replConsumer != null )
+        if ( ( replConsumers != null ) && ( replConsumers.size() > 0 ) )
         {
-            sb.append( tabs ).append( replConsumer.toString( tabs + "  " ) );
-        }
+            sb.append( tabs ).append( "  replication consumers :\n" );
 
+            for ( ReplConsumerBean replConsumer : replConsumers )
+            {
+                sb.append( replConsumer.toString( tabs + "    " ) );
+            }
+        }
+        
         if ( replProvider != null )
         {
             sb.append( tabs ).append( replProvider.toString( tabs + "  " ) );

Modified: directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/ReplConsumerBean.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/ReplConsumerBean.java?rev=1088546&r1=1088545&r2=1088546&view=diff
==============================================================================
--- directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/ReplConsumerBean.java (original)
+++ directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/beans/ReplConsumerBean.java Mon Apr  4 10:35:24 2011
@@ -75,6 +75,9 @@ public class ReplConsumerBean extends Ad
     @ConfigurationElement(attributeType = "ads-replPeerCertificate")
     private String replPeerCertificate;
 
+    /** The FQCN of replication client implementation */
+    @ConfigurationElement(attributeType = "ads-replConsumerImpl")
+    private String replConsumerImpl;
 
     /**
      * Create a new Replication Consumer instance
@@ -287,6 +290,24 @@ public class ReplConsumerBean extends Ad
 
 
     /**
+     * @return the replConsumerImpl
+     */
+    public String getReplConsumerImpl()
+    {
+        return replConsumerImpl;
+    }
+
+
+    /**
+     * @param replConsumerImpl the replConsumerImpl to set
+     */
+    public void setReplConsumerImpl( String replConsumerImpl )
+    {
+        this.replConsumerImpl = replConsumerImpl;
+    }
+
+
+    /**
      * {@inheritDoc}
      */
     public String toString( String tabs )
@@ -296,6 +317,7 @@ public class ReplConsumerBean extends Ad
         sb.append( tabs ).append( "Replication consumer :\n" );
         sb.append( super.toString( tabs + "  " ) );
 
+        sb.append( tabs ).append( "  consumer implementation's FQCN : " ).append( replConsumerImpl ).append( '\n' );
         sb.append( tabs ).append( "  consumer ID : " ).append( replConsumerId ).append( '\n' );
         sb.append( tabs ).append( "  replica ID : " ).append( dsReplicaId ).append( '\n' );
         sb.append( tabs ).append( "  last sent CSN : " ).append( replLastSentCsn ).append( '\n' );

Modified: directory/apacheds/trunk/server-config/src/main/resources/config.ldif
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-config/src/main/resources/config.ldif?rev=1088546&r1=1088545&r2=1088546&view=diff
==============================================================================
--- directory/apacheds/trunk/server-config/src/main/resources/config.ldif (original)
+++ directory/apacheds/trunk/server-config/src/main/resources/config.ldif Mon Apr  4 10:35:24 2011
@@ -700,7 +700,6 @@ ads-saslRealms: example.com
 ads-saslRealms: apache.org
 ads-searchBaseDN: ou=users,ou=system
 ads-enabled: TRUE
-ads-enableReplProvider: FALSE
 ads-transports: ldap
 ads-transports: ldaps
 ads-saslmechhandlers: CRAM-MD5
@@ -713,6 +712,11 @@ ads-extendedophandlers: gracefulShutdown
 ads-extendedophandlers: starttlshandler
 ads-extendedophandlers: storedprochandler
 
+dn: ou=replConsumers,ads-serverId=ldapServer,ou=servers,ads-directoryServiceId=default,ou=config
+objectClass: organizationalUnit
+objectClass: top
+ou: replConsumers
+
 dn: ou=transports,ads-serverId=ldapServer,ou=servers,ads-directoryServiceId=default,ou=config
 ou: transports
 objectclass: organizationalUnit

Modified: directory/apacheds/trunk/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java?rev=1088546&r1=1088545&r2=1088546&view=diff
==============================================================================
--- directory/apacheds/trunk/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java (original)
+++ directory/apacheds/trunk/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java Mon Apr  4 10:35:24 2011
@@ -51,6 +51,7 @@ import org.apache.directory.server.confi
 import org.apache.directory.server.config.beans.NtpServerBean;
 import org.apache.directory.server.config.beans.PartitionBean;
 import org.apache.directory.server.config.beans.PasswordPolicyBean;
+import org.apache.directory.server.config.beans.ReplConsumerBean;
 import org.apache.directory.server.config.beans.SaslMechHandlerBean;
 import org.apache.directory.server.config.beans.SimpleAuthenticatorBean;
 import org.apache.directory.server.config.beans.StrongAuthenticatorBean;
@@ -85,8 +86,10 @@ import org.apache.directory.server.ldap.
 import org.apache.directory.server.ldap.LdapServer;
 import org.apache.directory.server.ldap.handlers.bind.MechanismHandler;
 import org.apache.directory.server.ldap.handlers.bind.ntlm.NtlmMechanismHandler;
+import org.apache.directory.server.ldap.replication.ReplicationConsumer;
 import org.apache.directory.server.ldap.replication.ReplicationRequestHandler;
-import org.apache.directory.server.ldap.replication.SyncReplRequestHandler;
+import org.apache.directory.server.ldap.replication.SyncReplConsumer;
+import org.apache.directory.server.ldap.replication.SyncreplConfiguration;
 import org.apache.directory.server.ntp.NtpServer;
 import org.apache.directory.server.protocol.shared.transport.TcpTransport;
 import org.apache.directory.server.protocol.shared.transport.Transport;
@@ -99,6 +102,8 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.model.ldif.LdapLdifException;
 import org.apache.directory.shared.ldap.model.ldif.LdifEntry;
 import org.apache.directory.shared.ldap.model.ldif.LdifReader;
+import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
+import org.apache.directory.shared.ldap.model.message.SearchScope;
 import org.apache.directory.shared.ldap.model.schema.AttributeType;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.slf4j.Logger;
@@ -910,22 +915,11 @@ public class ServiceBuilder
             }
         }
 
-        // PasswordPolicy
-        // TODO
+        // ReplReqHandler
+        String fqcn = ldapServerBean.getReplReqHandler();
         
-        // ReplProvider
-        if ( ldapServerBean.isEnableReplProvider() )
+        if ( fqcn != null )
         {
-            //EntryAttribute replProvImplAttr = ldapServerEntry.get( ConfigSchemaConstants.ADS_REPL_PROVIDER_IMPL );
-            
-            String fqcn = ldapServerBean.getReplProvider().getReplAttribute();
-            
-            if ( fqcn == null )
-            {
-                // default replication provider
-                fqcn = SyncReplRequestHandler.class.getName();
-            }
-            
             try
             {
                 Class<?> replProvImplClz = Class.forName( fqcn );
@@ -934,24 +928,87 @@ public class ServiceBuilder
             }
             catch( Exception e )
             {
-                String message = "Failed to load and instantiate ReplicationRequestHandler implementation : " + e.getMessage();
+                String message = "Failed to load and instantiate ReplicationRequestHandler implementation : " + fqcn;
                 LOG.error( message );
                 throw new ConfigurationException( message );
             }
             
-            // TODO
-            // ldapServer.setReplProviderConfigs( createReplProviderConfigs() );
         }
         
-        // ReplConsumer
-        // TODO 
+        ldapServer.setReplConsumers( createReplConsumers( ldapServerBean.getReplConsumers() ) );
         
-
         return ldapServer;
     }
     
     
     /**
+     * instantiate the ReplicationConsumers based on the configuration present in ReplConsumerBeans
+     * 
+     * @param replConsumerBeans the list of consumers configured
+     * @return a list of ReplicationConsumer instances
+     * @throws ConfigurationException
+     */
+    public static List<ReplicationConsumer> createReplConsumers( List<ReplConsumerBean> replConsumerBeans ) throws ConfigurationException
+    {
+        List<ReplicationConsumer> lst = new ArrayList<ReplicationConsumer>();
+
+        if( replConsumerBeans == null )
+        {
+            return lst;
+        }
+        
+        for ( ReplConsumerBean replBean : replConsumerBeans )
+        {
+            String className = replBean.getReplConsumerImpl();
+            
+            
+            ReplicationConsumer consumer = null;
+            Class<?> consumerClass = null;
+            SyncreplConfiguration config = null;
+            
+            try
+            {
+                if( className == null )
+                {
+                    consumerClass = SyncReplConsumer.class; 
+                }
+                else
+                {
+                    consumerClass = Class.forName( className );
+                }
+                
+                consumer = ( ReplicationConsumer ) consumerClass.newInstance();
+                
+                // we don't support any other configuration impls atm, but this configuration should suffice for many needs
+                config = new SyncreplConfiguration();
+                
+                config.setReplicaId( Integer.parseInt( replBean.getDsreplicaid() ) );
+                config.setAliasDerefMode( AliasDerefMode.getDerefMode( replBean.getReplAliasDerefMode() ) );
+                config.setBaseDn( replBean.getSearchBaseDn().getName() );
+                
+                int scope = SearchScope.getSearchScope( replBean.getReplSearchScope() );
+                config.setSearchScope( SearchScope.getSearchScope( scope ) );
+                
+                config.setFilter( replBean.getReplSearchFilter() );
+                config.setRefreshNPersist( replBean.isReplRefreshNPersist() );
+                config.setUseTls( replBean.isReplUseTls() );
+                config.setStrictCertVerification( replBean.isReplStrictCertValidation() );
+                
+                consumer.setConfig( config );
+                
+                lst.add( consumer );
+            }
+            catch( Exception e )
+            {
+                throw new ConfigurationException( "cannot configure the replication consumer with FQCN " + className, e );
+            }
+        }
+        
+        return lst;
+    }
+    
+    
+    /**
      * Create a new instance of a JdbmIndex from an instance of JdbmIndexBean
      * 
      * @param JdbmIndexBean The JdbmIndexBean to convert