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