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