~ubuntu-branches/ubuntu/trusty/openldap/trusty-updates

« back to all changes in this revision

Viewing changes to servers/slapd/back-mdb/back-mdb.h

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2012-01-23 10:01:13 UTC
  • mfrom: (1.3.4)
  • mto: This revision was merged to the branch mainline in revision 47.
  • Revision ID: package-import@ubuntu.com-20120123100113-z3mg83hvuplv9lyj
Tags: upstream-2.4.28
ImportĀ upstreamĀ versionĀ 2.4.28

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* back-mdb.h - mdb back-end header file */
 
2
/* $OpenLDAP$ */
 
3
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
 
4
 *
 
5
 * Copyright 2000-2011 The OpenLDAP Foundation.
 
6
 * All rights reserved.
 
7
 *
 
8
 * Redistribution and use in source and binary forms, with or without
 
9
 * modification, are permitted only as authorized by the OpenLDAP
 
10
 * Public License.
 
11
 *
 
12
 * A copy of this license is available in the file LICENSE in the
 
13
 * top-level directory of the distribution or, alternatively, at
 
14
 * <http://www.OpenLDAP.org/license.html>.
 
15
 */
 
16
 
 
17
#ifndef _BACK_MDB_H_
 
18
#define _BACK_MDB_H_
 
19
 
 
20
#include <portable.h>
 
21
#include "slap.h"
 
22
#include "mdb.h"
 
23
 
 
24
LDAP_BEGIN_DECL
 
25
 
 
26
#define MDB_TOOL_IDL_CACHING    1
 
27
 
 
28
#define DN_BASE_PREFIX          SLAP_INDEX_EQUALITY_PREFIX
 
29
#define DN_ONE_PREFIX           '%'
 
30
#define DN_SUBTREE_PREFIX       '@'
 
31
 
 
32
#define MDB_AD2ID               0
 
33
#define MDB_DN2ID               1
 
34
#define MDB_ID2ENTRY    2
 
35
#define MDB_NDB                 3
 
36
 
 
37
/* The default search IDL stack cache depth */
 
38
#define DEFAULT_SEARCH_STACK_DEPTH      16
 
39
 
 
40
/* The minimum we can function with */
 
41
#define MINIMUM_SEARCH_STACK_DEPTH      8
 
42
 
 
43
#define MDB_INDICES             128
 
44
 
 
45
#define MDB_MAXADS      65536
 
46
 
 
47
/* Default to 10MB max */
 
48
#define DEFAULT_MAPSIZE (10*1048576)
 
49
 
 
50
#ifdef LDAP_DEVEL
 
51
#define MDB_MONITOR_IDX
 
52
#endif /* LDAP_DEVEL */
 
53
 
 
54
typedef struct mdb_monitor_t {
 
55
        void            *mdm_cb;
 
56
        struct berval   mdm_ndn;
 
57
} mdb_monitor_t;
 
58
 
 
59
/* From ldap_rq.h */
 
60
struct re_s;
 
61
 
 
62
struct mdb_info {
 
63
        MDB_env         *mi_dbenv;
 
64
 
 
65
        /* DB_ENV parameters */
 
66
        /* The DB_ENV can be tuned via DB_CONFIG */
 
67
        char            *mi_dbenv_home;
 
68
        uint32_t        mi_dbenv_flags;
 
69
        int                     mi_dbenv_mode;
 
70
 
 
71
        size_t          mi_mapsize;
 
72
 
 
73
        slap_mask_t     mi_defaultmask;
 
74
        int                     mi_nattrs;
 
75
        struct mdb_attrinfo             **mi_attrs;
 
76
        void            *mi_search_stack;
 
77
        int                     mi_search_stack_depth;
 
78
        int                     mi_readers;
 
79
 
 
80
        int                     mi_txn_cp;
 
81
        uint32_t        mi_txn_cp_min;
 
82
        uint32_t        mi_txn_cp_kbyte;
 
83
        struct re_s             *mi_txn_cp_task;
 
84
        struct re_s             *mi_index_task;
 
85
 
 
86
        mdb_monitor_t   mi_monitor;
 
87
 
 
88
#ifdef MDB_MONITOR_IDX
 
89
        ldap_pvt_thread_mutex_t mi_idx_mutex;
 
90
        Avlnode         *mi_idx;
 
91
#endif /* MDB_MONITOR_IDX */
 
92
 
 
93
        int             mi_flags;
 
94
#define MDB_IS_OPEN             0x01
 
95
#define MDB_OPEN_INDEX  0x02
 
96
#define MDB_DEL_INDEX   0x08
 
97
#define MDB_RE_OPEN             0x10
 
98
 
 
99
        int mi_numads;
 
100
 
 
101
        MDB_dbi mi_dbis[MDB_NDB];
 
102
        AttributeDescription *mi_ads[MDB_MAXADS];
 
103
        int mi_adxs[MDB_MAXADS];
 
104
};
 
105
 
 
106
#define mi_id2entry     mi_dbis[MDB_ID2ENTRY]
 
107
#define mi_dn2id        mi_dbis[MDB_DN2ID]
 
108
#define mi_ad2id        mi_dbis[MDB_AD2ID]
 
109
 
 
110
typedef struct mdb_op_info {
 
111
        OpExtra         moi_oe;
 
112
        MDB_txn*        moi_txn;
 
113
        int                     moi_ref;
 
114
        char            moi_flag;
 
115
} mdb_op_info;
 
116
#define MOI_READER      0x01
 
117
#define MOI_FREEIT      0x02
 
118
 
 
119
/* Copy an ID "src" to pointer "dst" in big-endian byte order */
 
120
#define MDB_ID2DISK( src, dst ) \
 
121
        do { int i0; ID tmp; unsigned char *_p; \
 
122
                tmp = (src); _p = (unsigned char *)(dst);       \
 
123
                for ( i0=sizeof(ID)-1; i0>=0; i0-- ) {  \
 
124
                        _p[i0] = tmp & 0xff; tmp >>= 8; \
 
125
                } \
 
126
        } while(0)
 
127
 
 
128
/* Copy a pointer "src" to a pointer "dst" from big-endian to native order */
 
129
#define MDB_DISK2ID( src, dst ) \
 
130
        do { unsigned i0; ID tmp = 0; unsigned char *_p;        \
 
131
                _p = (unsigned char *)(src);    \
 
132
                for ( i0=0; i0<sizeof(ID); i0++ ) {     \
 
133
                        tmp <<= 8; tmp |= *_p++;        \
 
134
                } *(dst) = tmp; \
 
135
        } while (0)
 
136
 
 
137
LDAP_END_DECL
 
138
 
 
139
/* for the cache of attribute information (which are indexed, etc.) */
 
140
typedef struct mdb_attrinfo {
 
141
        AttributeDescription *ai_desc; /* attribute description cn;lang-en */
 
142
        slap_mask_t ai_indexmask;       /* how the attr is indexed      */
 
143
        slap_mask_t ai_newmask; /* new settings to replace old mask */
 
144
#ifdef LDAP_COMP_MATCH
 
145
        ComponentReference* ai_cr; /*component indexing*/
 
146
#endif
 
147
        Avlnode *ai_root;               /* for tools */
 
148
        void *ai_flist;         /* for tools */
 
149
        void *ai_clist;         /* for tools */
 
150
        MDB_cursor *ai_cursor;  /* for tools */
 
151
        int ai_idx;     /* position in AI array */
 
152
        MDB_dbi ai_dbi;
 
153
} AttrInfo;
 
154
 
 
155
/* These flags must not clash with SLAP_INDEX flags or ops in slap.h! */
 
156
#define MDB_INDEX_DELETING      0x8000U /* index is being modified */
 
157
#define MDB_INDEX_UPDATE_OP     0x03    /* performing an index update */
 
158
 
 
159
/* For slapindex to record which attrs in an entry belong to which
 
160
 * index database 
 
161
 */
 
162
typedef struct AttrList {
 
163
        struct AttrList *next;
 
164
        Attribute *attr;
 
165
} AttrList;
 
166
 
 
167
#ifndef CACHELINE
 
168
#define CACHELINE       64
 
169
#endif
 
170
 
 
171
#if defined(__i386) || defined(__x86_64)
 
172
#define MISALIGNED_OK   1
 
173
#endif
 
174
 
 
175
typedef struct IndexRbody {
 
176
        AttrInfo *ai;
 
177
        AttrList *attrs;
 
178
        void *tptr;
 
179
        int i;
 
180
} IndexRbody;
 
181
 
 
182
typedef struct IndexRec {
 
183
        union {
 
184
                IndexRbody irb;
 
185
#define ir_ai   iru.irb.ai
 
186
#define ir_attrs        iru.irb.attrs
 
187
#define ir_tptr iru.irb.tptr
 
188
#define ir_i    iru.irb.i
 
189
                /* cache line alignment */
 
190
                char pad[(sizeof(IndexRbody)+CACHELINE-1) & (!CACHELINE-1)];
 
191
        } iru;
 
192
} IndexRec;
 
193
 
 
194
#define MAXRDNS SLAP_LDAPDN_MAXLEN/4
 
195
 
 
196
#include "proto-mdb.h"
 
197
 
 
198
#endif /* _BACK_MDB_H_ */