]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb2/init.c
slap_set_time() is no longer necessary.
[openldap] / servers / slapd / back-bdb2 / init.c
index 6a3f55eb8ef2a68d76a24f594f0aa7c4742a458b..d1725f5f594f8a7dea1300ff5114eb91bfac5930 100644 (file)
 #include "back-bdb2.h"
 
 
+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 +61,15 @@ bdb2_back_initialize(
        bi->bi_op_delete = bdb2_back_delete;
        bi->bi_op_abandon = bdb2_back_abandon;
 
+#ifdef SLAPD_ACLGROUPS
        bi->bi_acl_group = bdb2_back_group;
+#endif
 
-       return 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 +85,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,23 +107,24 @@ 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) */
@@ -130,16 +170,12 @@ bdb2i_back_db_init_internal(
            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 +185,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 +205,11 @@ bdb2_back_db_open(
     BackendDB  *be
 )
 {
-       return 0;
+       int  rc;
+
+       rc = bdb2_back_db_startup( be );
+
+       return( rc );
 }
 
 int