]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/proto-bdb.h
Berkeley DB congestion avoidance
[openldap] / servers / slapd / back-bdb / proto-bdb.h
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 2000-2003 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6
7 #ifndef _PROTO_BDB_H
8 #define _PROTO_BDB_H
9
10 LDAP_BEGIN_DECL
11
12 #ifdef BDB_HIER
13 #define BDB_SYMBOL(x)   LDAP_CONCAT(hdb_,x)
14 #else
15 #define BDB_SYMBOL(x)   LDAP_CONCAT(bdb_,x)
16 #endif
17
18 /*
19  * attr.c
20  */
21
22 #define bdb_attr_mask                           BDB_SYMBOL(attr_mask)
23 #define bdb_attr_index_config           BDB_SYMBOL(attr_index_config)
24 #define bdb_attr_index_destroy          BDB_SYMBOL(attr_index_destroy)
25
26 void bdb_attr_mask( struct bdb_info *bdb,
27         AttributeDescription *desc,
28         slap_mask_t *indexmask );
29
30 int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
31         const char *fname, int lineno,
32         int argc, char **argv ));
33
34 void bdb_attr_index_destroy LDAP_P(( Avlnode *tree ));
35
36 /*
37  * dbcache.c
38  */
39 #define bdb_db_cache                            BDB_SYMBOL(db_cache)
40
41 int
42 bdb_db_cache(
43     Backend     *be,
44     DB_TXN *tid,
45     const char *name,
46         DB **db );
47
48 /*
49  * dn2entry.c
50  */
51 #define bdb_dn2entry                            BDB_SYMBOL(dn2entry)
52
53 int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid,
54         struct berval *dn, EntryInfo **e, int matched,
55         u_int32_t locker, DB_LOCK *lock ));
56
57 /*
58  * dn2id.c
59  */
60 #define bdb_dn2id                                       BDB_SYMBOL(dn2id)
61 #define bdb_dn2id_add                           BDB_SYMBOL(dn2id_add)
62 #define bdb_dn2id_delete                        BDB_SYMBOL(dn2id_delete)
63 #define bdb_dn2id_children                      BDB_SYMBOL(dn2id_children)
64 #define bdb_dn2idl                                      BDB_SYMBOL(dn2idl)
65
66 int bdb_dn2id(
67         Operation *op,
68         DB_TXN *tid,
69         struct berval *dn,
70         EntryInfo *ei );
71
72 int bdb_dn2id_add(
73         Operation *op,
74         DB_TXN *tid,
75         EntryInfo *eip,
76         Entry *e );
77
78 int bdb_dn2id_delete(
79         Operation *op,
80         DB_TXN *tid,
81         EntryInfo *eip,
82         Entry *e );
83
84 int bdb_dn2id_children(
85         Operation *op,
86         DB_TXN *tid,
87         Entry *e );
88
89 int bdb_dn2idl(
90         Operation *op,
91         Entry *e,
92         ID *ids,
93         ID *stack );
94
95 #ifdef BDB_HIER
96 #define bdb_dn2id_parent                        BDB_SYMBOL(dn2id_parent)
97 #define bdb_dup_compare                         BDB_SYMBOL(dup_compare)
98 #define bdb_fix_dn                                      BDB_SYMBOL(fix_dn)
99
100 int bdb_dn2id_parent(
101         Operation *op,
102         DB_TXN *txn,
103         EntryInfo *ei,
104         ID *idp );
105
106 int bdb_dup_compare(
107         DB *db,
108         const DBT *usrkey,
109         const DBT *curkey );
110
111 int bdb_fix_dn( Entry *e, int checkit );
112 #endif
113
114
115 /*
116  * error.c
117  */
118 #define bdb_errcall                                     BDB_SYMBOL(errcall)
119
120 void bdb_errcall( const char *pfx, char * msg );
121
122 #ifdef HAVE_EBCDIC
123 #define ebcdic_dberror                          BDB_SYMBOL(ebcdic_dberror)
124
125 char *ebcdic_dberror( int rc );
126 #define db_strerror(x)  ebcdic_dberror(x)
127 #endif
128
129 /*
130  * filterentry.c
131  */
132 #define bdb_filter_candidates           BDB_SYMBOL(filter_candidates)
133
134 int bdb_filter_candidates(
135         Operation *op,
136         Filter  *f,
137         ID *ids,
138         ID *tmp,
139         ID *stack );
140
141 /*
142  * id2entry.c
143  */
144 #define bdb_id2entry                            BDB_SYMBOL(id2entry)
145 #define bdb_id2entry_add                        BDB_SYMBOL(id2entry_add)
146 #define bdb_id2entry_update                     BDB_SYMBOL(id2entry_update)
147 #define bdb_id2entry_delete                     BDB_SYMBOL(id2entry_delete)
148
149 int bdb_id2entry_add(
150         BackendDB *be,
151         DB_TXN *tid,
152         Entry *e );
153
154 int bdb_id2entry_update(
155         BackendDB *be,
156         DB_TXN *tid,
157         Entry *e );
158
159 int bdb_id2entry_delete(
160         BackendDB *be,
161         DB_TXN *tid,
162         Entry *e);
163
164 int bdb_id2entry(
165         BackendDB *be,
166         DB_TXN *tid,
167         ID id,
168         Entry **e);
169
170 #define bdb_entry_free                          BDB_SYMBOL(entry_free)
171 #define bdb_entry_return                        BDB_SYMBOL(entry_return)
172 #define bdb_entry_release                       BDB_SYMBOL(entry_release)
173 #define bdb_entry_get                           BDB_SYMBOL(entry_get)
174
175 void bdb_entry_free ( Entry *e );
176 int bdb_entry_return( Entry *e );
177 BI_entry_release_rw bdb_entry_release;
178 BI_entry_get_rw bdb_entry_get;
179
180
181 /*
182  * idl.c
183  */
184 #ifdef SLAP_IDL_CACHE
185
186 #define bdb_idl_cache_get                       BDB_SYMBOL(idl_cache_get)
187 #define bdb_idl_cache_put                       BDB_SYMBOL(idl_cache_put)
188 #define bdb_idl_cache_del                       BDB_SYMBOL(idl_cache_del)
189
190 int bdb_idl_cache_get(
191         struct bdb_info *bdb,
192         DB *db,
193         DBT *key,
194         ID *ids );
195
196 void
197 bdb_idl_cache_put(
198         struct bdb_info *bdb,
199         DB              *db,
200         DBT             *key,
201         ID              *ids,
202         int             rc );
203
204 void
205 bdb_idl_cache_del(
206         struct bdb_info *bdb,
207         DB              *db,
208         DBT             *key );
209 #endif
210
211 #define bdb_idl_first                           BDB_SYMBOL(idl_first)
212 #define bdb_idl_next                            BDB_SYMBOL(idl_next)
213 #define bdb_idl_search                          BDB_SYMBOL(idl_search)
214 #define bdb_idl_insert                          BDB_SYMBOL(idl_insert)
215 #define bdb_idl_intersection            BDB_SYMBOL(idl_intersection)
216 #define bdb_idl_union                           BDB_SYMBOL(idl_union)
217
218 #define bdb_idl_fetch_key                       BDB_SYMBOL(idl_fetch_key)
219 #define bdb_idl_insert_key                      BDB_SYMBOL(idl_insert_key)
220 #define bdb_idl_delete_key                      BDB_SYMBOL(idl_delete_key)
221
222 unsigned bdb_idl_search( ID *ids, ID id );
223
224 int bdb_idl_fetch_key(
225         BackendDB *be,
226         DB *db,
227         DB_TXN *txn,
228         DBT *key,
229         ID *ids );
230
231 int bdb_idl_insert( ID *ids, ID id );
232
233 int bdb_idl_insert_key(
234         BackendDB *be,
235         DB *db,
236         DB_TXN *txn,
237         DBT *key,
238         ID id );
239
240 int bdb_idl_delete_key(
241         BackendDB *be,
242         DB *db,
243         DB_TXN *txn,
244         DBT *key,
245         ID id );
246
247 int
248 bdb_idl_intersection(
249         ID *a,
250         ID *b );
251
252 int
253 bdb_idl_union(
254         ID *a,
255         ID *b );
256
257 ID bdb_idl_first( ID *ids, ID *cursor );
258 ID bdb_idl_next( ID *ids, ID *cursor );
259
260
261 #define bdb_bt_compare                          BDB_SYMBOL(bt_compare)
262
263 int bdb_bt_compare(
264         DB *db,
265         const DBT *a,
266         const DBT *b );
267
268
269 /*
270  * index.c
271  */
272 #define bdb_index_is_indexed            BDB_SYMBOL(index_is_indexed)
273 #define bdb_index_param                         BDB_SYMBOL(index_param)
274 #define bdb_index_values                        BDB_SYMBOL(index_values)
275 #define bdb_index_entry                         BDB_SYMBOL(index_entry)
276
277 extern int
278 bdb_index_is_indexed LDAP_P((
279         Backend *be,
280         AttributeDescription *desc ));
281
282 extern int
283 bdb_index_param LDAP_P((
284         Backend *be,
285         AttributeDescription *desc,
286         int ftype,
287         DB **db,
288         slap_mask_t *mask,
289         struct berval *prefix ));
290
291 extern int
292 bdb_index_values LDAP_P((
293         Operation *op,
294         DB_TXN *txn,
295         AttributeDescription *desc,
296         BerVarray vals,
297         BerVarray xvals,
298         ID id,
299         int opid ));
300
301 int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e ));
302
303 #define bdb_index_entry_add(be,t,e) \
304         bdb_index_entry((be),(t),SLAP_INDEX_ADD_OP,(e))
305 #define bdb_index_entry_del(be,t,e) \
306         bdb_index_entry((be),(t),SLAP_INDEX_DELETE_OP,(e))
307
308 /*
309  * init.c
310  */
311 #define bdb_uuid                                        BDB_SYMBOL(uuid)
312
313 extern struct berval bdb_uuid;
314
315 /*
316  * key.c
317  */
318 #define bdb_key_read                            BDB_SYMBOL(key_read)
319 #define bdb_key_change                          BDB_SYMBOL(key_change)
320
321 extern int
322 bdb_key_read(
323     Backend     *be,
324         DB *db,
325         DB_TXN *txn,
326     struct berval *k,
327         ID *ids );
328
329 extern int
330 bdb_key_change(
331     Backend      *be,
332     DB *db,
333         DB_TXN *txn,
334     struct berval *k,
335     ID id,
336     int op );
337         
338 /*
339  * nextid.c
340  */
341 #define bdb_next_id                                     BDB_SYMBOL(next_id)
342 #define bdb_last_id                                     BDB_SYMBOL(last_id)
343
344 int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *id );
345 int bdb_last_id( BackendDB *be, DB_TXN *tid );
346
347 /*
348  * modify.c
349  */
350 #define bdb_modify_internal                     BDB_SYMBOL(modify_internal)
351
352 int bdb_modify_internal(
353         Operation *op,
354         DB_TXN *tid,
355         Modifications *modlist,
356         Entry *e,
357         const char **text,
358         char *textbuf,
359         size_t textlen );
360
361 /*
362  * passwd.c
363  */
364 #define bdb_exop_passwd                         BDB_SYMBOL(exop_passwd)
365
366 BI_op_extended bdb_exop_passwd;
367
368
369 /*
370  * cache.c
371  */
372 #define bdb_cache_entry_db_unlock       BDB_SYMBOL(cache_entry_db_unlock)
373
374 #define bdb_cache_entryinfo_lock(e) \
375         ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
376 #define bdb_cache_entryinfo_unlock(e) \
377         ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex )
378
379 /* What a mess. Hopefully the current cache scheme will stabilize
380  * and we can trim out all of this stuff.
381  */
382 #if 0
383 void bdb_cache_return_entry_rw( DB_ENV *env, Cache *cache, Entry *e,
384         int rw, DB_LOCK *lock );
385 #else
386 #define bdb_cache_return_entry_rw( env, cache, e, rw, lock ) \
387         bdb_cache_entry_db_unlock( env, lock )
388 #define bdb_cache_return_entry( env, lock ) \
389         bdb_cache_entry_db_unlock( env, lock )
390 #endif
391 #define bdb_cache_return_entry_r(env, c, e, l) \
392         bdb_cache_return_entry_rw((env), (c), (e), 0, (l))
393 #define bdb_cache_return_entry_w(env, c, e, l) \
394         bdb_cache_return_entry_rw((env), (c), (e), 1, (l))
395 #if 0
396 void bdb_unlocked_cache_return_entry_rw( Cache *cache, Entry *e, int rw );
397 #else
398 #define bdb_unlocked_cache_return_entry_rw( a, b, c )
399 #endif
400 #define bdb_unlocked_cache_return_entry_r( c, e ) \
401         bdb_unlocked_cache_return_entry_rw((c), (e), 0)
402 #define bdb_unlocked_cache_return_entry_w( c, e ) \
403         bdb_unlocked_cache_return_entry_rw((c), (e), 1)
404
405 #define bdb_cache_add                           BDB_SYMBOL(cache_add)
406 #define bdb_cache_children                      BDB_SYMBOL(cache_children)
407 #define bdb_cache_delete                        BDB_SYMBOL(cache_delete)
408 #define bdb_cache_delete_cleanup                BDB_SYMBOL(cache_delete_cleanup)
409 #define bdb_cache_find_id                       BDB_SYMBOL(cache_find_id)
410 #define bdb_cache_find_ndn                      BDB_SYMBOL(cache_find_ndn)
411 #define bdb_cache_modify                        BDB_SYMBOL(cache_modify)
412 #define bdb_cache_modrdn                        BDB_SYMBOL(cache_modrdn)
413 #define bdb_cache_release_all           BDB_SYMBOL(cache_release_all)
414
415 int bdb_cache_children(
416         Operation *op,
417         DB_TXN *txn,
418         Entry *e
419 );
420 int bdb_cache_add(
421         struct bdb_info *bdb,
422         EntryInfo *pei,
423         Entry   *e,
424         struct berval *nrdn,
425         u_int32_t locker
426 );
427 int bdb_cache_modrdn(
428         Entry   *e,
429         struct berval *nrdn,
430         Entry   *new,
431         EntryInfo *ein,
432         DB_ENV *env,
433         u_int32_t locker,
434         DB_LOCK *lock
435 );
436 int bdb_cache_modify(
437         Entry *e,
438         Attribute *newAttrs,
439         DB_ENV *env,
440         u_int32_t locker,
441         DB_LOCK *lock
442 );
443 int bdb_cache_find_ndn(
444         Operation *op,
445         DB_TXN  *txn,
446         struct berval   *ndn,
447         EntryInfo       **res,
448         u_int32_t       locker
449 );
450 int bdb_cache_find_id(
451         Operation *op,
452         DB_TXN  *tid,
453         ID              id,
454         EntryInfo **eip,
455         int     islocked,
456         u_int32_t       locker,
457         DB_LOCK         *lock
458 );
459 int bdb_cache_delete(
460         Cache   *cache,
461         Entry   *e,
462         DB_ENV  *env,
463         u_int32_t locker,
464         DB_LOCK *lock
465 );
466 void bdb_cache_delete_cleanup(
467         Entry   *e
468 );
469 void bdb_cache_release_all( Cache *cache );
470
471 #ifdef BDB_REUSE_LOCKERS
472
473 #define bdb_locker_id                           BDB_SYMBOL(locker_id)
474 int bdb_locker_id( Operation *op, DB_ENV *env, int *locker );
475
476 #define LOCK_ID_FREE(env, locker)
477 #define LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
478
479 #else
480
481 #define LOCK_ID_FREE(env, locker)       XLOCK_ID_FREE(env, locker)
482 #define LOCK_ID(env, locker)            XLOCK_ID(env, locker)
483
484 #endif
485
486 /*
487  * search.c
488  */
489
490 #ifdef LDAP_SYNC
491
492 #define bdb_abandon                                     BDB_SYMBOL(abandon)
493 #define bdb_cancel                                      BDB_SYMBOL(cancel)
494 #define bdb_do_search                           BDB_SYMBOL(do_search)
495
496 BI_op_abandon bdb_abandon;
497 BI_op_cancel bdb_cancel;
498
499 int bdb_do_search(
500         Operation       *op,
501         SlapReply       *rs,
502         Operation       *ps_op,
503         Entry           *entry,
504         int             psearch_type
505 );
506 #define bdb_psearch(op, rs, sop, e, ps_type)    bdb_do_search(op, rs, sop, e, ps_type)
507 #endif
508
509
510 #ifdef LDAP_SYNC
511 #define bdb_build_sync_state_ctrl       BDB_SYMBOL(build_sync_state_ctrl)
512 #define bdb_build_sync_done_ctrl        BDB_SYMBOL(build_sync_done_ctrl)
513 #define bdb_send_ldap_intermediate      BDB_SYMBOL(send_ldap_intermediate)
514
515 int
516 bdb_build_sync_state_ctrl(
517         Operation       *op,
518         SlapReply       *rs,
519         Entry           *e,
520         int             entry_sync_state,
521         LDAPControl     **ctrls,
522         int             num_ctrls,
523         int             send_cookie,
524         struct berval   *latest_entrycsn_bv     );
525
526 int
527 bdb_build_sync_done_ctrl(
528         Operation       *op,
529         SlapReply       *rs,
530         LDAPControl     **ctrls,
531         int             num_ctrls,
532         int             send_cookie,
533         struct berval   *latest_entrycsn_bv     );
534
535 int
536 bdb_send_ldap_intermediate(
537         Operation   *op,
538         SlapReply       *rs,
539         int         state,
540         struct berval *cookie );
541 #endif
542
543 /*
544  * trans.c
545  */
546
547 void
548 bdb_trans_backoff( int num_retries );
549
550 LDAP_END_DECL
551
552 #endif /* _PROTO_BDB_H */