]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb2/init.c
6a3f55eb8ef2a68d76a24f594f0aa7c4742a458b
[openldap] / servers / slapd / back-bdb2 / init.c
1 /* init.c - initialize bdb2 backend */
2
3 #include "portable.h"
4
5 #include <stdio.h>
6
7 #include <ac/string.h>
8 #include <ac/socket.h>
9
10 #include "slap.h"
11 #include "back-bdb2.h"
12
13
14 int
15 bdb2_back_initialize(
16     BackendInfo *bi
17 )
18 {
19         bi->bi_open = bdb2_back_open;
20         bi->bi_config = NULL;
21         bi->bi_close = bdb2_back_close;
22         bi->bi_destroy = bdb2_back_destroy;
23
24         bi->bi_db_init = bdb2_back_db_init;
25         bi->bi_db_config = bdb2_back_db_config;
26         bi->bi_db_open = bdb2_back_db_open;
27         bi->bi_db_close = bdb2_back_db_close;
28         bi->bi_db_destroy = bdb2_back_db_destroy;
29
30         bi->bi_op_bind = bdb2_back_bind;
31         bi->bi_op_unbind = bdb2_back_unbind;
32         bi->bi_op_search = bdb2_back_search;
33         bi->bi_op_compare = bdb2_back_compare;
34         bi->bi_op_modify = bdb2_back_modify;
35         bi->bi_op_modrdn = bdb2_back_modrdn;
36         bi->bi_op_add = bdb2_back_add;
37         bi->bi_op_delete = bdb2_back_delete;
38         bi->bi_op_abandon = bdb2_back_abandon;
39
40         bi->bi_acl_group = bdb2_back_group;
41
42         return 0;
43 }
44
45 int
46 bdb2_back_destroy(
47     BackendInfo *bi
48 )
49 {
50         return 0;
51 }
52
53 int
54 bdb2_back_open(
55     BackendInfo *bi
56 )
57 {
58         int rc;
59
60         /* initialize the underlying database system */
61         rc = bdb2_initialize();
62
63         return rc;
64 }
65
66 int
67 bdb2_back_close(
68     BackendInfo *bi
69 )
70 {
71         /* close the underlying database system */
72         bdb2_shutdown();
73
74         return 0;
75 }
76
77 /*  BDB2 changed  */
78 static int
79 bdb2i_back_db_init_internal(
80     Backend     *be
81 )
82 {
83         struct ldbminfo *li;
84         char            *argv[ 4 ];
85         int             i;
86
87         /* allocate backend-specific stuff */
88         li = (struct ldbminfo *) ch_calloc( 1, sizeof(struct ldbminfo) );
89
90         /* arrange to read nextid later (on first request for it) */
91         li->li_nextid = NOID;
92 #if     SLAPD_NEXTID_CHUNCK > 1
93         li->li_nextid_wrote = NOID
94 #endif
95
96         /* default cache size */
97         li->li_cache.c_maxsize = DEFAULT_CACHE_SIZE;
98
99         /* default database cache size */
100         li->li_dbcachesize = DEFAULT_DBCACHE_SIZE;
101
102         /* default cache mode is sync on write */
103         li->li_dbcachewsync = 1;
104
105         /* default file creation mode */
106         li->li_mode = DEFAULT_MODE;
107
108         /* default database directory */
109         li->li_directory = DEFAULT_DB_DIRECTORY;
110
111         /* always index dn, id2children, objectclass (used in some searches) */
112         argv[ 0 ] = "dn";
113         argv[ 1 ] = "dn";
114         argv[ 2 ] = NULL;
115         attr_syntax_config( "ldbm dn initialization", 0, 2, argv );
116         argv[ 0 ] = "dn";
117         argv[ 1 ] = "sub";
118         argv[ 2 ] = "eq";
119         argv[ 3 ] = NULL;
120         bdb2i_attr_index_config( li, "ldbm dn initialization", 0, 3, argv, 1 );
121         argv[ 0 ] = "id2children";
122         argv[ 1 ] = "eq";
123         argv[ 2 ] = NULL;
124         bdb2i_attr_index_config( li, "ldbm id2children initialization", 0, 2, argv,
125             1 );
126         argv[ 0 ] = "objectclass";
127         argv[ 1 ] = ch_strdup( "pres,eq" );
128         argv[ 2 ] = NULL;
129         bdb2i_attr_index_config( li, "ldbm objectclass initialization", 0, 2, argv,
130             1 );
131         free( argv[ 1 ] );
132
133         /* initialize various mutex locks & condition variables */
134         ldap_pvt_thread_mutex_init( &li->li_root_mutex );
135         ldap_pvt_thread_mutex_init( &li->li_add_mutex );
136         ldap_pvt_thread_mutex_init( &li->li_cache.c_mutex );
137         ldap_pvt_thread_mutex_init( &li->li_nextid_mutex );
138         ldap_pvt_thread_mutex_init( &li->li_dbcache_mutex );
139         ldap_pvt_thread_cond_init( &li->li_dbcache_cv );
140
141         /*  initialize the TP file head  */
142         bdb2i_txn_head_init( &li->li_txn_head );
143
144         be->be_private = li;
145
146         return 0;
147 }
148
149
150 int
151 bdb2_back_db_init(
152     Backend     *be
153 )
154 {
155         struct timeval  time1, time2;
156         char   *elapsed_time;
157         int    ret;
158
159         gettimeofday( &time1, NULL );
160
161         ret = bdb2i_back_db_init_internal( be );
162
163         if ( bdb2i_do_timing ) {
164
165                 gettimeofday( &time2, NULL);
166                 elapsed_time = bdb2i_elapsed( time1, time2 );
167                 Debug( LDAP_DEBUG_ANY, "INIT elapsed=%s\n",
168                                 elapsed_time, 0, 0 );
169                 free( elapsed_time );
170
171         }
172
173         return( ret );
174 }
175
176
177 int
178 bdb2_back_db_open(
179     BackendDB   *be
180 )
181 {
182         return 0;
183 }
184
185 int
186 bdb2_back_db_destroy(
187     BackendDB   *be
188 )
189 {
190         /* should free/destroy every in be_private */
191         free( be->be_private );
192         be->be_private = NULL;
193         return 0;
194 }
195
196