ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/BDB.pm
(Generate patch)

Comparing BDB/BDB.pm (file contents):
Revision 1.52 by root, Mon Oct 20 02:33:40 2008 UTC vs.
Revision 1.53 by root, Tue Oct 21 02:21:25 2008 UTC

116 $VERSION = '1.81'; 116 $VERSION = '1.81';
117 117
118 our @BDB_REQ = qw( 118 our @BDB_REQ = qw(
119 db_env_open db_env_close db_env_txn_checkpoint db_env_lock_detect 119 db_env_open db_env_close db_env_txn_checkpoint db_env_lock_detect
120 db_env_memp_sync db_env_memp_trickle db_env_dbrename db_env_dbremove 120 db_env_memp_sync db_env_memp_trickle db_env_dbrename db_env_dbremove
121 db_env_log_archive
121 db_open db_close db_compact db_sync db_upgrade 122 db_open db_close db_compact db_sync db_upgrade
122 db_put db_exists db_get db_pget db_del db_key_range 123 db_put db_exists db_get db_pget db_del db_key_range
123 db_txn_commit db_txn_abort db_txn_finish 124 db_txn_commit db_txn_abort db_txn_finish
124 db_c_close db_c_count db_c_put db_c_get db_c_pget db_c_del 125 db_c_close db_c_count db_c_put db_c_get db_c_pget db_c_del
125 db_sequence_open db_sequence_close 126 db_sequence_open db_sequence_close
135 136
136 require XSLoader; 137 require XSLoader;
137 XSLoader::load ("BDB", $VERSION); 138 XSLoader::load ("BDB", $VERSION);
138} 139}
139 140
140=head2 WIN32 FILENAMES/DATABASE NAME MESS
141
142Perl on Win32 supports only ASCII filenames (the reason is that it abuses
143an internal flag to store wether a filename is Unicode or ANSI, but that
144flag is used for somethign else in the perl core, so there is no way to
145detect wether a filename is ANSI or Unicode-encoded). The BDB module
146tries to work around this issue by assuming that the filename is an ANSI
147filename and BDB was built for unicode support.
148
149=head2 BERKELEYDB FUNCTIONS 141=head1 BERKELEYDB FUNCTIONS
150 142
151All of these are functions. The create functions simply return a new 143All of these are functions. The create functions simply return a new
152object and never block. All the remaining functions take an optional 144object and never block. All the remaining functions take an optional
153callback as last argument. If it is missing, then the function will be 145callback as last argument. If it is missing, then the function will be
154executed synchronously. In both cases, C<$!> will reflect the return value 146executed synchronously. In both cases, C<$!> will reflect the return value
193 185
194 db_env_txn_checkpoint $db_env, 0, 0, 0, undef; 186 db_env_txn_checkpoint $db_env, 0, 0, 0, undef;
195 db_env_txn_checkpoint $db_env, 0, 0, 0; 187 db_env_txn_checkpoint $db_env, 0, 0, 0;
196 db_env_txn_checkpoint $db_env, 0; 188 db_env_txn_checkpoint $db_env, 0;
197 189
198=head3 BDB functions 190=head2 BDB functions
199 191
200Functions in the BDB namespace, exported by default: 192Functions in the BDB namespace, exported by default:
201 193
202 $env = db_env_create (U32 env_flags = 0) 194 $env = db_env_create (U32 env_flags = 0)
203 flags: RPCCLIENT 195 flags: RPCCLIENT
211 atype: LOCK_DEFAULT LOCK_EXPIRE LOCK_MAXLOCKS LOCK_MAXWRITE LOCK_MINLOCKS LOCK_MINWRITE LOCK_OLDEST LOCK_RANDOM LOCK_YOUNGEST 203 atype: LOCK_DEFAULT LOCK_EXPIRE LOCK_MAXLOCKS LOCK_MAXWRITE LOCK_MINLOCKS LOCK_MINWRITE LOCK_OLDEST LOCK_RANDOM LOCK_YOUNGEST
212 db_env_memp_sync (DB_ENV *env, SV *dummy = 0, SV *callback = &PL_sv_undef) 204 db_env_memp_sync (DB_ENV *env, SV *dummy = 0, SV *callback = &PL_sv_undef)
213 db_env_memp_trickle (DB_ENV *env, int percent, SV *dummy = 0, SV *callback = &PL_sv_undef) 205 db_env_memp_trickle (DB_ENV *env, int percent, SV *dummy = 0, SV *callback = &PL_sv_undef)
214 db_env_dbremove (DB_ENV *env, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, U32 flags = 0, SV *callback = &PL_sv_undef) 206 db_env_dbremove (DB_ENV *env, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, U32 flags = 0, SV *callback = &PL_sv_undef)
215 db_env_dbrename (DB_ENV *env, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, bdb_filename newname, U32 flags = 0, SV *callback = &PL_sv_undef) 207 db_env_dbrename (DB_ENV *env, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, bdb_filename newname, U32 flags = 0, SV *callback = &PL_sv_undef)
208 db_env_log_archive (DB_ENV *env, SV *listp, U32 flags = 0, SV *callback = &PL_sv_undef)
216 209
217 $db = db_create (DB_ENV *env = 0, U32 flags = 0) 210 $db = db_create (DB_ENV *env = 0, U32 flags = 0)
218 flags: XA_CREATE 211 flags: XA_CREATE
219 212
220 db_open (DB *db, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, int type, U32 flags, int mode, SV *callback = &PL_sv_undef) 213 db_open (DB *db, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, int type, U32 flags, int mode, SV *callback = &PL_sv_undef)
253 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) 246 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)
254 flags: TXN_NOSYNC 247 flags: TXN_NOSYNC
255 db_sequence_remove (DB_SEQUENCE *seq, DB_TXN_ornull *txnid = 0, U32 flags = 0, SV *callback = &PL_sv_undef) 248 db_sequence_remove (DB_SEQUENCE *seq, DB_TXN_ornull *txnid = 0, U32 flags = 0, SV *callback = &PL_sv_undef)
256 flags: TXN_NOSYNC 249 flags: TXN_NOSYNC
257 250
258=head4 db_txn_finish (DB_TXN *txn, U32 flags = 0, SV *callback = &PL_sv_undef) 251=head3 db_txn_finish (DB_TXN *txn, U32 flags = 0, SV *callback = &PL_sv_undef)
259 252
260This is not actually a Berkeley DB function but a BDB module 253This is not actually a Berkeley DB function but a BDB module
261extension. The background for this exytension is: It is very annoying to 254extension. The background for this exytension is: It is very annoying to
262have to check every single BDB function for error returns and provide a 255have to check every single BDB function for error returns and provide a
263codepath out of your transaction. While the BDB module still makes this 256codepath out of your transaction. While the BDB module still makes this
289 282
290You can use the C<< $txn->failed >> method to check wether a transaction 283You can use the C<< $txn->failed >> method to check wether a transaction
291has failed in this way and abort further processing (excluding 284has failed in this way and abort further processing (excluding
292C<db_txn_finish>). 285C<db_txn_finish>).
293 286
294=head3 DB_ENV/database environment methods 287=head2 DB_ENV/database environment methods
295 288
296Methods available on DB_ENV/$env handles: 289Methods available on DB_ENV/$env handles:
297 290
298 DESTROY (DB_ENV_ornull *env) 291 DESTROY (DB_ENV_ornull *env)
299 CODE: 292 CODE:
329 322
330 $txn = $env->txn_begin (DB_TXN_ornull *parent = 0, U32 flags = 0) 323 $txn = $env->txn_begin (DB_TXN_ornull *parent = 0, U32 flags = 0)
331 flags: READ_COMMITTED READ_UNCOMMITTED TXN_NOSYNC TXN_NOWAIT TXN_SNAPSHOT TXN_SYNC TXN_WAIT TXN_WRITE_NOSYNC 324 flags: READ_COMMITTED READ_UNCOMMITTED TXN_NOSYNC TXN_NOWAIT TXN_SNAPSHOT TXN_SYNC TXN_WAIT TXN_WRITE_NOSYNC
332 $txn = $env->cdsgroup_begin; (v4.5) 325 $txn = $env->cdsgroup_begin; (v4.5)
333 326
334=head4 Example: 327=head3 Example:
335 328
336 use AnyEvent; 329 use AnyEvent;
337 use BDB; 330 use BDB;
338 331
339 our $FH; open $FH, "<&=" . BDB::poll_fileno; 332 our $FH; open $FH, "<&=" . BDB::poll_fileno;
351 0600; 344 0600;
352 345
353 $env->set_flags (BDB::AUTO_COMMIT | BDB::TXN_NOSYNC, 1); 346 $env->set_flags (BDB::AUTO_COMMIT | BDB::TXN_NOSYNC, 1);
354 347
355 348
356=head3 DB/database methods 349=head2 DB/database methods
357 350
358Methods available on DB/$db handles: 351Methods available on DB/$db handles:
359 352
360 DESTROY (DB_ornull *db) 353 DESTROY (DB_ornull *db)
361 CODE: 354 CODE:
387 380
388 $dbc = $db->cursor (DB_TXN_ornull *txn = 0, U32 flags = 0) 381 $dbc = $db->cursor (DB_TXN_ornull *txn = 0, U32 flags = 0)
389 flags: READ_COMMITTED READ_UNCOMMITTED WRITECURSOR TXN_SNAPSHOT 382 flags: READ_COMMITTED READ_UNCOMMITTED WRITECURSOR TXN_SNAPSHOT
390 $seq = $db->sequence (U32 flags = 0) 383 $seq = $db->sequence (U32 flags = 0)
391 384
392=head4 Example: 385=head3 Example:
393 386
394 my $db = db_create $env; 387 my $db = db_create $env;
395 db_open $db, undef, "table", undef, BDB::BTREE, BDB::AUTO_COMMIT | BDB::CREATE | BDB::READ_UNCOMMITTED, 0600; 388 db_open $db, undef, "table", undef, BDB::BTREE, BDB::AUTO_COMMIT | BDB::CREATE | BDB::READ_UNCOMMITTED, 0600;
396 389
397 for (1..1000) { 390 for (1..1000) {
404 db_del $db, undef, "key $_" for 1..1000; 397 db_del $db, undef, "key $_" for 1..1000;
405 398
406 db_sync $db; 399 db_sync $db;
407 400
408 401
409=head3 DB_TXN/transaction methods 402=head2 DB_TXN/transaction methods
410 403
411Methods available on DB_TXN/$txn handles: 404Methods available on DB_TXN/$txn handles:
412 405
413 DESTROY (DB_TXN_ornull *txn) 406 DESTROY (DB_TXN_ornull *txn)
414 CODE: 407 CODE:
420 413
421 $bool = $txn->failed 414 $bool = $txn->failed
422 # see db_txn_finish documentation, above 415 # see db_txn_finish documentation, above
423 416
424 417
425=head3 DBC/cursor methods 418=head2 DBC/cursor methods
426 419
427Methods available on DBC/$dbc handles: 420Methods available on DBC/$dbc handles:
428 421
429 DESTROY (DBC_ornull *dbc) 422 DESTROY (DBC_ornull *dbc)
430 CODE: 423 CODE:
431 if (dbc) 424 if (dbc)
432 dbc->c_close (dbc); 425 dbc->c_close (dbc);
433 426
434 $int = $cursor->set_priority ($priority = PRIORITY_*) (v4.6) 427 $int = $cursor->set_priority ($priority = PRIORITY_*) (v4.6)
435 428
436=head4 Example: 429=head3 Example:
437 430
438 my $c = $db->cursor; 431 my $c = $db->cursor;
439 432
440 for (;;) { 433 for (;;) {
441 db_c_get $c, my $key, my $data, BDB::NEXT; 434 db_c_get $c, my $key, my $data, BDB::NEXT;
444 } 437 }
445 438
446 db_c_close $c; 439 db_c_close $c;
447 440
448 441
449=head3 DB_SEQUENCE/sequence methods 442=head2 DB_SEQUENCE/sequence methods
450 443
451Methods available on DB_SEQUENCE/$seq handles: 444Methods available on DB_SEQUENCE/$seq handles:
452 445
453 DESTROY (DB_SEQUENCE_ornull *seq) 446 DESTROY (DB_SEQUENCE_ornull *seq)
454 CODE: 447 CODE:
459 $int = $seq->set_cachesize (U32 size) 452 $int = $seq->set_cachesize (U32 size)
460 $int = $seq->set_flags (U32 flags) 453 $int = $seq->set_flags (U32 flags)
461 flags: SEQ_DEC SEQ_INC SEQ_WRAP 454 flags: SEQ_DEC SEQ_INC SEQ_WRAP
462 $int = $seq->set_range (db_seq_t min, db_seq_t max) 455 $int = $seq->set_range (db_seq_t min, db_seq_t max)
463 456
464=head4 Example: 457=head3 Example:
465 458
466 my $seq = $db->sequence; 459 my $seq = $db->sequence;
467 460
468 db_sequence_open $seq, undef, "seq", BDB::CREATE; 461 db_sequence_open $seq, undef, "seq", BDB::CREATE;
469 db_sequence_get $seq, undef, 1, my $value; 462 db_sequence_get $seq, undef, 1, my $value;
470 463
471 464
472=head2 SUPPORT FUNCTIONS 465=head1 SUPPORT FUNCTIONS
473 466
474=head3 EVENT PROCESSING AND EVENT LOOP INTEGRATION 467=head2 EVENT PROCESSING AND EVENT LOOP INTEGRATION
475 468
476=over 4 469=over 4
477 470
478=item $msg = BDB::strerror [$errno] 471=item $msg = BDB::strerror [$errno]
479 472
566 BDB::poll_wait, BDB::poll_cb 559 BDB::poll_wait, BDB::poll_cb
567 while BDB::nreqs; 560 while BDB::nreqs;
568 561
569=back 562=back
570 563
571=head3 VERSION CHECKING 564=head2 VERSION CHECKING
572 565
573BerkeleyDB comes in various versions, many of them have minor 566BerkeleyDB comes in various versions, many of them have minor
574incompatibilities. This means that traditional "at least version x.x" 567incompatibilities. This means that traditional "at least version x.x"
575checks are often not sufficient. 568checks are often not sufficient.
576 569
632 625
633 VERSION_v 626 VERSION_v
634 } 627 }
635} 628}
636 629
637=head3 CONTROLLING THE NUMBER OF THREADS 630=head2 CONTROLLING THE NUMBER OF THREADS
638 631
639=over 4 632=over 4
640 633
641=item BDB::min_parallel $nthreads 634=item BDB::min_parallel $nthreads
642 635
735execute callback-less BDB requests in the foreground thread, setting C<$!> 728execute callback-less BDB requests in the foreground thread, setting C<$!>
736to the return value, without polling for other events. 729to the return value, without polling for other events.
737 730
738=back 731=back
739 732
740=head3 STATISTICAL INFORMATION 733=head2 STATISTICAL INFORMATION
741 734
742=over 4 735=over 4
743 736
744=item BDB::nreqs 737=item BDB::nreqs
745 738
771 764
772END { flush } 765END { flush }
773 766
7741; 7671;
775 768
769=head1 COMMON PITFALLS
770
771=head2 Unexpected Crashes
772
773Remember that, by default, BDB will execute requests in parallel, in
774somewhat random order. That means that it is easy to run a C<db_get>
775request on thesa me database as a concurrent C<db_close> request, leading
776to a crash, silent data corruption, eventually the next world war on
777terrorism.
778
779If you only ever use foreground requests (without a callback), this will
780not be an issue.
781
782=head2 Unexpected Freezes or Deadlocks
783
784Remember that, by default, BDB will execute requests in parallel, which
785easily leads to deadlocks (even concurrent put's on the same database can
786deadlock).
787
788You either need to run deadlock detection (and handle the resulting
789errors), or make sure only one process ever updates the database, ine one
790thread, e.g. by using only foreground requests (without a callback).
791
776=head2 FORK BEHAVIOUR 792=head1 FORK BEHAVIOUR
777 793
778This module should do "the right thing" when the process using it forks: 794This module should do "the right thing" when the process using it forks:
779 795
780Before the fork, BDB enters a quiescent state where no requests 796Before the fork, BDB enters a quiescent state where no requests
781can be added in other threads and no results will be processed. After 797can be added in other threads and no results will be processed. After
791 807
792Win32 note: there is no fork on win32, and perls emulation of it is too 808Win32 note: there is no fork on win32, and perls emulation of it is too
793broken to be supported, so do not use BDB in a windows pseudo-fork, better 809broken to be supported, so do not use BDB in a windows pseudo-fork, better
794yet, switch to a more capable platform. 810yet, switch to a more capable platform.
795 811
796=head2 MEMORY USAGE 812=head1 MEMORY USAGE
797 813
798Per-request usage: 814Per-request usage:
799 815
800Each aio request uses - depending on your architecture - around 100-200 816Each aio request uses - depending on your architecture - around 100-200
801bytes of memory. In addition, stat requests need a stat buffer (possibly 817bytes of memory. In addition, stat requests need a stat buffer (possibly
810 826
811In the execution phase, some aio requests require more memory for 827In the execution phase, some aio requests require more memory for
812temporary buffers, and each thread requires a stack and other data 828temporary buffers, and each thread requires a stack and other data
813structures (usually around 16k-128k, depending on the OS). 829structures (usually around 16k-128k, depending on the OS).
814 830
831=head1 WIN32 FILENAMES/DATABASE NAME MESS
832
833Perl on Win32 supports only ASCII filenames (the reason is that it abuses
834an internal flag to store wether a filename is Unicode or ANSI, but that
835flag is used for somethign else in the perl core, so there is no way to
836detect wether a filename is ANSI or Unicode-encoded). The BDB module
837tries to work around this issue by assuming that the filename is an ANSI
838filename and BDB was built for unicode support.
839
815=head1 KNOWN BUGS 840=head1 KNOWN BUGS
816 841
817Known bugs will be fixed in the next release, except: 842Known bugs will be fixed in the next release, except:
818 843
819 If you use a transaction in any request, and the request returns 844 If you use a transaction in any request, and the request returns

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines