]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb2/back-bdb2.h
Fix maxDeref directive
[openldap] / servers / slapd / back-bdb2 / back-bdb2.h
1 /* back-bdb2.h - ldap bdb2 back-end header file */
2
3 #ifndef _BACK_BDB2_H_
4 #define _BACK_BDB2_H_
5
6 #include "ldbm.h"
7 #include "db.h"
8
9 LDAP_BEGIN_DECL
10
11 #define DEFAULT_CACHE_SIZE      1000
12
13 /*  since DEFAULT_DB_PAGE_SIZE is 1K, we have 128K,
14         which is suggested by Sleepycat  */
15 #define DEFAULT_DBCACHE_SIZE (128 * DEFAULT_DB_PAGE_SIZE)
16
17 #define DEFAULT_DB_DIRECTORY    "/usr/tmp"
18 #define DEFAULT_DB_HOME         "/usr/tmp"
19 #define DEFAULT_MODE            0600
20
21 #define SUBLEN                  3
22
23 #define BDB2_SUFFIX     ".bdb2"
24
25
26 /*
27  * there is a single index for each attribute.  these prefixes insure
28  * that there is no collision among keys.
29  */
30 #define EQ_PREFIX       '='     /* prefix for equality keys     */
31 #define APPROX_PREFIX   '~'     /* prefix for approx keys       */
32 #define SUB_PREFIX      '*'     /* prefix for substring keys    */
33 #define CONT_PREFIX     '\\'    /* prefix for continuation keys */
34
35 #define UNKNOWN_PREFIX  '?'     /* prefix for unknown keys    */
36
37 #define DEFAULT_BLOCKSIZE       8192
38
39 /*
40  * This structure represents an id block on disk and an id list
41  * in core.
42  *
43  * The fields have the following meanings:
44  *
45  *      b_nmax  maximum number of ids in this block. if this is == ALLIDSBLOCK,
46  *              then this block represents all ids.
47  *      b_nids  current number of ids in use in this block.  if this
48  *              is == INDBLOCK, then this block is an indirect block
49  *              containing a list of other blocks containing actual ids.
50  *              the list is terminated by an id of NOID.
51  *      b_ids   a list of the actual ids themselves
52  */
53
54 typedef ID ID_BLOCK;
55
56 #define ID_BLOCK_NMAX_OFFSET    0
57 #define ID_BLOCK_NIDS_OFFSET    1
58 #define ID_BLOCK_IDS_OFFSET             2
59
60 /* all ID_BLOCK macros operate on a pointer to a ID_BLOCK */
61
62 #define ID_BLOCK_NMAX(b)                ((b)[ID_BLOCK_NMAX_OFFSET])
63 #define ID_BLOCK_NIDS(b)                ((b)[ID_BLOCK_NIDS_OFFSET])
64 #define ID_BLOCK_ID(b, n)               ((b)[ID_BLOCK_IDS_OFFSET+(n)])
65
66 #define ID_BLOCK_NOID(b, n)             (ID_BLOCK_ID((b),(n)) == NOID)
67
68 #define ID_BLOCK_ALLIDS_VALUE   0
69 #define ID_BLOCK_ALLIDS(b)              (ID_BLOCK_NMAX(b) == ID_BLOCK_ALLIDS_VALUE)
70
71 #define ID_BLOCK_INDIRECT_VALUE 0
72 #define ID_BLOCK_INDIRECT(b)    (ID_BLOCK_NIDS(b) == ID_BLOCK_INDIRECT_VALUE)
73
74 /* for the in-core cache of entries */
75 struct cache {
76         int             c_maxsize;
77         int             c_cursize;
78         Avlnode         *c_dntree;
79         Avlnode         *c_idtree;
80         Entry           *c_lruhead;     /* lru - add accessed entries here */
81         Entry           *c_lrutail;     /* lru - rem lru entries from here */
82         ldap_pvt_thread_mutex_t c_mutex;
83 };
84
85 #define CACHE_READ_LOCK         0
86 #define CACHE_WRITE_LOCK        1
87
88 /* for the cache of open index files (re-used for txn) */
89 struct dbcache {
90         int                     dbc_refcnt;
91         int                     dbc_maxids;
92         int                     dbc_maxindirect;
93         long            dbc_blksize;
94         char            *dbc_name;
95         LDBM            dbc_db;
96
97         struct dbcache   *next;
98 };
99
100 typedef  struct dbcache  BDB2_TXN_FILES;
101
102
103 /* for the cache of attribute information (which are indexed, etc.) */
104 struct attrinfo {
105         char    *ai_type;       /* type name (cn, sn, ...)      */
106         int     ai_indexmask;   /* how the attr is indexed      */
107 #define INDEX_PRESENCE  0x01
108 #define INDEX_EQUALITY  0x02
109 #define INDEX_APPROX    0x04
110 #define INDEX_SUB       0x08
111 #define INDEX_UNKNOWN   0x10
112 #define INDEX_FROMINIT  0x20
113         int     ai_syntaxmask;  /* what kind of syntax          */
114 /* ...from slap.h...
115 #define SYNTAX_CIS      0x01
116 #define SYNTAX_CES      0x02
117 #define SYNTAX_BIN      0x04
118    ... etc. ...
119 */
120 };
121
122 #define MAXDBCACHE      10
123
124 /* this could be made an option */
125 #ifndef SLAPD_NEXTID_CHUNK
126 #define SLAPD_NEXTID_CHUNK      32
127 #endif
128
129
130 /*  TP stuff  */
131
132 typedef  struct _bdb2_txn_head {
133
134         /*  log size and timer to control checkpoints  */
135         u_int32_t        txn_log;
136         u_int32_t        txn_time;
137
138         /*  a list of all DB files in use  */
139         BDB2_TXN_FILES   *dbFiles;
140
141         /*  we have five fixed files  */
142 #define  BDB2_DB_DN_FILE            0
143 #define  BDB2_DB_DN2ID_FILE         1
144 #define  BDB2_DB_ID2ENTRY_FILE      2
145 #define  BDB2_DB_ID2CHILDREN_FILE   3
146 #define  BDB2_DB_OC_IDX_FILE        4
147
148         /*  a database handle for the NEXTID file
149                 (must be opened like all DB files at startup
150                 and closed on shutdown  */
151         LDBM             nextidFile;
152
153         /*  is the default attribute index set to non-none  */
154         int              withDefIDX;
155 #define  BDB2_WITH_DEF_IDX          1
156
157         /*  a handle for the backend's environment  */
158         DB_ENV           **dbenvH;
159
160 } BDB2_TXN_HEAD;
161
162
163 /*  end of TP stuff  */
164
165
166 /*  the private description of a backend type  */
167 struct ldbtype {
168         char                    *lty_dbhome;
169         size_t                  lty_mpsize;
170         int                             lty_betiming;
171 };
172
173 #define with_timing(bi) (((struct ldbtype *) \
174                         (bi)->bi_private)->lty_betiming == 1)
175
176 /*  The DB environment  */
177 extern DB_ENV       bdb2i_dbEnv;
178
179
180 /*  the private description of a database  */
181 struct ldbminfo {
182         ID                      li_nextid;
183 #if SLAPD_NEXTID_CHUNK > 1
184         ID                      li_nextid_wrote;
185 #endif
186         char            *li_nextid_file;
187         int                     li_mode;
188         char                    *li_directory;
189         struct cache            li_cache;
190         Avlnode                 *li_attrs;
191         int                     li_dbcachesize;
192         int                     li_dbcachewsync;
193
194         /*  a list of all files of the database  */
195         BDB2_TXN_HEAD           li_txn_head;
196
197 };
198
199
200 #include "proto-back-bdb2.h"
201
202 LDAP_END_DECL
203
204 #endif /* _back_bdb2_h_ */