ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/BDB.pm
Revision: 1.43
Committed: Wed Jul 9 21:00:13 2008 UTC (15 years, 10 months ago) by root
Branch: MAIN
Changes since 1.42: +1 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.2 BDB - Asynchronous Berkeley DB access
4 root 1.1
5     =head1 SYNOPSIS
6    
7 root 1.2 use BDB;
8 root 1.1
9 root 1.19 my $env = db_env_create;
10    
11     mkdir "bdtest", 0700;
12     db_env_open
13     $env,
14     "bdtest",
15     BDB::INIT_LOCK | BDB::INIT_LOG | BDB::INIT_MPOOL
16     | BDB::INIT_TXN | BDB::RECOVER | BDB::USE_ENVIRON | BDB::CREATE,
17     0600;
18    
19     $env->set_flags (BDB::AUTO_COMMIT | BDB::TXN_NOSYNC, 1);
20    
21     my $db = db_create $env;
22     db_open $db, undef, "table", undef, BDB::BTREE, BDB::AUTO_COMMIT | BDB::CREATE
23     | BDB::READ_UNCOMMITTED, 0600;
24     db_put $db, undef, "key", "data", 0, sub {
25     db_del $db, undef, "key";
26     };
27     db_sync $db;
28    
29 root 1.28 # when you also use Coro, management is easy:
30     use Coro::BDB;
31    
32 root 1.36 # automatic event loop intergration with AnyEvent:
33     use AnyEvent::BDB;
34 root 1.19
35     # automatic result processing with EV:
36     my $WATCHER = EV::io BDB::poll_fileno, EV::READ, \&BDB::poll_cb;
37    
38     # with Glib:
39     add_watch Glib::IO BDB::poll_fileno,
40     in => sub { BDB::poll_cb; 1 };
41    
42     # or simply flush manually
43     BDB::flush;
44    
45    
46 root 1.1 =head1 DESCRIPTION
47    
48 root 1.10 See the BerkeleyDB documentation (L<http://www.oracle.com/technology/documentation/berkeley-db/db/index.html>).
49 root 1.12 The BDB API is very similar to the C API (the translation has been very faithful).
50 root 1.10
51     See also the example sections in the document below and possibly the eg/
52     subdirectory of the BDB distribution. Last not least see the IO::AIO
53     documentation, as that module uses almost the same asynchronous request
54     model as this module.
55    
56     I know this is woefully inadequate documentation. Send a patch!
57 root 1.7
58 root 1.1
59     =head1 REQUEST ANATOMY AND LIFETIME
60    
61     Every request method creates a request. which is a C data structure not
62     directly visible to Perl.
63    
64     During their existance, bdb requests travel through the following states,
65     in order:
66    
67     =over 4
68    
69     =item ready
70    
71     Immediately after a request is created it is put into the ready state,
72     waiting for a thread to execute it.
73    
74     =item execute
75    
76     A thread has accepted the request for processing and is currently
77     executing it (e.g. blocking in read).
78    
79     =item pending
80    
81     The request has been executed and is waiting for result processing.
82    
83     While request submission and execution is fully asynchronous, result
84     processing is not and relies on the perl interpreter calling C<poll_cb>
85     (or another function with the same effect).
86    
87     =item result
88    
89     The request results are processed synchronously by C<poll_cb>.
90    
91     The C<poll_cb> function will process all outstanding aio requests by
92     calling their callbacks, freeing memory associated with them and managing
93     any groups they are contained in.
94    
95     =item done
96    
97     Request has reached the end of its lifetime and holds no resources anymore
98     (except possibly for the Perl object, but its connection to the actual
99     aio request is severed and calling its methods will either do nothing or
100     result in a runtime error).
101    
102     =back
103    
104     =cut
105    
106 root 1.2 package BDB;
107 root 1.1
108     no warnings;
109     use strict 'vars';
110    
111     use base 'Exporter';
112    
113     BEGIN {
114 root 1.42 our $VERSION = '1.7';
115 root 1.1
116 root 1.3 our @BDB_REQ = qw(
117 root 1.6 db_env_open db_env_close db_env_txn_checkpoint db_env_lock_detect
118 root 1.38 db_env_memp_sync db_env_memp_trickle db_env_dbrename db_env_dbremove
119 root 1.25 db_open db_close db_compact db_sync db_upgrade
120     db_put db_get db_pget db_del db_key_range
121 root 1.15 db_txn_commit db_txn_abort db_txn_finish
122 root 1.5 db_c_close db_c_count db_c_put db_c_get db_c_pget db_c_del
123 root 1.6 db_sequence_open db_sequence_close
124     db_sequence_get db_sequence_remove
125     );
126     our @EXPORT = (@BDB_REQ, qw(dbreq_pri dbreq_nice db_env_create db_create));
127     our @EXPORT_OK = qw(
128     poll_fileno poll_cb poll_wait flush
129     min_parallel max_parallel max_idle
130     nreqs nready npending nthreads
131     max_poll_time max_poll_reqs
132 root 1.3 );
133 root 1.1
134     require XSLoader;
135 root 1.2 XSLoader::load ("BDB", $VERSION);
136 root 1.1 }
137    
138 root 1.35 =head2 WIN32 FILENAMES/DATABASE NAME MESS
139 root 1.34
140 root 1.35 Perl on Win32 supports only ASCII filenames (the reason is that it abuses
141     an internal flag to store wether a filename is Unicode or ANSI, but that
142     flag is used for somethign else in the perl core, so there is no way to
143     detect wether a filename is ANSI or Unicode-encoded). The BDB module
144     tries to work around this issue by assuming that the filename is an ANSI
145     filename and BDB was built for unicode support.
146 root 1.34
147 root 1.10 =head2 BERKELEYDB FUNCTIONS
148    
149     All of these are functions. The create functions simply return a new
150 root 1.34 object and never block. All the remaining functions take an optional
151 root 1.24 callback as last argument. If it is missing, then the function will be
152     executed synchronously. In both cases, C<$!> will reflect the return value
153     of the function.
154 root 1.10
155     BDB functions that cannot block (mostly functions that manipulate
156     settings) are method calls on the relevant objects, so the rule of thumb
157 root 1.34 is: if it's a method, it's not blocking, if it's a function, it takes a
158 root 1.10 callback as last argument.
159    
160     In the following, C<$int> signifies an integer return value,
161 root 1.38 C<bdb_filename> is a "filename" (octets on unix, madness on windows),
162     C<U32> is an unsigned 32 bit integer, C<int> is some integer, C<NV> is a
163     floating point value.
164 root 1.10
165 root 1.41 Most C<SV *> types are generic perl scalars (for input and output of data
166     values).
167 root 1.10
168 root 1.11 The various C<DB_ENV> etc. arguments are handles return by
169     C<db_env_create>, C<db_create>, C<txn_begin> and so on. If they have an
170     appended C<_ornull> this means they are optional and you can pass C<undef>
171     for them, resulting a NULL pointer on the C level.
172 root 1.10
173 root 1.41 The C<SV *callback> is the optional callback function to call when the
174     request is completed. This last callback argument is special: the callback
175     is simply the last argument passed. If there are "optional" arguments
176     before the callback they can be left out. The callback itself can be left
177     out or specified as C<undef>, in which case the function will be executed
178     synchronously.
179    
180     For example, C<db_env_txn_checkpoint> usually is called with all integer
181     arguments zero. These can be left out, so all of these specify a call
182     to C<< DB_ENV->txn_checkpoint >>, to be executed asynchronously with a
183     callback to be called:
184    
185     db_env_txn_checkpoint $db_env, 0, 0, 0, sub { };
186     db_env_txn_checkpoint $db_env, 0, 0, sub { };
187     db_env_txn_checkpoint $db_env, sub { };
188    
189     While these all specify a call to C<< DB_ENV->txn_checkpoint >> to be
190     executed synchronously:
191    
192     db_env_txn_checkpoint $db_env, 0, 0, 0, undef;
193     db_env_txn_checkpoint $db_env, 0, 0, 0;
194     db_env_txn_checkpoint $db_env, 0;
195    
196 root 1.10 =head3 BDB functions
197    
198     Functions in the BDB namespace, exported by default:
199    
200     $env = db_env_create (U32 env_flags = 0)
201 root 1.14 flags: RPCCLIENT
202 root 1.10
203 root 1.38 db_env_open (DB_ENV *env, bdb_filename db_home, U32 open_flags, int mode, SV *callback = &PL_sv_undef)
204 root 1.14 open_flags: INIT_CDB INIT_LOCK INIT_LOG INIT_MPOOL INIT_REP INIT_TXN RECOVER RECOVER_FATAL USE_ENVIRON USE_ENVIRON_ROOT CREATE LOCKDOWN PRIVATE REGISTER SYSTEM_MEM
205 root 1.10 db_env_close (DB_ENV *env, U32 flags = 0, SV *callback = &PL_sv_undef)
206     db_env_txn_checkpoint (DB_ENV *env, U32 kbyte = 0, U32 min = 0, U32 flags = 0, SV *callback = &PL_sv_undef)
207 root 1.14 flags: FORCE
208 root 1.10 db_env_lock_detect (DB_ENV *env, U32 flags = 0, U32 atype = DB_LOCK_DEFAULT, SV *dummy = 0, SV *callback = &PL_sv_undef)
209 root 1.14 atype: LOCK_DEFAULT LOCK_EXPIRE LOCK_MAXLOCKS LOCK_MAXWRITE LOCK_MINLOCKS LOCK_MINWRITE LOCK_OLDEST LOCK_RANDOM LOCK_YOUNGEST
210 root 1.10 db_env_memp_sync (DB_ENV *env, SV *dummy = 0, SV *callback = &PL_sv_undef)
211     db_env_memp_trickle (DB_ENV *env, int percent, SV *dummy = 0, SV *callback = &PL_sv_undef)
212 root 1.38 db_env_dbremove (DB_ENV *env, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, U32 flags = 0, SV *callback = &PL_sv_undef)
213     db_env_dbrename (DB_ENV *env, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, bdb_filename newname, U32 flags = 0, SV *callback = &PL_sv_undef)
214 root 1.10
215     $db = db_create (DB_ENV *env = 0, U32 flags = 0)
216 root 1.14 flags: XA_CREATE
217 root 1.10
218 root 1.38 db_open (DB *db, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, int type, U32 flags, int mode, SV *callback = &PL_sv_undef)
219 root 1.14 flags: AUTO_COMMIT CREATE EXCL MULTIVERSION NOMMAP RDONLY READ_UNCOMMITTED THREAD TRUNCATE
220 root 1.10 db_close (DB *db, U32 flags = 0, SV *callback = &PL_sv_undef)
221 root 1.14 flags: DB_NOSYNC
222 root 1.38 db_upgrade (DB *db, bdb_filename file, U32 flags = 0, SV *callback = &PL_sv_undef)
223 root 1.12 db_compact (DB *db, DB_TXN_ornull *txn = 0, SV *start = 0, SV *stop = 0, SV *unused1 = 0, U32 flags = DB_FREE_SPACE, SV *unused2 = 0, SV *callback = &PL_sv_undef)
224 root 1.14 flags: FREELIST_ONLY FREE_SPACE
225 root 1.10 db_sync (DB *db, U32 flags = 0, SV *callback = &PL_sv_undef)
226     db_key_range (DB *db, DB_TXN_ornull *txn, SV *key, SV *key_range, U32 flags = 0, SV *callback = &PL_sv_undef)
227     db_put (DB *db, DB_TXN_ornull *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
228 root 1.14 flags: APPEND NODUPDATA NOOVERWRITE
229 root 1.10 db_get (DB *db, DB_TXN_ornull *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
230 root 1.14 flags: CONSUME CONSUME_WAIT GET_BOTH SET_RECNO MULTIPLE READ_COMMITTED READ_UNCOMMITTED RMW
231 root 1.10 db_pget (DB *db, DB_TXN_ornull *txn, SV *key, SV *pkey, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
232 root 1.14 flags: CONSUME CONSUME_WAIT GET_BOTH SET_RECNO MULTIPLE READ_COMMITTED READ_UNCOMMITTED RMW
233 root 1.10 db_del (DB *db, DB_TXN_ornull *txn, SV *key, U32 flags = 0, SV *callback = &PL_sv_undef)
234     db_txn_commit (DB_TXN *txn, U32 flags = 0, SV *callback = &PL_sv_undef)
235 root 1.14 flags: TXN_NOSYNC TXN_SYNC
236 root 1.10 db_txn_abort (DB_TXN *txn, SV *callback = &PL_sv_undef)
237 root 1.14
238 root 1.10 db_c_close (DBC *dbc, SV *callback = &PL_sv_undef)
239     db_c_count (DBC *dbc, SV *count, U32 flags = 0, SV *callback = &PL_sv_undef)
240     db_c_put (DBC *dbc, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
241 root 1.14 flags: AFTER BEFORE CURRENT KEYFIRST KEYLAST NODUPDATA
242 root 1.10 db_c_get (DBC *dbc, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
243 root 1.14 flags: CURRENT FIRST GET_BOTH GET_BOTH_RANGE GET_RECNO JOIN_ITEM LAST NEXT NEXT_DUP NEXT_NODUP PREV PREV_DUP PREV_NODUP SET SET_RANGE SET_RECNO READ_UNCOMMITTED MULTIPLE MULTIPLE_KEY RMW
244 root 1.10 db_c_pget (DBC *dbc, SV *key, SV *pkey, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
245     db_c_del (DBC *dbc, U32 flags = 0, SV *callback = &PL_sv_undef)
246    
247     db_sequence_open (DB_SEQUENCE *seq, DB_TXN_ornull *txnid, SV *key, U32 flags = 0, SV *callback = &PL_sv_undef)
248 root 1.14 flags: CREATE EXCL
249 root 1.10 db_sequence_close (DB_SEQUENCE *seq, U32 flags = 0, SV *callback = &PL_sv_undef)
250     db_sequence_get (DB_SEQUENCE *seq, DB_TXN_ornull *txnid, int delta, SV *seq_value, U32 flags = DB_TXN_NOSYNC, SV *callback = &PL_sv_undef)
251 root 1.14 flags: TXN_NOSYNC
252 root 1.10 db_sequence_remove (DB_SEQUENCE *seq, DB_TXN_ornull *txnid = 0, U32 flags = 0, SV *callback = &PL_sv_undef)
253 root 1.14 flags: TXN_NOSYNC
254 root 1.10
255 root 1.15 =head4 db_txn_finish (DB_TXN *txn, U32 flags = 0, SV *callback = &PL_sv_undef)
256    
257 root 1.16 This is not actually a Berkeley DB function but a BDB module
258     extension. The background for this exytension is: It is very annoying to
259     have to check every single BDB function for error returns and provide a
260     codepath out of your transaction. While the BDB module still makes this
261     possible, it contains the following extensions:
262 root 1.15
263     When a transaction-protected function returns any operating system
264     error (errno > 0), BDB will set the C<TXN_DEADLOCK> flag on the
265 root 1.16 transaction. This flag is also set by Berkeley DB functions themselves
266 root 1.15 when an operation fails with LOCK_DEADLOCK, and it causes all further
267     operations on that transaction (including C<db_txn_commit>) to fail.
268    
269     The C<db_txn_finish> request will look at this flag, and, if it is set,
270     will automatically call C<db_txn_abort> (setting errno to C<LOCK_DEADLOCK>
271 root 1.16 if it isn't set to something else yet). If it isn't set, it will call
272     C<db_txn_commit> and return the error normally.
273 root 1.15
274     How to use this? Easy: just write your transaction normally:
275    
276     my $txn = $db_env->txn_begin;
277     db_get $db, $txn, "key", my $data;
278     db_put $db, $txn, "key", $data + 1 unless $! == BDB::NOTFOUND;
279     db_txn_finish $txn;
280     die "transaction failed" if $!;
281    
282     That is, handle only the expected errors. If something unexpected happens
283     (EIO, LOCK_NOTGRANTED or a deadlock in either db_get or db_put), then the remaining
284     requests (db_put in this case) will simply be skipped (they will fail with
285     LOCK_DEADLOCK) and the transaction will be aborted.
286    
287 root 1.16 You can use the C<< $txn->failed >> method to check wether a transaction
288 root 1.15 has failed in this way and abort further processing (excluding
289     C<db_txn_finish>).
290    
291 root 1.10 =head3 DB_ENV/database environment methods
292    
293     Methods available on DB_ENV/$env handles:
294    
295     DESTROY (DB_ENV_ornull *env)
296     CODE:
297     if (env)
298     env->close (env, 0);
299    
300     $int = $env->set_data_dir (const char *dir)
301     $int = $env->set_tmp_dir (const char *dir)
302     $int = $env->set_lg_dir (const char *dir)
303     $int = $env->set_shm_key (long shm_key)
304     $int = $env->set_cachesize (U32 gbytes, U32 bytes, int ncache = 0)
305 root 1.39 $int = $env->set_flags (U32 flags, int onoff = 1)
306     $int = $env->log_set_config (U32 flags, int onoff = 1) [v4.7]
307     $int = $env->set_intermediate_dir_mode (const char *modestring) [v4.7]
308 root 1.10 $env->set_errfile (FILE *errfile = 0)
309     $env->set_msgfile (FILE *msgfile = 0)
310     $int = $env->set_verbose (U32 which, int onoff = 1)
311     $int = $env->set_encrypt (const char *password, U32 flags = 0)
312 root 1.15 $int = $env->set_timeout (NV timeout_seconds, U32 flags = SET_TXN_TIMEOUT)
313 root 1.10 $int = $env->set_mp_max_openfd (int maxopenfd);
314     $int = $env->set_mp_max_write (int maxwrite, int maxwrite_sleep);
315     $int = $env->set_mp_mmapsize (int mmapsize_mb)
316     $int = $env->set_lk_detect (U32 detect = DB_LOCK_DEFAULT)
317     $int = $env->set_lk_max_lockers (U32 max)
318     $int = $env->set_lk_max_locks (U32 max)
319     $int = $env->set_lk_max_objects (U32 max)
320     $int = $env->set_lg_bsize (U32 max)
321     $int = $env->set_lg_max (U32 max)
322 root 1.20 $int = $env->mutex_set_increment (U32 increment)
323     $int = $env->mutex_set_tas_spins (U32 tas_spins)
324     $int = $env->mutex_set_max (U32 max)
325     $int = $env->mutex_set_align (U32 align)
326 root 1.10
327     $txn = $env->txn_begin (DB_TXN_ornull *parent = 0, U32 flags = 0)
328 root 1.14 flags: READ_COMMITTED READ_UNCOMMITTED TXN_NOSYNC TXN_NOWAIT TXN_SNAPSHOT TXN_SYNC TXN_WAIT TXN_WRITE_NOSYNC
329 root 1.43 $txn = $env->cdsgroup_begin;
330 root 1.10
331 root 1.12 =head4 Example:
332 root 1.10
333     use AnyEvent;
334     use BDB;
335    
336     our $FH; open $FH, "<&=" . BDB::poll_fileno;
337     our $WATCHER = AnyEvent->io (fh => $FH, poll => 'r', cb => \&BDB::poll_cb);
338    
339     BDB::min_parallel 8;
340    
341     my $env = db_env_create;
342    
343     mkdir "bdtest", 0700;
344     db_env_open
345     $env,
346     "bdtest",
347     BDB::INIT_LOCK | BDB::INIT_LOG | BDB::INIT_MPOOL | BDB::INIT_TXN | BDB::RECOVER | BDB::USE_ENVIRON | BDB::CREATE,
348     0600;
349    
350     $env->set_flags (BDB::AUTO_COMMIT | BDB::TXN_NOSYNC, 1);
351    
352    
353     =head3 DB/database methods
354    
355     Methods available on DB/$db handles:
356    
357     DESTROY (DB_ornull *db)
358     CODE:
359     if (db)
360     {
361     SV *env = (SV *)db->app_private;
362     db->close (db, 0);
363     SvREFCNT_dec (env);
364     }
365    
366     $int = $db->set_cachesize (U32 gbytes, U32 bytes, int ncache = 0)
367     $int = $db->set_flags (U32 flags)
368 root 1.14 flags: CHKSUM ENCRYPT TXN_NOT_DURABLE
369     Btree: DUP DUPSORT RECNUM REVSPLITOFF
370     Hash: DUP DUPSORT
371     Queue: INORDER
372     Recno: RENUMBER SNAPSHOT
373    
374 root 1.10 $int = $db->set_encrypt (const char *password, U32 flags)
375     $int = $db->set_lorder (int lorder)
376     $int = $db->set_bt_minkey (U32 minkey)
377     $int = $db->set_re_delim (int delim)
378     $int = $db->set_re_pad (int re_pad)
379     $int = $db->set_re_source (char *source)
380     $int = $db->set_re_len (U32 re_len)
381     $int = $db->set_h_ffactor (U32 h_ffactor)
382     $int = $db->set_h_nelem (U32 h_nelem)
383     $int = $db->set_q_extentsize (U32 extentsize)
384    
385     $dbc = $db->cursor (DB_TXN_ornull *txn = 0, U32 flags = 0)
386 root 1.14 flags: READ_COMMITTED READ_UNCOMMITTED WRITECURSOR TXN_SNAPSHOT
387 root 1.10 $seq = $db->sequence (U32 flags = 0)
388    
389 root 1.12 =head4 Example:
390 root 1.10
391     my $db = db_create $env;
392     db_open $db, undef, "table", undef, BDB::BTREE, BDB::AUTO_COMMIT | BDB::CREATE | BDB::READ_UNCOMMITTED, 0600;
393    
394     for (1..1000) {
395     db_put $db, undef, "key $_", "data $_";
396    
397     db_key_range $db, undef, "key $_", my $keyrange;
398     my ($lt, $eq, $gt) = @$keyrange;
399     }
400    
401     db_del $db, undef, "key $_" for 1..1000;
402    
403     db_sync $db;
404    
405    
406     =head3 DB_TXN/transaction methods
407    
408     Methods available on DB_TXN/$txn handles:
409    
410     DESTROY (DB_TXN_ornull *txn)
411     CODE:
412     if (txn)
413     txn->abort (txn);
414    
415 root 1.15 $int = $txn->set_timeout (NV timeout_seconds, U32 flags = SET_TXN_TIMEOUT)
416 root 1.14 flags: SET_LOCK_TIMEOUT SET_TXN_TIMEOUT
417 root 1.10
418 root 1.15 $bool = $txn->failed
419     # see db_txn_finish documentation, above
420    
421 root 1.10
422     =head3 DBC/cursor methods
423    
424     Methods available on DBC/$dbc handles:
425    
426     DESTROY (DBC_ornull *dbc)
427     CODE:
428     if (dbc)
429     dbc->c_close (dbc);
430    
431 root 1.28 $int = $cursor->set_priority ($priority = PRIORITY_*)
432    
433 root 1.12 =head4 Example:
434 root 1.10
435     my $c = $db->cursor;
436    
437     for (;;) {
438     db_c_get $c, my $key, my $data, BDB::NEXT;
439     warn "<$!,$key,$data>";
440     last if $!;
441     }
442    
443     db_c_close $c;
444    
445 root 1.12
446 root 1.10 =head3 DB_SEQUENCE/sequence methods
447    
448     Methods available on DB_SEQUENCE/$seq handles:
449    
450     DESTROY (DB_SEQUENCE_ornull *seq)
451     CODE:
452     if (seq)
453     seq->close (seq, 0);
454    
455     $int = $seq->initial_value (db_seq_t value)
456     $int = $seq->set_cachesize (U32 size)
457     $int = $seq->set_flags (U32 flags)
458 root 1.14 flags: SEQ_DEC SEQ_INC SEQ_WRAP
459 root 1.10 $int = $seq->set_range (db_seq_t min, db_seq_t max)
460    
461 root 1.12 =head4 Example:
462 root 1.10
463     my $seq = $db->sequence;
464    
465     db_sequence_open $seq, undef, "seq", BDB::CREATE;
466     db_sequence_get $seq, undef, 1, my $value;
467    
468    
469 root 1.1 =head2 SUPPORT FUNCTIONS
470    
471     =head3 EVENT PROCESSING AND EVENT LOOP INTEGRATION
472    
473     =over 4
474    
475 root 1.23 =item $msg = BDB::strerror [$errno]
476    
477     Returns the string corresponding to the given errno value. If no argument
478     is given, use C<$!>.
479    
480 root 1.33 Note that the BDB module also patches the C<$!> variable directly, so you
481     should be able to get a bdb error string by simply stringifying C<$!>.
482    
483 root 1.2 =item $fileno = BDB::poll_fileno
484 root 1.1
485     Return the I<request result pipe file descriptor>. This filehandle must be
486     polled for reading by some mechanism outside this module (e.g. Event or
487     select, see below or the SYNOPSIS). If the pipe becomes readable you have
488     to call C<poll_cb> to check the results.
489    
490     See C<poll_cb> for an example.
491    
492 root 1.2 =item BDB::poll_cb
493 root 1.1
494     Process some outstanding events on the result pipe. You have to call this
495     regularly. Returns the number of events processed. Returns immediately
496     when no events are outstanding. The amount of events processed depends on
497 root 1.2 the settings of C<BDB::max_poll_req> and C<BDB::max_poll_time>.
498 root 1.1
499     If not all requests were processed for whatever reason, the filehandle
500     will still be ready when C<poll_cb> returns.
501    
502     Example: Install an Event watcher that automatically calls
503 root 1.2 BDB::poll_cb with high priority:
504 root 1.1
505 root 1.2 Event->io (fd => BDB::poll_fileno,
506 root 1.1 poll => 'r', async => 1,
507 root 1.2 cb => \&BDB::poll_cb);
508 root 1.1
509 root 1.2 =item BDB::max_poll_reqs $nreqs
510 root 1.1
511 root 1.2 =item BDB::max_poll_time $seconds
512 root 1.1
513     These set the maximum number of requests (default C<0>, meaning infinity)
514 root 1.2 that are being processed by C<BDB::poll_cb> in one call, respectively
515 root 1.1 the maximum amount of time (default C<0>, meaning infinity) spent in
516 root 1.2 C<BDB::poll_cb> to process requests (more correctly the mininum amount
517 root 1.1 of time C<poll_cb> is allowed to use).
518    
519     Setting C<max_poll_time> to a non-zero value creates an overhead of one
520     syscall per request processed, which is not normally a problem unless your
521     callbacks are really really fast or your OS is really really slow (I am
522     not mentioning Solaris here). Using C<max_poll_reqs> incurs no overhead.
523    
524     Setting these is useful if you want to ensure some level of
525     interactiveness when perl is not fast enough to process all requests in
526     time.
527    
528     For interactive programs, values such as C<0.01> to C<0.1> should be fine.
529    
530 root 1.18 Example: Install an EV watcher that automatically calls
531 root 1.2 BDB::poll_cb with low priority, to ensure that other parts of the
532 root 1.18 program get the CPU sometimes even under high load.
533 root 1.1
534     # try not to spend much more than 0.1s in poll_cb
535 root 1.2 BDB::max_poll_time 0.1;
536 root 1.1
537 root 1.18 my $bdb_poll = EV::io BDB::poll_fileno, EV::READ, \&BDB::poll_cb);
538 root 1.1
539 root 1.2 =item BDB::poll_wait
540 root 1.1
541     If there are any outstanding requests and none of them in the result
542     phase, wait till the result filehandle becomes ready for reading (simply
543     does a C<select> on the filehandle. This is useful if you want to
544     synchronously wait for some requests to finish).
545    
546     See C<nreqs> for an example.
547    
548 root 1.2 =item BDB::poll
549 root 1.1
550     Waits until some requests have been handled.
551    
552     Returns the number of requests processed, but is otherwise strictly
553     equivalent to:
554    
555 root 1.2 BDB::poll_wait, BDB::poll_cb
556 root 1.1
557 root 1.2 =item BDB::flush
558 root 1.1
559 root 1.18 Wait till all outstanding BDB requests have been handled.
560 root 1.1
561     Strictly equivalent to:
562    
563 root 1.2 BDB::poll_wait, BDB::poll_cb
564     while BDB::nreqs;
565 root 1.1
566 root 1.8 =back
567    
568 root 1.39 =head3 VERSION CHECKING
569    
570     BerkeleyDB comes in various versions, many of them have minor
571     incompatibilities. This means that traditional "at least version x.x"
572     checks are often not sufficient.
573    
574 root 1.40 Example: set the log_autoremove option in a way compatible with <v.47 and
575     v4.7. Note the use of & on the constants to avoid triggering a compiletime
576     bug when the symbol isn't available.
577    
578     $DB_ENV->set_flags (&BDB::LOG_AUTOREMOVE ) if BDB::VERSION v0, v4.7;
579     $DB_ENV->log_set_config (&BDB::LOG_AUTO_REMOVE) if BDB::VERSION v4.7;
580    
581 root 1.39 =over 4
582    
583     =item BDB::VERSION
584    
585     The C<BDB::VERSION> function, when called without arguments, returns the
586     Berkeley DB version as a v-string (usually with 3 components). You should
587     use C<lt> and C<ge> operators exclusively to make comparisons.
588    
589     Example: check for at least version 4.7.
590    
591     BDB::VERSION ge v4.7 or die;
592    
593     =item BDB::VERSION min-version
594    
595     Returns true if the BDB version is at least the given version (specified
596     as a v-string), false otherwise.
597    
598     Example: check for at least version 4.5.
599    
600     BDB::VERSION v4.7 or die;
601    
602     =item BDB::VERSION min-version, max-version
603    
604     Returns true of the BDB version is at least version C<min-version> (specify C<undef> or C<v0> for any minimum version)
605     and less then C<max-version>.
606    
607     Example: check wether version is strictly less then v4.7.
608    
609     BDB::VERSION v0, v4.7
610     or die "version 4.7 is not yet supported";
611    
612     =back
613    
614     =cut
615    
616     sub VERSION {
617     if (@_ > 0) {
618     return undef if VERSION_v lt $_[0];
619     if (@_ > 1) {
620     return undef if VERSION_v ge $_[1];
621     }
622     }
623    
624     VERSION_v
625     }
626    
627 root 1.1 =head3 CONTROLLING THE NUMBER OF THREADS
628    
629 root 1.8 =over 4
630    
631 root 1.2 =item BDB::min_parallel $nthreads
632 root 1.1
633 root 1.18 Set the minimum number of BDB threads to C<$nthreads>. The current
634 root 1.1 default is C<8>, which means eight asynchronous operations can execute
635     concurrently at any one time (the number of outstanding requests,
636     however, is unlimited).
637    
638 root 1.18 BDB starts threads only on demand, when an BDB request is queued and
639 root 1.1 no free thread exists. Please note that queueing up a hundred requests can
640     create demand for a hundred threads, even if it turns out that everything
641     is in the cache and could have been processed faster by a single thread.
642    
643     It is recommended to keep the number of threads relatively low, as some
644     Linux kernel versions will scale negatively with the number of threads
645     (higher parallelity => MUCH higher latency). With current Linux 2.6
646     versions, 4-32 threads should be fine.
647    
648     Under most circumstances you don't need to call this function, as the
649     module selects a default that is suitable for low to moderate load.
650    
651 root 1.2 =item BDB::max_parallel $nthreads
652 root 1.1
653 root 1.18 Sets the maximum number of BDB threads to C<$nthreads>. If more than the
654 root 1.1 specified number of threads are currently running, this function kills
655     them. This function blocks until the limit is reached.
656    
657     While C<$nthreads> are zero, aio requests get queued but not executed
658     until the number of threads has been increased again.
659    
660     This module automatically runs C<max_parallel 0> at program end, to ensure
661     that all threads are killed and that there are no outstanding requests.
662    
663     Under normal circumstances you don't need to call this function.
664    
665 root 1.2 =item BDB::max_idle $nthreads
666 root 1.1
667     Limit the number of threads (default: 4) that are allowed to idle (i.e.,
668     threads that did not get a request to process within 10 seconds). That
669     means if a thread becomes idle while C<$nthreads> other threads are also
670     idle, it will free its resources and exit.
671    
672     This is useful when you allow a large number of threads (e.g. 100 or 1000)
673     to allow for extremely high load situations, but want to free resources
674     under normal circumstances (1000 threads can easily consume 30MB of RAM).
675    
676     The default is probably ok in most situations, especially if thread
677     creation is fast. If thread creation is very slow on your system you might
678     want to use larger values.
679    
680 root 1.2 =item $oldmaxreqs = BDB::max_outstanding $maxreqs
681 root 1.1
682     This is a very bad function to use in interactive programs because it
683     blocks, and a bad way to reduce concurrency because it is inexact: Better
684     use an C<aio_group> together with a feed callback.
685    
686     Sets the maximum number of outstanding requests to C<$nreqs>. If you
687     to queue up more than this number of requests, the next call to the
688     C<poll_cb> (and C<poll_some> and other functions calling C<poll_cb>)
689     function will block until the limit is no longer exceeded.
690    
691     The default value is very large, so there is no practical limit on the
692     number of outstanding requests.
693    
694     You can still queue as many requests as you want. Therefore,
695     C<max_oustsanding> is mainly useful in simple scripts (with low values) or
696     as a stop gap to shield against fatal memory overflow (with large values).
697    
698 root 1.3 =item BDB::set_sync_prepare $cb
699    
700     Sets a callback that is called whenever a request is created without an
701     explicit callback. It has to return two code references. The first is used
702 root 1.37 as the request callback (it should save the return status), and the second
703     is called to wait until the first callback has been called (it must set
704     C<$!> to the return status).
705    
706     This mechanism can be used to include BDB into other event mechanisms,
707     such as L<AnyEvent::BDB> or L<Coro::BDB>.
708    
709     The default implementation works like this:
710 root 1.3
711     sub {
712     my $status;
713     (
714     sub { $status = $! },
715     sub { BDB::poll while !defined $status; $! = $status },
716     )
717     }
718    
719 root 1.37 It simply blocks the process till the request has finished and then sets
720     C<$!> to the return value. This means that if you don't use a callback,
721     BDB will simply fall back to synchronous operations.
722    
723 root 1.3 =back
724    
725 root 1.1 =head3 STATISTICAL INFORMATION
726    
727 root 1.3 =over 4
728    
729 root 1.2 =item BDB::nreqs
730 root 1.1
731     Returns the number of requests currently in the ready, execute or pending
732     states (i.e. for which their callback has not been invoked yet).
733    
734     Example: wait till there are no outstanding requests anymore:
735    
736 root 1.2 BDB::poll_wait, BDB::poll_cb
737     while BDB::nreqs;
738 root 1.1
739 root 1.2 =item BDB::nready
740 root 1.1
741     Returns the number of requests currently in the ready state (not yet
742     executed).
743    
744 root 1.2 =item BDB::npending
745 root 1.1
746     Returns the number of requests currently in the pending state (executed,
747     but not yet processed by poll_cb).
748    
749     =back
750    
751     =cut
752    
753 root 1.3 set_sync_prepare {
754     my $status;
755     (
756     sub {
757     $status = $!;
758     },
759     sub {
760     BDB::poll while !defined $status;
761     $! = $status;
762     },
763     )
764     };
765    
766 root 1.1 min_parallel 8;
767    
768     END { flush }
769    
770     1;
771    
772     =head2 FORK BEHAVIOUR
773    
774     This module should do "the right thing" when the process using it forks:
775    
776 root 1.18 Before the fork, BDB enters a quiescent state where no requests
777 root 1.1 can be added in other threads and no results will be processed. After
778     the fork the parent simply leaves the quiescent state and continues
779     request/result processing, while the child frees the request/result queue
780     (so that the requests started before the fork will only be handled in the
781     parent). Threads will be started on demand until the limit set in the
782     parent process has been reached again.
783    
784     In short: the parent will, after a short pause, continue as if fork had
785 root 1.18 not been called, while the child will act as if BDB has not been used
786 root 1.1 yet.
787    
788 root 1.26 Win32 note: there is no fork on win32, and perls emulation of it is too
789     broken to be supported, so do not use BDB in a windows pseudo-fork, better
790     yet, switch to a more capable platform.
791    
792 root 1.1 =head2 MEMORY USAGE
793    
794     Per-request usage:
795    
796     Each aio request uses - depending on your architecture - around 100-200
797     bytes of memory. In addition, stat requests need a stat buffer (possibly
798     a few hundred bytes), readdir requires a result buffer and so on. Perl
799     scalars and other data passed into aio requests will also be locked and
800     will consume memory till the request has entered the done state.
801    
802 root 1.13 This is not awfully much, so queuing lots of requests is not usually a
803 root 1.1 problem.
804    
805     Per-thread usage:
806    
807     In the execution phase, some aio requests require more memory for
808     temporary buffers, and each thread requires a stack and other data
809     structures (usually around 16k-128k, depending on the OS).
810    
811     =head1 KNOWN BUGS
812    
813 root 1.15 Known bugs will be fixed in the next release, except:
814    
815     If you use a transaction in any request, and the request returns
816     with an operating system error or DB_LOCK_NOTGRANTED, the internal
817     TXN_DEADLOCK flag will be set on the transaction. See C<db_txn_finish>,
818     above.
819 root 1.1
820     =head1 SEE ALSO
821    
822 root 1.36 L<AnyEvent::BDB> (event loop integration), L<Coro::BDB> (more natural
823     syntax), L<IO::AIO> (nice to have).
824 root 1.1
825     =head1 AUTHOR
826    
827     Marc Lehmann <schmorp@schmorp.de>
828     http://home.schmorp.de/
829    
830     =cut
831