ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/AnyEvent-MP/MP.pm
(Generate patch)

Comparing cvsroot/AnyEvent-MP/MP.pm (file contents):
Revision 1.129 by root, Thu Mar 8 21:37:51 2012 UTC vs.
Revision 1.133 by root, Mon Mar 12 10:34:06 2012 UTC

398 398
399=cut 399=cut
400 400
401sub rcv($@); 401sub rcv($@);
402 402
403sub _kilme { 403my $KILME = sub {
404 die "received message on port without callback"; 404 (my $tag = substr $_[0], 0, 30) =~ s/([\x20-\x7e])/./g;
405} 405 kil $SELF, unhandled_message => "no callback set for message (first element $tag)";
406};
406 407
407sub port(;&) { 408sub port(;&) {
408 my $id = $UNIQ . ++$ID; 409 my $id = $UNIQ . ++$ID;
409 my $port = "$NODE#$id"; 410 my $port = "$NODE#$id";
410 411
411 rcv $port, shift || \&_kilme; 412 rcv $port, shift || $KILME;
412 413
413 $port 414 $port
414} 415}
415 416
416=item rcv $local_port, $callback->(@msg) 417=item rcv $local_port, $callback->(@msg)
421 422
422The global C<$SELF> (exported by this module) contains C<$port> while 423The global C<$SELF> (exported by this module) contains C<$port> while
423executing the callback. Runtime errors during callback execution will 424executing the callback. Runtime errors during callback execution will
424result in the port being C<kil>ed. 425result in the port being C<kil>ed.
425 426
426The default callback received all messages not matched by a more specific 427The default callback receives all messages not matched by a more specific
427C<tag> match. 428C<tag> match.
428 429
429=item rcv $local_port, tag => $callback->(@msg_without_tag), ... 430=item rcv $local_port, tag => $callback->(@msg_without_tag), ...
430 431
431Register (or replace) callbacks to be called on messages starting with the 432Register (or replace) callbacks to be called on messages starting with the
732will be reported as reason C<< die => $@ >>. 733will be reported as reason C<< die => $@ >>.
733 734
734Transport/communication errors are reported as C<< transport_error => 735Transport/communication errors are reported as C<< transport_error =>
735$message >>. 736$message >>.
736 737
737=cut 738Common idioms:
739
740 # silently remove yourself, do not kill linked ports
741 kil $SELF;
742
743 # report a failure in some detail
744 kil $SELF, failure_mode_1 => "it failed with too high temperature";
745
746 # do not waste much time with killing, just die when something goes wrong
747 open my $fh, "<file"
748 or die "file: $!";
738 749
739=item $port = spawn $node, $initfunc[, @initdata] 750=item $port = spawn $node, $initfunc[, @initdata]
740 751
741Creates a port on the node C<$node> (which can also be a port ID, in which 752Creates a port on the node C<$node> (which can also be a port ID, in which
742case it's the node where that port resides). 753case it's the node where that port resides).
894=back 905=back
895 906
896=head1 DISTRIBUTED DATABASE 907=head1 DISTRIBUTED DATABASE
897 908
898AnyEvent::MP comes with a simple distributed database. The database will 909AnyEvent::MP comes with a simple distributed database. The database will
899be mirrored asynchronously at all global nodes. Other nodes bind to one of 910be mirrored asynchronously on all global nodes. Other nodes bind to one
900the global nodes for their needs. 911of the global nodes for their needs. Every node has a "local database"
912which contains all the values that are set locally. All local databases
913are merged together to form the global database, which can be queried.
901 914
902The database consists of a two-level hash - a hash contains a hash which 915The database structure is that of a two-level hash - the database hash
903contains values. 916contains hashes which contain values, similarly to a perl hash of hashes,
917i.e.:
918
919 $DATABASE{$family}{$subkey} = $value
904 920
905The top level hash key is called "family", and the second-level hash key 921The top level hash key is called "family", and the second-level hash key
906is called "subkey" or simply "key". 922is called "subkey" or simply "key".
907 923
908The family must be alphanumeric, i.e. start with a letter and consist 924The family must be alphanumeric, i.e. start with a letter and consist
913with the name of the application or module using it. 929with the name of the application or module using it.
914 930
915The subkeys must be non-empty strings, with no further restrictions. 931The subkeys must be non-empty strings, with no further restrictions.
916 932
917The values should preferably be strings, but other perl scalars should 933The values should preferably be strings, but other perl scalars should
918work as well (such as undef, arrays and hashes). 934work as well (such as C<undef>, arrays and hashes).
919 935
920Every database entry is owned by one node - adding the same family/subkey 936Every database entry is owned by one node - adding the same family/subkey
921combination on multiple nodes will not cause discomfort for AnyEvent::MP, 937combination on multiple nodes will not cause discomfort for AnyEvent::MP,
922but the result might be nondeterministic, i.e. the key might have 938but the result might be nondeterministic, i.e. the key might have
923different values on different nodes. 939different values on different nodes.
953=item db_set $family => $subkey [=> $value] 969=item db_set $family => $subkey [=> $value]
954 970
955Sets (or replaces) a key to the database - if C<$value> is omitted, 971Sets (or replaces) a key to the database - if C<$value> is omitted,
956C<undef> is used instead. 972C<undef> is used instead.
957 973
958=item db_del $family => $subkey 974=item db_del $family => $subkey...
959 975
960Deletes a key from the database. 976Deletes one or more subkeys from the database family.
961 977
962=item $guard = db_reg $family => $subkey [=> $value] 978=item $guard = db_reg $family => $subkey [=> $value]
963 979
964Sets the key on the database and returns a guard. When the guard is 980Sets the key on the database and returns a guard. When the guard is
965destroyed, the key is deleted from the database. If C<$value> is missing, 981destroyed, the key is deleted from the database. If C<$value> is missing,
978=item db_values $family => $cb->(\@values) 994=item db_values $family => $cb->(\@values)
979 995
980Same as C<db_family>, except it only queries the family I<values> and passes them 996Same as C<db_family>, except it only queries the family I<values> and passes them
981as array reference to the callback. 997as array reference to the callback.
982 998
983=item $guard = db_mon $family => $cb->($familyhash, \@subkeys...) 999=item $guard = db_mon $family => $cb->($familyhash, \@added, \@changed, \@deleted)
984 1000
985Creates a monitor on the given database family. Each time a key is set or 1001Creates a monitor on the given database family. Each time a key is set
986or is deleted the callback is called with a hash containing the database 1002or or is deleted the callback is called with a hash containing the
987family and an arrayref with subkeys that have changed. 1003database family and three lists of added, changed and deleted subkeys,
1004respectively. If no keys have changed then the array reference might be
1005C<undef> or even missing.
988 1006
989Specifically, if one of the passed subkeys exists in the $familyhash, then 1007If not called in void context, a guard object is returned that, when
990it is currently set to the value in the $familyhash. Otherwise, it has 1008destroyed, stops the monitor.
991been deleted.
992 1009
993The family hash reference belongs to AnyEvent::MP and B<must not be 1010The family hash reference and the key arrays belong to AnyEvent::MP and
994modified or stored> by the callback. When in doubt, make a copy. 1011B<must not be modified or stored> by the callback. When in doubt, make a
1012copy.
995 1013
996The first call will be with the current contents of the family and all 1014As soon as possible after the monitoring starts, the callback will be
997keys, as if they were just added. 1015called with the intiial contents of the family, even if it is empty,
1016i.e. there will always be a timely call to the callback with the current
1017contents.
998 1018
999It is possible that the callback is called with a change event even though 1019It is possible that the callback is called with a change event even though
1000the subkey is already present and the value has not changed. 1020the subkey is already present and the value has not changed.
1001 1021
1002The monitoring stops when the guard object is destroyed. 1022The monitoring stops when the guard object is destroyed.
1003 1023
1004Example: on every change to the family "mygroup", print out all keys. 1024Example: on every change to the family "mygroup", print out all keys.
1005 1025
1006 my $guard = db_mon mygroup => sub { 1026 my $guard = db_mon mygroup => sub {
1007 my ($family, $keys) = @_; 1027 my ($family, $a, $c, $d) = @_;
1008 print "mygroup members: ", (join " ", keys %$family), "\n"; 1028 print "mygroup members: ", (join " ", keys %$family), "\n";
1009 }; 1029 };
1010 1030
1011Exmaple: wait until the family "My::Module::workers" is non-empty. 1031Exmaple: wait until the family "My::Module::workers" is non-empty.
1012 1032
1013 my $guard; $guard = db_mon My::Module::workers => sub { 1033 my $guard; $guard = db_mon My::Module::workers => sub {
1014 my ($family, $keys) = @_; 1034 my ($family, $a, $c, $d) = @_;
1015 return unless %$family; 1035 return unless %$family;
1016 undef $guard; 1036 undef $guard;
1017 print "My::Module::workers now nonempty\n"; 1037 print "My::Module::workers now nonempty\n";
1018 }; 1038 };
1019 1039
1020Example: print all changes to the family "AnyRvent::Fantasy::Module". 1040Example: print all changes to the family "AnyRvent::Fantasy::Module".
1021 1041
1022 my $guard = db_mon AnyRvent::Fantasy::Module => sub { 1042 my $guard = db_mon AnyRvent::Fantasy::Module => sub {
1023 my ($family, $keys) = @_; 1043 my ($family, $a, $c, $d) = @_;
1024 1044
1025 for (@$keys) { 1045 print "+$_=$family->{$_}\n" for @$a;
1026 print "$_: ", 1046 print "*$_=$family->{$_}\n" for @$c;
1027 (exists $family->{$_} 1047 print "-$_=$family->{$_}\n" for @$d;
1028 ? $family->{$_}
1029 : "(deleted)"),
1030 "\n";
1031 }
1032 }; 1048 };
1033 1049
1034=cut 1050=cut
1035 1051
1036=back 1052=back

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines