]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-meta/init.c
Fix cursor initialization, scope IDs
[openldap] / servers / slapd / back-meta / init.c
index c5efee02a2b232dcfad8c5ff28716ae19da8c31b..07612765c77c2c0d843ca61924dc30ec883b7430 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2001 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  *
  * Copyright 2001, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
@@ -95,6 +95,8 @@ meta_back_initialize(
                BackendInfo     *bi
 )
 {
+       bi->bi_controls = slap_known_controls;
+
        bi->bi_open = 0;
        bi->bi_config = 0;
        bi->bi_close = 0;
@@ -118,8 +120,6 @@ meta_back_initialize(
 
        bi->bi_extended = 0;
 
-       bi->bi_acl_group = meta_back_group;
-       bi->bi_acl_attribute = meta_back_attribute;
        bi->bi_chk_referrals = 0;
 
        bi->bi_connection_init = 0;
@@ -135,6 +135,59 @@ meta_back_db_init(
 {
        struct metainfo *li;
 
+#ifdef LDAP_CACHING
+       struct rewrite_info     *rwinfo;
+       cache_manager           *cm;
+       query_manager           *qm;
+
+       rwinfo = rewrite_info_init( REWRITE_MODE_USE_DEFAULT );
+       if ( rwinfo == NULL ) {
+               return -1;
+       }
+               
+       cm = (cache_manager *)ch_malloc(sizeof(cache_manager)); 
+       if ( cm == NULL ) {
+               rewrite_info_delete( rwinfo );
+               return -1;
+       }
+
+       qm = (query_manager*)ch_malloc(sizeof(query_manager)); 
+       if ( qm == NULL ) {
+               rewrite_info_delete( rwinfo );
+               ch_free( cm );
+               return -1;
+       }
+
+        cm->caching = 0; 
+        cm->qm = qm; 
+       cm->numattrsets = 0; 
+       cm->numtemplates = 0;   
+        cm->num_entries_limit = 5;
+       cm->cache_size = 0;
+       cm->thresh_hi = 500000;
+       cm->thresh_lo = 700000;
+       cm->num_cached_queries = 0; 
+       cm->total_entries = 0; 
+       cm->max_queries = 10000; 
+       cm->threads = 0; 
+       cm->consistency_time = slap_get_time(); 
+       cm->consistency_cycle_time = 1000; 
+       
+       qm->attr_sets = NULL; 
+       qm->templates = NULL; 
+       qm->lru_top = NULL;
+       qm->lru_bottom = NULL;
+
+       qm->qcfunc = query_containment; 
+       qm->crfunc = cache_replacement; 
+       qm->addfunc = add_query; 
+        ldap_pvt_thread_mutex_init(&qm->lru_mutex); 
+        
+        ldap_pvt_thread_mutex_init(&cm->cache_mutex); 
+        ldap_pvt_thread_mutex_init(&cm->remove_mutex); 
+       ldap_pvt_thread_mutex_init( &cm->consistency_mutex );
+#endif /* LDAP_CACHING */
+
        li = ch_calloc( 1, sizeof( struct metainfo ) );
        if ( li == NULL ) {
                return -1;
@@ -145,6 +198,11 @@ meta_back_db_init(
         * this may change
         */
        li->defaulttarget = META_DEFAULT_TARGET_NONE;
+#ifdef LDAP_CACHING
+       li->cm = cm; 
+       li->rwinfo = rwinfo;
+       /* FIXME: what about qm ? */
+#endif /* LDAP_CACHING */
 
        ldap_pvt_thread_mutex_init( &li->conn_mutex );
        ldap_pvt_thread_mutex_init( &li->cache.mutex );
@@ -155,19 +213,19 @@ meta_back_db_init(
 
 static void
 conn_free( 
-       struct metaconn *lc
+       void *v_lc
 )
 {
-       struct metasingleconn **lsc;
+       struct metaconn *lc = v_lc;
+       struct metasingleconn *lsc;
 
-       for ( lsc = lc->conns; lsc[ 0 ] != NULL; lsc++ ) {
-               if ( lsc[ 0 ]->ld != NULL ) {
-                       ldap_unbind( lsc[ 0 ]->ld );
+       for ( lsc = lc->conns; !META_LAST(lsc); lsc++ ) {
+               if ( lsc->ld != NULL ) {
+                       ldap_unbind( lsc->ld );
                }
-               if ( lsc[ 0 ]->bound_dn ) {
-                       ber_bvfree( lsc[ 0 ]->bound_dn );
+               if ( lsc->bound_dn.bv_val ) {
+                       ber_memfree( lsc->bound_dn.bv_val );
                }
-               free( lsc[ 0 ] );
        }
        free( lc->conns );
        free( lc );
@@ -203,9 +261,9 @@ target_free(
                rewrite_info_delete( lt->rwinfo );
        }
        avl_free( lt->oc_map.remap, NULL );
-       avl_free( lt->oc_map.map, ( AVL_FREE )mapping_free );
+       avl_free( lt->oc_map.map, mapping_free );
        avl_free( lt->at_map.remap, NULL );
-       avl_free( lt->at_map.map, ( AVL_FREE )mapping_free );
+       avl_free( lt->at_map.map, mapping_free );
 }
 
 int
@@ -226,13 +284,9 @@ meta_back_db_destroy(
                ldap_pvt_thread_mutex_lock( &li->conn_mutex );
 
                if ( li->conntree ) {
-                       avl_free( li->conntree,
-                                       ( AVL_FREE )conn_free );
+                       avl_free( li->conntree, conn_free );
                }
 
-               ldap_pvt_thread_mutex_unlock( &li->cache.mutex );
-               ldap_pvt_thread_mutex_destroy( &li->cache.mutex );
-
                /*
                 * Destroy the per-target stuff (assuming there's at
                 * least one ...)
@@ -246,14 +300,14 @@ meta_back_db_destroy(
 
                ldap_pvt_thread_mutex_lock( &li->cache.mutex );
                if ( li->cache.tree ) {
-                       avl_free( li->cache.tree,
-                                       ( AVL_FREE )meta_dncache_free );
+                       avl_free( li->cache.tree, meta_dncache_free );
                }
                
                ldap_pvt_thread_mutex_unlock( &li->cache.mutex );
                ldap_pvt_thread_mutex_destroy( &li->cache.mutex );
 
-                                               
+               ldap_pvt_thread_mutex_unlock( &li->conn_mutex );
+               ldap_pvt_thread_mutex_destroy( &li->conn_mutex );
        }
 
        free( be->be_private );