]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb2/dbcache.c
Server timing as a private feature of the bdb2 backend.
[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 "ldapconfig.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                         {
37                                 struct  ldbminfo        *li = (struct ldbminfo *) be->be_private;
38                                 char    buf[MAXPATHLEN];
39
40                                 /*  use short name  */
41                                 sprintf( buf, "%s%s", name, suffix );
42                                 return( bdb2i_get_db_file_cache( li, buf ));
43
44                         }
45                         break;
46
47                 default:
48                         /*  if not SERVER or TOOL, who else would ask?
49                                 NO ONE, so return error  */
50
51                         Debug( LDAP_DEBUG_ANY,
52         "bdb2i_cache_open: database user (%d) unknown -- cannot open \"%s%s\".\n",
53                                         slapMode, name, suffix );
54                         return( NULL );
55         }
56 }
57
58 void
59 bdb2i_cache_close( BackendDB *be, struct dbcache *db )
60 {
61         /*  all files stay open until SERVER or TOOL shut down  */
62         switch ( slapMode ) {
63
64                 case SLAP_SERVER_MODE:
65                 case SLAP_TIMEDSERVER_MODE:
66                 case SLAP_TOOL_MODE:
67                         return;
68
69                 default:
70                         /*  if unknown user, complain  */
71                         Debug( LDAP_DEBUG_ANY,
72                                 "bdb2i_cache_close: database user (%d) unknown -- ignored.\n",
73                                 slapMode, 0, 0 );
74                         return;
75         }
76 }
77
78 void
79 bdb2i_cache_really_close( BackendDB *be, struct dbcache *db )
80 {
81         /*  all files stay open until SERVER or TOOL shut down  */
82         switch ( slapMode ) {
83
84                 case SLAP_SERVER_MODE:
85                 case SLAP_TIMEDSERVER_MODE:
86                 case SLAP_TOOL_MODE:
87                         return;
88
89                 default:
90                         /*  if unknown user, complain  */
91                         Debug( LDAP_DEBUG_ANY,
92                 "bdb2i_cache_really_close: database user (%d) unknown -- ignored.\n",
93                                 slapMode, 0, 0 );
94                         return;
95         }
96 }
97
98 void
99 bdb2i_cache_flush_all( BackendDB *be )
100 {
101         /*  if SERVER or TOOL, syncing is done by TP, or during shutdown  */
102         switch ( slapMode ) {
103
104                 case SLAP_SERVER_MODE:
105                 case SLAP_TIMEDSERVER_MODE:
106                 case SLAP_TOOL_MODE:
107                         return;
108
109                 default:
110                         /*  if unknown user, complain  */
111                         Debug( LDAP_DEBUG_ANY,
112                 "bdb2i_cache_flush_all: database user (%d) unknown -- ignored.\n",
113                                 slapMode, 0, 0 );
114                         return;
115         }
116 }
117
118 Datum
119 bdb2i_cache_fetch(
120     struct dbcache      *db,
121     Datum               key
122 )
123 {
124         Datum   data;
125
126         ldbm_datum_init( data );
127
128         data = ldbm_fetch( db->dbc_db, key );
129
130         return( data );
131 }
132
133 int
134 bdb2i_cache_store(
135     struct dbcache      *db,
136     Datum               key,
137     Datum               data,
138     int                 flags
139 )
140 {
141         int     rc;
142
143 #ifdef LDBM_DEBUG
144         Statslog( LDAP_DEBUG_STATS,
145                 "=> bdb2i_cache_store(): key.dptr=%s, key.dsize=%d\n",
146                 key.dptr, key.dsize, 0, 0, 0 );
147
148         Statslog( LDAP_DEBUG_STATS,
149                 "=> bdb2i_cache_store(): key.dptr=0x%08x, data.dptr=0x%0 8x\n",
150                 key.dptr, data.dptr, 0, 0, 0 );
151
152         Statslog( LDAP_DEBUG_STATS,
153                 "=> bdb2i_cache_store(): data.dptr=%s, data.dsize=%d\n",
154                 data.dptr, data.dsize, 0, 0, 0 );
155
156         Statslog( LDAP_DEBUG_STATS,
157                 "=> bdb2i_cache_store(): flags=0x%08x\n",
158                 flags, 0, 0, 0, 0 );
159 #endif /* LDBM_DEBUG */
160
161         rc = ldbm_store( db->dbc_db, key, data, flags );
162
163         return( rc );
164 }
165
166 int
167 bdb2i_cache_delete(
168     struct dbcache      *db,
169     Datum               key
170 )
171 {
172         int     rc;
173
174         rc = ldbm_delete( db->dbc_db, key );
175
176         return( rc );
177 }