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