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