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