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