]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb2/init.c
Change 'unsigned long len' to ber_len_t in get_filter()
[openldap] / servers / slapd / back-bdb2 / init.c
index 6a3f55eb8ef2a68d76a24f594f0aa7c4742a458b..593405061b3754db9ae3928eda754bceba69b392 100644 (file)
 #include "slap.h"
 #include "back-bdb2.h"
 
+#ifdef SLAPD_BDB2_DYNAMIC
+#include <gmodule.h>
+
+G_MODULE_EXPORT void init_module(int argc, char *argv[]) {
+   BackendInfo bi;
+
+   bi.bi_type = "bdb2";
+   bi.bi_init = bdb2_back_initialize;
+
+   backend_add(&bi);
+}
+
+#endif /* SLAPD_BDB2_DYNAMIC */
+
+static int
+bdb2i_back_init_private(
+    BackendInfo        *bi
+)
+{
+       struct ldbtype  *bt;
+
+       /*  allocate backend-type-specific stuff */
+       bt = (struct ldbtype *) ch_calloc( 1, sizeof(struct ldbtype) );
+
+       bt->lty_dbhome = DEFAULT_DB_HOME;
+       bt->lty_mpsize = DEFAULT_DBCACHE_SIZE;
+
+       if ( slapMode == SLAP_TIMEDSERVER_MODE )
+               bt->lty_betiming = 1;
+
+       bi->bi_private = bt;
+
+       return 0;
+}
+
 
 int
 bdb2_back_initialize(
     BackendInfo        *bi
 )
 {
+       int  ret;
+
        bi->bi_open = bdb2_back_open;
-       bi->bi_config = NULL;
+       bi->bi_config = bdb2_back_config;
        bi->bi_close = bdb2_back_close;
        bi->bi_destroy = bdb2_back_destroy;
 
@@ -37,9 +74,17 @@ bdb2_back_initialize(
        bi->bi_op_delete = bdb2_back_delete;
        bi->bi_op_abandon = bdb2_back_abandon;
 
+       bi->bi_entry_release_rw = bdb2_back_entry_release_rw;
        bi->bi_acl_group = bdb2_back_group;
 
-       return 0;
+       bi->bi_connection_init = 0;
+       bi->bi_connection_destroy = 0;
+
+       ret = bdb2i_back_init_private( bi );
+
+       Debug( LDAP_DEBUG_TRACE, "bdb2_back_initialize: done (%d).\n", ret, 0, 0 );
+
+       return( ret );
 }
 
 int
@@ -55,10 +100,19 @@ bdb2_back_open(
     BackendInfo        *bi
 )
 {
+       static int initialized = 0;
        int rc;
 
+       if ( initialized++ ) {
+
+               Debug( LDAP_DEBUG_TRACE,
+                               "bdb2_back_open: backend already initialized.\n", 0, 0, 0 );
+               return 0;
+
+       }
+
        /* initialize the underlying database system */
-       rc = bdb2_initialize();
+       rc = bdb2i_back_startup( bi );
 
        return rc;
 }
@@ -68,29 +122,30 @@ bdb2_back_close(
     BackendInfo        *bi
 )
 {
+       int  rc;
+
        /* close the underlying database system */
-       bdb2_shutdown();
+       rc = bdb2i_back_shutdown( bi );
 
-       return 0;
+       return rc;
 }
 
 /*  BDB2 changed  */
 static int
 bdb2i_back_db_init_internal(
-    Backend    *be
+    BackendDB  *be
 )
 {
        struct ldbminfo *li;
        char            *argv[ 4 ];
-       int             i;
 
-       /* allocate backend-specific stuff */
+       /* allocate backend-database-specific stuff */
        li = (struct ldbminfo *) ch_calloc( 1, sizeof(struct ldbminfo) );
 
        /* arrange to read nextid later (on first request for it) */
        li->li_nextid = NOID;
-#if    SLAPD_NEXTID_CHUNCK > 1
-       li->li_nextid_wrote = NOID
+#if    SLAPD_NEXTID_CHUNK > 1
+       li->li_nextid_wrote = NOID;
 #endif
 
        /* default cache size */
@@ -109,37 +164,34 @@ bdb2i_back_db_init_internal(
        li->li_directory = DEFAULT_DB_DIRECTORY;
 
        /* always index dn, id2children, objectclass (used in some searches) */
+       if ( !at_find( "dn" ) ) {
+               argv[ 0 ] = "dn";
+               argv[ 1 ] = "dn";
+               argv[ 2 ] = NULL;
+               attr_syntax_config( "ldbm dn initialization", 0, 2, argv );
+       }
        argv[ 0 ] = "dn";
-       argv[ 1 ] = "dn";
+       argv[ 1 ] = "eq,sub";
        argv[ 2 ] = NULL;
-       attr_syntax_config( "ldbm dn initialization", 0, 2, argv );
-       argv[ 0 ] = "dn";
-       argv[ 1 ] = "sub";
-       argv[ 2 ] = "eq";
-       argv[ 3 ] = NULL;
-       bdb2i_attr_index_config( li, "ldbm dn initialization", 0, 3, argv, 1 );
+       bdb2i_attr_index_config( li, "ldbm dn initialization", 0, 2, argv, 1 );
        argv[ 0 ] = "id2children";
        argv[ 1 ] = "eq";
        argv[ 2 ] = NULL;
        bdb2i_attr_index_config( li, "ldbm id2children initialization", 0, 2, argv,
            1 );
        argv[ 0 ] = "objectclass";
-       argv[ 1 ] = ch_strdup( "pres,eq" );
+       argv[ 1 ] = "pres,eq";
        argv[ 2 ] = NULL;
        bdb2i_attr_index_config( li, "ldbm objectclass initialization", 0, 2, argv,
            1 );
        free( argv[ 1 ] );
 
-       /* initialize various mutex locks & condition variables */
-       ldap_pvt_thread_mutex_init( &li->li_root_mutex );
-       ldap_pvt_thread_mutex_init( &li->li_add_mutex );
+       /*  initialize the cache mutex */
        ldap_pvt_thread_mutex_init( &li->li_cache.c_mutex );
-       ldap_pvt_thread_mutex_init( &li->li_nextid_mutex );
-       ldap_pvt_thread_mutex_init( &li->li_dbcache_mutex );
-       ldap_pvt_thread_cond_init( &li->li_dbcache_cv );
 
        /*  initialize the TP file head  */
-       bdb2i_txn_head_init( &li->li_txn_head );
+       if ( bdb2i_txn_head_init( &li->li_txn_head ) != 0 )
+               return 1;
 
        be->be_private = li;
 
@@ -149,26 +201,16 @@ bdb2i_back_db_init_internal(
 
 int
 bdb2_back_db_init(
-    Backend    *be
+    BackendDB  *be
 )
 {
-       struct timeval  time1, time2;
-       char   *elapsed_time;
-       int    ret;
+       struct timeval  time1;
+       int             ret;
 
-       gettimeofday( &time1, NULL );
+       bdb2i_start_timing( be->bd_info, &time1 );
 
        ret = bdb2i_back_db_init_internal( be );
-
-       if ( bdb2i_do_timing ) {
-
-               gettimeofday( &time2, NULL);
-               elapsed_time = bdb2i_elapsed( time1, time2 );
-               Debug( LDAP_DEBUG_ANY, "INIT elapsed=%s\n",
-                               elapsed_time, 0, 0 );
-               free( elapsed_time );
-
-       }
+       bdb2i_stop_timing( be->bd_info, time1, "DB-INIT", NULL, NULL );
 
        return( ret );
 }
@@ -179,7 +221,11 @@ bdb2_back_db_open(
     BackendDB  *be
 )
 {
-       return 0;
+       int  rc;
+
+       rc = bdb2_back_db_startup( be );
+
+       return( rc );
 }
 
 int