You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by Emmanuel Lécharny <el...@gmail.com> on 2013/02/22 14:33:42 UTC

AapcheDS startup sequence

Hi guys,

I have listed the startup and initialization sequence for a default
configuration. Here is the (impressive) list of actions we do. I have
added some comments (between [ and ]) when I think we are doing
something wrong of incorrect or duplicate some effort.

I will also do the same thing for the shutdown process : the two list
should likely fit (if all is good...)

This is FYI but you are free to give some feedback.

ApacheDS start
--------------

service <- new ApacheDirectoryService()
service.start()
  cacheService <- new CacheService()
  cacheService.initialize()
  initSchemaManager
    extract ldif schema if it does not exist
    create a schemaManager
    load the enabled schema
  initSchemaLdifPartition
  initConfigPartition
    extract connfiguration
    create the configuration partition
    initialize the configuration partition
      initialize the LdifPartition
        initialize the AvlPartition
     load all entries
  read the configuration
  initialize the DirectoryService
    service <- new DefaultDirectoryService()
      create the codec service
      create the DefaultOperationManager
      create the subentry cache [Should use the general cache]
      create the default ChangeLog [should not be done inconditionally]
      create the default Journal [should not be done inconditionally]
      create the CsnFactory
      create the SubtreEvaluator
      set the default interceptor list
        create the list of default interceptors
      store the schemaManager in the service
      create the interceptors
        for each enabled interceptor
          instanciate the interceptor
          if it's the Authn interceptor
            create each authenticator
            create each PasswordPolicy
      create the partitions (system, user partitions)
        for each enabled partition
          create partition
            for each index
              create index
            load the context entry
      store the system partition in the service
      store the other partitions in the service
      create the changeLog [already done]
      load test entries if any
      create the schema partition
      service startup
        create the shutdown hook thread
        initialize()
          initialize the cache service [it should never be null][it's
already initialized]
          create the AP caches
          create the DN factory using the dnCache
          initialize the schema partition
            initialize the ldifPartition
              initialize the AvlPartition
                create the EvaluatorBuilder
                create the CursorBuilder
                create the Optimizer
                create the SearchEngine
                create the Master table
                initialize the AbstractBtreePartition
                  create the system indexes (presence, rdn, alias,
oneAlias, subAlis, ObjectClass, entryCsn, AdministrativeRole)
                load the entries from disk or create a contextEntry
            create a registrySynchronizer
          create an Admin session
          create the DefaultPartitionNexus
          create the partitionLookupTree
          update the rootDSE entry [should be done in the service]
          initialize the DefaultPartitionNexus
            add the system partition to the contextPartitions
              initialize the system partition
                initialize the JdbmPartition
                  create the Optimizer
                    create the EvaluatorBuilder
                    create the CursorBuilder
                  create the SearchEngine
                  initialize the AbstractBtreePartition
                    create the system indexes (presence, rdn, alias,
oneAlias, subAlis, ObjectClass, entryCsn, AdministrativeRole)
                    create the user indexes
                  create the Master table
                  load the contextEntry
            add the schema partition to the contextPartitions
            add the config partition to the contextPartitions
            add the example partition to the contextPartitions
              initialize the example partition
                initialize the JdbmPartition
                  create the Optimizer
                  create the EvaluatorBuilder
                  create the CursorBuilder
                  create the SearchEngine
                  initialize the AbstractBtreePartition
                    create the system indexes (presence, rdn, alias,
oneAlias, subAlis, ObjectClass, entryCsn, AdministrativeRole)
                    create the user indexes
                  create the Master table
                  load the contextEntry
          initialize the system partition [Already done before]
          create the bootstrap entries
          initialize the interceptors
            for each interceptor
              init
              the authnInterceptor init :
                set the defaults authenticators
                load the PasswordPolicy  state
          if changeLog is enabled
            init changeLog
          if journal is enabled
            init journal
        show security warnings
        get the lastest CSN
        create the test entries
      if we just extracted the config
        update the file with the modifications
      if the schema has just been extracted
        uodate the file with the modifications
  start the LDAP server
    create the LDAP server
      create a LdapSessionManager
      create the LDapProtocolHandler
      create the transports
        create the LDAP and LDAPS transports
      init the transports
        create an Acceptor   
          create a NioSocketAcceptor
      load the SaslMechanismHandlers (NTLM, DIGEST-MD5, GSSAPI, SIMPLE,
GSS-SPNEGO, CRAM-MD5)
      load the extended operations (starttlshandler, storedprochandler,
gracefulShutdownHandler)
      if replication is enabled
        create a new SyncReplRequestHandler provider
        create the consumers
          create a new ReplicationConsumerImpl
          load the consumer configuration
      print LDAP banner
      start the server
        load the keyStore
          if we don't depend on an external keystore file, use the info
in uid=admin
        load the KeyManagerFactory
        init the KeyManagerFactory
        for each transport
          if SSL enabled
            initialize SSL
              create a SSLContext
              initialize the SSLContext
              add the SSL filter in the MINA chain
              add the LDAP codec in the MINA chain
              add an executor in the MINA chain
              start the network
                inject the chain in the Accpetor
                configure the Acceptor
                inject the handlers in the Acceptor
                bind the Acceptor
        initialize the LDAP handlers [Should have been done before the
bind done on the Acceptor]
        register the extended operations [Should have been done before
the bind done on the Acceptor]
        register the SASL mechanisms [Should have been done before the
bind done on the Acceptor]
        start the replication producer
        start the consumers
  start the NTP server
    // To be done
  start the Kerberos server
    create the KDC server
    // To be done
  start the HTTP server
    // To be done

-- 
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com