ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/README
Revision: 1.8
Committed: Sun Mar 30 08:01:59 2008 UTC (16 years, 1 month ago) by root
Branch: MAIN
CVS Tags: rel-1_45
Changes since 1.7: +7 -5 lines
Log Message:
*** empty log message ***

File Contents

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