ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/README
Revision: 1.4
Committed: Fri Dec 7 13:39:04 2007 UTC (16 years, 5 months ago) by root
Branch: MAIN
CVS Tags: rel-1_3
Changes since 1.3: +52 -17 lines
Log Message:
*** empty log message ***

File Contents

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