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

Comparing AnyEvent-MP/MP.pm (file contents):
Revision 1.129 by root, Thu Mar 8 21:37:51 2012 UTC vs.
Revision 1.136 by root, Wed Mar 21 15:22:16 2012 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines