]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb2/dbcache.c
Factor out ldif2* intialization to ldif2common.c
[openldap] / servers / slapd / back-bdb2 / dbcache.c
1 /* ldbmcache.c - maintain a cache of open bdb2 files */
2
3 #include "portable.h"
4
5 #include <stdio.h>
6
7 #include <ac/errno.h>
8 #include <ac/socket.h>
9 #include <ac/string.h>
10 #include <ac/time.h>
11
12 #include <sys/stat.h>
13
14 #ifdef HAVE_SYS_PARAM_H
15 #include <sys/param.h>
16 #endif
17
18 #include "ldap_defaults.h"
19 #include "slap.h"
20 #include "back-bdb2.h"
21
22 struct dbcache *
23 bdb2i_cache_open(
24     BackendDB   *be,
25     char        *name,
26     char        *suffix,
27     int         flags
28 )
29 {
30         /*  all files are open, so return handle from file cache  */
31         switch ( slapMode ) {
32
33                 case SLAP_SERVER_MODE:
34                 case SLAP_TIMEDSERVER_MODE:
35                 case SLAP_TOOL_MODE:
36                 case SLAP_TOOLID_MODE:
37                         {
38                                 struct  ldbminfo        *li = (struct ldbminfo *) be->be_private;
39                                 char    buf[MAXPATHLEN];
40
41                                 /*  use short name  */
42                                 sprintf( buf, "%s%s", name, suffix );
43                                 return( bdb2i_get_db_file_cache( li, buf ));
44
45                         }
46                         break;
47
48                 default:
49                         /*  if not SERVER or TOOL, who else would ask?
50                                 NO ONE, so return error  */
51
52                         Debug( LDAP_DEBUG_ANY,
53         "bdb2i_cache_open: database user (%d) unknown -- cannot open \"%s%s\".\n",
54                                         slapMode, name, suffix );
55                         return( NULL );
56         }
57 }
58
59 void
60 bdb2i_cache_close( BackendDB *be, struct dbcache *db )
61 {
62         /*  all files stay open until SERVER or TOOL shut down  */
63         switch ( slapMode ) {
64
65                 case SLAP_SERVER_MODE:
66                 case SLAP_TIMEDSERVER_MODE:
67                 case SLAP_TOOL_MODE:
68                 case SLAP_TOOLID_MODE:
69                         return;
70
71                 default:
72                         /*  if unknown user, complain  */
73                         Debug( LDAP_DEBUG_ANY,
74                                 "bdb2i_cache_close: database user (%d) unknown -- ignored.\n",
75                                 slapMode, 0, 0 );
76                         return;
77         }
78 }
79
80 void
81 bdb2i_cache_really_close( BackendDB *be, struct dbcache *db )
82 {
83         /*  all files stay open until SERVER or TOOL shut down  */
84         switch ( slapMode ) {
85
86                 case SLAP_SERVER_MODE:
87                 case SLAP_TIMEDSERVER_MODE:
88                 case SLAP_TOOL_MODE:
89                 case SLAP_TOOLID_MODE:
90                         return;
91
92                 default:
93                         /*  if unknown user, complain  */
94                         Debug( LDAP_DEBUG_ANY,
95                 "bdb2i_cache_really_close: database user (%d) unknown -- ignored.\n",
96                                 slapMode, 0, 0 );
97                         return;
98         }
99 }
100
101 void
102 bdb2i_cache_flush_all( BackendDB *be )
103 {
104         /*  if SERVER or TOOL, syncing is done by TP, or during shutdown  */
105         switch ( slapMode ) {
106
107                 case SLAP_SERVER_MODE:
108                 case SLAP_TIMEDSERVER_MODE:
109                 case SLAP_TOOL_MODE:
110                 case SLAP_TOOLID_MODE:
111                         return;
112
113                 default:
114                         /*  if unknown user, complain  */
115                         Debug( LDAP_DEBUG_ANY,
116                 "bdb2i_cache_flush_all: database user (%d) unknown -- ignored.\n",
117                                 slapMode, 0, 0 );
118                         return;
119         }
120 }
121
122 Datum
123 bdb2i_cache_fetch(
124     struct dbcache      *db,
125     Datum               key
126 )
127 {
128         Datum   data;
129
130         ldbm_datum_init( data );
131
132         data = bdb2i_db_fetch( db->dbc_db, key );
133
134         return( data );
135 }
136
137 int
138 bdb2i_cache_store(
139     struct dbcache      *db,
140     Datum               key,
141     Datum               data,
142     int                 flags
143 )
144 {
145         int     rc;
146         struct timeval  time1;
147
148 #ifdef LDBM_DEBUG
149         Statslog( LDAP_DEBUG_STATS,
150                 "=> bdb2i_cache_store(): key.dptr=%s, key.dsize=%d\n",
151                 key.dptr, key.dsize, 0, 0, 0 );
152
153         Statslog( LDAP_DEBUG_STATS,
154                 "=> bdb2i_cache_store(): key.dptr=0x%08x, data.dptr=0x%0 8x\n",
155                 key.dptr, data.dptr, 0, 0, 0 );
156
157         Statslog( LDAP_DEBUG_STATS,
158                 "=> bdb2i_cache_store(): data.dptr=%s, data.dsize=%d\n",
159                 data.dptr, data.dsize, 0, 0, 0 );
160
161         Statslog( LDAP_DEBUG_STATS,
162                 "=> bdb2i_cache_store(): flags=0x%08x\n",
163                 flags, 0, 0, 0, 0 );
164 #endif /* LDBM_DEBUG */
165
166         if ( slapMode == SLAP_TIMEDSERVER_MODE )
167                 bdb2i_uncond_start_timing( &time1 );
168
169         rc = bdb2i_db_store( db->dbc_db, key, data, flags );
170
171         if ( slapMode == SLAP_TIMEDSERVER_MODE ) {
172                 char buf[BUFSIZ];
173                 char buf2[BUFSIZ];
174
175                 *buf2 = '\0';
176                 if ( !( strcasecmp( db->dbc_name, "dn.bdb2" )))
177                         sprintf( buf2, " [%s]", key.dptr );
178                 sprintf( buf, "ADD-BDB2( %s%s )", db->dbc_name, buf2 );
179                 bdb2i_uncond_stop_timing( time1, buf,
180                                         NULL, NULL, LDAP_DEBUG_TRACE );
181         }
182
183         return( rc );
184 }
185
186 int
187 bdb2i_cache_delete(
188     struct dbcache      *db,
189     Datum               key
190 )
191 {
192         int     rc;
193
194         rc = bdb2i_db_delete( db->dbc_db, key );
195
196         return( rc );
197 }