ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP.pm
Revision: 1.143
Committed: Fri Mar 23 17:54:36 2012 UTC (12 years, 1 month ago) by root
Branch: MAIN
Changes since 1.142: +14 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.89 AnyEvent::MP - erlang-style multi-processing/message-passing framework
4 root 1.1
5     =head1 SYNOPSIS
6    
7     use AnyEvent::MP;
8    
9 root 1.75 $NODE # contains this node's node ID
10     NODE # returns this node's node ID
11 root 1.2
12 root 1.38 $SELF # receiving/own port id in rcv callbacks
13    
14 root 1.48 # initialise the node so it can send/receive messages
15 root 1.72 configure;
16 root 1.48
17 root 1.75 # ports are message destinations
18 root 1.38
19     # sending messages
20 root 1.2 snd $port, type => data...;
21 root 1.38 snd $port, @msg;
22     snd @msg_with_first_element_being_a_port;
23 root 1.2
24 root 1.50 # creating/using ports, the simple way
25 root 1.73 my $simple_port = port { my @msg = @_ };
26 root 1.22
27 root 1.52 # creating/using ports, tagged message matching
28 root 1.38 my $port = port;
29 root 1.73 rcv $port, ping => sub { snd $_[0], "pong" };
30     rcv $port, pong => sub { warn "pong received\n" };
31 root 1.2
32 root 1.48 # create a port on another node
33     my $port = spawn $node, $initfunc, @initdata;
34    
35 root 1.116 # destroy a port again
36 root 1.101 kil $port; # "normal" kill
37     kil $port, my_error => "everything is broken"; # error kill
38    
39 root 1.35 # monitoring
40 root 1.129 mon $port, $cb->(@msg) # callback is invoked on death
41     mon $port, $localport # kill localport on abnormal death
42     mon $port, $localport, @msg # send message on death
43 root 1.35
44 root 1.101 # temporarily execute code in port context
45     peval $port, sub { die "kill the port!" };
46    
47     # execute callbacks in $SELF port context
48     my $timer = AE::timer 1, 0, psub {
49     die "kill the port, delayed";
50     };
51    
52 root 1.143 # distributed database - modification
53     db_set $family => $subkey [=> $value] # add a subkey
54     db_del $family => $subkey... # delete one or more subkeys
55     db_reg $family => $port [=> $value] # register a port
56    
57     # distributed database - queries
58     db_family $family => $cb->(\%familyhash)
59     db_keys $family => $cb->(\@keys)
60     db_values $family => $cb->(\@values)
61    
62     # distributed database - monitoring a family
63     db_mon $family => $cb->(\%familyhash, \@added, \@changed, \@deleted)
64    
65 root 1.1 =head1 DESCRIPTION
66    
67 root 1.2 This module (-family) implements a simple message passing framework.
68    
69     Despite its simplicity, you can securely message other processes running
70 root 1.67 on the same or other hosts, and you can supervise entities remotely.
71 root 1.2
72 root 1.23 For an introduction to this module family, see the L<AnyEvent::MP::Intro>
73 root 1.67 manual page and the examples under F<eg/>.
74 root 1.23
75 root 1.2 =head1 CONCEPTS
76    
77     =over 4
78    
79     =item port
80    
81 root 1.79 Not to be confused with a TCP port, a "port" is something you can send
82     messages to (with the C<snd> function).
83 root 1.29
84 root 1.53 Ports allow you to register C<rcv> handlers that can match all or just
85 root 1.64 some messages. Messages send to ports will not be queued, regardless of
86     anything was listening for them or not.
87 root 1.2
88 root 1.119 Ports are represented by (printable) strings called "port IDs".
89    
90 root 1.67 =item port ID - C<nodeid#portname>
91 root 1.2
92 root 1.123 A port ID is the concatenation of a node ID, a hash-mark (C<#>)
93     as separator, and a port name (a printable string of unspecified
94     format created by AnyEvent::MP).
95 root 1.2
96     =item node
97    
98 root 1.53 A node is a single process containing at least one port - the node port,
99 root 1.67 which enables nodes to manage each other remotely, and to create new
100 root 1.53 ports.
101 root 1.2
102 root 1.67 Nodes are either public (have one or more listening ports) or private
103     (no listening ports). Private nodes cannot talk to other private nodes
104 root 1.119 currently, but all nodes can talk to public nodes.
105    
106     Nodes is represented by (printable) strings called "node IDs".
107 root 1.2
108 root 1.117 =item node ID - C<[A-Za-z0-9_\-.:]*>
109 root 1.2
110 root 1.64 A node ID is a string that uniquely identifies the node within a
111     network. Depending on the configuration used, node IDs can look like a
112     hostname, a hostname and a port, or a random string. AnyEvent::MP itself
113 root 1.119 doesn't interpret node IDs in any way except to uniquely identify a node.
114 root 1.64
115     =item binds - C<ip:port>
116    
117     Nodes can only talk to each other by creating some kind of connection to
118     each other. To do this, nodes should listen on one or more local transport
119 root 1.119 endpoints - binds.
120    
121     Currently, only standard C<ip:port> specifications can be used, which
122     specify TCP ports to listen on. So a bind is basically just a tcp socket
123     in listening mode thta accepts conenctions form other nodes.
124 root 1.64
125 root 1.83 =item seed nodes
126 root 1.64
127 root 1.119 When a node starts, it knows nothing about the network it is in - it
128     needs to connect to at least one other node that is already in the
129     network. These other nodes are called "seed nodes".
130    
131     Seed nodes themselves are not special - they are seed nodes only because
132     some other node I<uses> them as such, but any node can be used as seed
133     node for other nodes, and eahc node cna use a different set of seed nodes.
134 root 1.83
135     In addition to discovering the network, seed nodes are also used to
136 root 1.119 maintain the network - all nodes using the same seed node form are part of
137     the same network. If a network is split into multiple subnets because e.g.
138     the network link between the parts goes down, then using the same seed
139     nodes for all nodes ensures that eventually the subnets get merged again.
140 root 1.83
141     Seed nodes are expected to be long-running, and at least one seed node
142 root 1.85 should always be available. They should also be relatively responsive - a
143     seed node that blocks for long periods will slow down everybody else.
144 root 1.83
145 root 1.119 For small networks, it's best if every node uses the same set of seed
146     nodes. For large networks, it can be useful to specify "regional" seed
147     nodes for most nodes in an area, and use all seed nodes as seed nodes for
148     each other. What's important is that all seed nodes connections form a
149     complete graph, so that the network cannot split into separate subnets
150     forever.
151    
152     Seed nodes are represented by seed IDs.
153    
154     =item seed IDs - C<host:port>
155 root 1.83
156 root 1.119 Seed IDs are transport endpoint(s) (usually a hostname/IP address and a
157 elmex 1.96 TCP port) of nodes that should be used as seed nodes.
158 root 1.29
159 root 1.119 =item global nodes
160    
161     An AEMP network needs a discovery service - nodes need to know how to
162     connect to other nodes they only know by name. In addition, AEMP offers a
163     distributed "group database", which maps group names to a list of strings
164     - for example, to register worker ports.
165    
166     A network needs at least one global node to work, and allows every node to
167     be a global node.
168    
169     Any node that loads the L<AnyEvent::MP::Global> module becomes a global
170     node and tries to keep connections to all other nodes. So while it can
171     make sense to make every node "global" in small networks, it usually makes
172     sense to only make seed nodes into global nodes in large networks (nodes
173     keep connections to seed nodes and global nodes, so makign them the same
174     reduces overhead).
175 root 1.67
176 root 1.2 =back
177    
178 root 1.3 =head1 VARIABLES/FUNCTIONS
179 root 1.2
180     =over 4
181    
182 root 1.1 =cut
183    
184     package AnyEvent::MP;
185    
186 root 1.121 use AnyEvent::MP::Config ();
187 root 1.44 use AnyEvent::MP::Kernel;
188 root 1.121 use AnyEvent::MP::Kernel qw(%NODE %PORT %PORT_DATA $UNIQ $RUNIQ $ID);
189 root 1.2
190 root 1.1 use common::sense;
191    
192 root 1.2 use Carp ();
193    
194 root 1.141 use AnyEvent ();
195 root 1.124 use Guard ();
196 root 1.1
197 root 1.2 use base "Exporter";
198    
199 root 1.121 our $VERSION = $AnyEvent::MP::Config::VERSION;
200 root 1.43
201 root 1.8 our @EXPORT = qw(
202 root 1.59 NODE $NODE *SELF node_of after
203 root 1.72 configure
204 root 1.101 snd rcv mon mon_guard kil psub peval spawn cal
205 root 1.22 port
206 root 1.124 db_set db_del db_reg
207 root 1.128 db_mon db_family db_keys db_values
208 root 1.8 );
209 root 1.2
210 root 1.22 our $SELF;
211    
212     sub _self_die() {
213     my $msg = $@;
214     $msg =~ s/\n+$// unless ref $msg;
215     kil $SELF, die => $msg;
216     }
217    
218     =item $thisnode = NODE / $NODE
219    
220 root 1.67 The C<NODE> function returns, and the C<$NODE> variable contains, the node
221 root 1.64 ID of the node running in the current process. This value is initialised by
222 root 1.72 a call to C<configure>.
223 root 1.22
224 root 1.63 =item $nodeid = node_of $port
225 root 1.22
226 root 1.67 Extracts and returns the node ID from a port ID or a node ID.
227 root 1.34
228 root 1.78 =item configure $profile, key => value...
229    
230 root 1.72 =item configure key => value...
231 root 1.34
232 root 1.64 Before a node can talk to other nodes on the network (i.e. enter
233 root 1.72 "distributed mode") it has to configure itself - the minimum a node needs
234 root 1.64 to know is its own name, and optionally it should know the addresses of
235     some other nodes in the network to discover other nodes.
236 root 1.34
237 root 1.121 This function configures a node - it must be called exactly once (or
238     never) before calling other AnyEvent::MP functions.
239    
240 root 1.108 The key/value pairs are basically the same ones as documented for the
241 root 1.127 F<aemp> command line utility (sans the set/del prefix), with these additions:
242 root 1.121
243     =over 4
244    
245     =item norc => $boolean (default false)
246    
247     If true, then the rc file (e.g. F<~/.perl-anyevent-mp>) will I<not>
248     be consulted - all configuraiton options must be specified in the
249     C<configure> call.
250 root 1.108
251 root 1.121 =item force => $boolean (default false)
252    
253     IF true, then the values specified in the C<configure> will take
254     precedence over any values configured via the rc file. The default is for
255     the rc file to override any options specified in the program.
256    
257     =back
258 root 1.34
259 root 1.72 =over 4
260    
261     =item step 1, gathering configuration from profiles
262    
263     The function first looks up a profile in the aemp configuration (see the
264     L<aemp> commandline utility). The profile name can be specified via the
265 root 1.78 named C<profile> parameter or can simply be the first parameter). If it is
266     missing, then the nodename (F<uname -n>) will be used as profile name.
267 root 1.34
268 root 1.72 The profile data is then gathered as follows:
269 root 1.69
270 elmex 1.77 First, all remaining key => value pairs (all of which are conveniently
271 root 1.72 undocumented at the moment) will be interpreted as configuration
272     data. Then they will be overwritten by any values specified in the global
273     default configuration (see the F<aemp> utility), then the chain of
274     profiles chosen by the profile name (and any C<parent> attributes).
275    
276     That means that the values specified in the profile have highest priority
277     and the values specified directly via C<configure> have lowest priority,
278     and can only be used to specify defaults.
279 root 1.49
280 root 1.64 If the profile specifies a node ID, then this will become the node ID of
281 root 1.122 this process. If not, then the profile name will be used as node ID, with
282 root 1.126 a unique randoms tring (C</%u>) appended.
283 root 1.122
284 root 1.126 The node ID can contain some C<%> sequences that are expanded: C<%n>
285     is expanded to the local nodename, C<%u> is replaced by a random
286     strign to make the node unique. For example, the F<aemp> commandline
287     utility uses C<aemp/%n/%u> as nodename, which might expand to
288     C<aemp/cerebro/ZQDGSIkRhEZQDGSIkRhE>.
289 root 1.64
290 root 1.72 =item step 2, bind listener sockets
291    
292 root 1.64 The next step is to look up the binds in the profile, followed by binding
293     aemp protocol listeners on all binds specified (it is possible and valid
294     to have no binds, meaning that the node cannot be contacted form the
295     outside. This means the node cannot talk to other nodes that also have no
296     binds, but it can still talk to all "normal" nodes).
297    
298 root 1.70 If the profile does not specify a binds list, then a default of C<*> is
299 root 1.72 used, meaning the node will bind on a dynamically-assigned port on every
300     local IP address it finds.
301    
302     =item step 3, connect to seed nodes
303 root 1.64
304 root 1.119 As the last step, the seed ID list from the profile is passed to the
305 root 1.64 L<AnyEvent::MP::Global> module, which will then use it to keep
306 root 1.72 connectivity with at least one node at any point in time.
307 root 1.64
308 root 1.72 =back
309    
310 root 1.87 Example: become a distributed node using the local node name as profile.
311 root 1.72 This should be the most common form of invocation for "daemon"-type nodes.
312 root 1.34
313 root 1.72 configure
314 root 1.34
315 root 1.126 Example: become a semi-anonymous node. This form is often used for
316     commandline clients.
317 root 1.34
318 root 1.126 configure nodeid => "myscript/%n/%u";
319 root 1.72
320 root 1.120 Example: configure a node using a profile called seed, which is suitable
321 root 1.72 for a seed node as it binds on all local addresses on a fixed port (4040,
322     customary for aemp).
323    
324     # use the aemp commandline utility
325 root 1.122 # aemp profile seed binds '*:4040'
326 root 1.72
327     # then use it
328     configure profile => "seed";
329 root 1.34
330 root 1.72 # or simply use aemp from the shell again:
331     # aemp run profile seed
332 root 1.34
333 root 1.72 # or provide a nicer-to-remember nodeid
334     # aemp run profile seed nodeid "$(hostname)"
335 root 1.34
336 root 1.22 =item $SELF
337    
338     Contains the current port id while executing C<rcv> callbacks or C<psub>
339     blocks.
340 root 1.3
341 root 1.67 =item *SELF, SELF, %SELF, @SELF...
342 root 1.22
343     Due to some quirks in how perl exports variables, it is impossible to
344 root 1.67 just export C<$SELF>, all the symbols named C<SELF> are exported by this
345 root 1.22 module, but only C<$SELF> is currently used.
346 root 1.3
347 root 1.33 =item snd $port, type => @data
348 root 1.3
349 root 1.33 =item snd $port, @msg
350 root 1.3
351 root 1.67 Send the given message to the given port, which can identify either a
352     local or a remote port, and must be a port ID.
353 root 1.8
354 root 1.67 While the message can be almost anything, it is highly recommended to
355     use a string as first element (a port ID, or some word that indicates a
356     request type etc.) and to consist if only simple perl values (scalars,
357     arrays, hashes) - if you think you need to pass an object, think again.
358    
359     The message data logically becomes read-only after a call to this
360     function: modifying any argument (or values referenced by them) is
361     forbidden, as there can be considerable time between the call to C<snd>
362     and the time the message is actually being serialised - in fact, it might
363     never be copied as within the same process it is simply handed to the
364     receiving port.
365 root 1.3
366     The type of data you can transfer depends on the transport protocol: when
367     JSON is used, then only strings, numbers and arrays and hashes consisting
368     of those are allowed (no objects). When Storable is used, then anything
369     that Storable can serialise and deserialise is allowed, and for the local
370 root 1.67 node, anything can be passed. Best rely only on the common denominator of
371     these.
372 root 1.3
373 root 1.22 =item $local_port = port
374 root 1.2
375 root 1.50 Create a new local port object and returns its port ID. Initially it has
376     no callbacks set and will throw an error when it receives messages.
377 root 1.10
378 root 1.50 =item $local_port = port { my @msg = @_ }
379 root 1.15
380 root 1.50 Creates a new local port, and returns its ID. Semantically the same as
381     creating a port and calling C<rcv $port, $callback> on it.
382 root 1.15
383 root 1.50 The block will be called for every message received on the port, with the
384     global variable C<$SELF> set to the port ID. Runtime errors will cause the
385     port to be C<kil>ed. The message will be passed as-is, no extra argument
386     (i.e. no port ID) will be passed to the callback.
387 root 1.15
388 root 1.50 If you want to stop/destroy the port, simply C<kil> it:
389 root 1.15
390 root 1.50 my $port = port {
391     my @msg = @_;
392     ...
393     kil $SELF;
394 root 1.15 };
395 root 1.10
396     =cut
397    
398 root 1.33 sub rcv($@);
399    
400 root 1.132 my $KILME = sub {
401 root 1.133 (my $tag = substr $_[0], 0, 30) =~ s/([\x20-\x7e])/./g;
402 root 1.135 kil $SELF, unhandled_message => "no callback found for message '$tag'";
403 root 1.132 };
404 root 1.50
405 root 1.22 sub port(;&) {
406 root 1.123 my $id = $UNIQ . ++$ID;
407 root 1.22 my $port = "$NODE#$id";
408    
409 root 1.132 rcv $port, shift || $KILME;
410 root 1.10
411 root 1.22 $port
412 root 1.10 }
413    
414 root 1.50 =item rcv $local_port, $callback->(@msg)
415 root 1.31
416 root 1.50 Replaces the default callback on the specified port. There is no way to
417     remove the default callback: use C<sub { }> to disable it, or better
418     C<kil> the port when it is no longer needed.
419 root 1.3
420 root 1.33 The global C<$SELF> (exported by this module) contains C<$port> while
421 root 1.50 executing the callback. Runtime errors during callback execution will
422     result in the port being C<kil>ed.
423 root 1.22
424 root 1.133 The default callback receives all messages not matched by a more specific
425 root 1.50 C<tag> match.
426 root 1.22
427 root 1.50 =item rcv $local_port, tag => $callback->(@msg_without_tag), ...
428 root 1.3
429 root 1.54 Register (or replace) callbacks to be called on messages starting with the
430     given tag on the given port (and return the port), or unregister it (when
431     C<$callback> is C<$undef> or missing). There can only be one callback
432     registered for each tag.
433 root 1.3
434 root 1.50 The original message will be passed to the callback, after the first
435     element (the tag) has been removed. The callback will use the same
436     environment as the default callback (see above).
437 root 1.3
438 root 1.36 Example: create a port and bind receivers on it in one go.
439    
440     my $port = rcv port,
441 root 1.50 msg1 => sub { ... },
442     msg2 => sub { ... },
443 root 1.36 ;
444    
445     Example: create a port, bind receivers and send it in a message elsewhere
446     in one go:
447    
448     snd $otherport, reply =>
449     rcv port,
450 root 1.50 msg1 => sub { ... },
451 root 1.36 ...
452     ;
453    
454 root 1.54 Example: temporarily register a rcv callback for a tag matching some port
455 root 1.102 (e.g. for an rpc reply) and unregister it after a message was received.
456 root 1.54
457     rcv $port, $otherport => sub {
458     my @reply = @_;
459    
460     rcv $SELF, $otherport;
461     };
462    
463 root 1.3 =cut
464    
465     sub rcv($@) {
466 root 1.33 my $port = shift;
467 root 1.75 my ($nodeid, $portid) = split /#/, $port, 2;
468 root 1.3
469 root 1.75 $NODE{$nodeid} == $NODE{""}
470 root 1.33 or Carp::croak "$port: rcv can only be called on local ports, caught";
471 root 1.22
472 root 1.50 while (@_) {
473     if (ref $_[0]) {
474     if (my $self = $PORT_DATA{$portid}) {
475     "AnyEvent::MP::Port" eq ref $self
476     or Carp::croak "$port: rcv can only be called on message matching ports, caught";
477 root 1.33
478 root 1.103 $self->[0] = shift;
479 root 1.50 } else {
480     my $cb = shift;
481     $PORT{$portid} = sub {
482     local $SELF = $port;
483     eval { &$cb }; _self_die if $@;
484     };
485     }
486     } elsif (defined $_[0]) {
487     my $self = $PORT_DATA{$portid} ||= do {
488 root 1.103 my $self = bless [$PORT{$portid} || sub { }, { }, $port], "AnyEvent::MP::Port";
489 root 1.50
490     $PORT{$portid} = sub {
491     local $SELF = $port;
492    
493     if (my $cb = $self->[1]{$_[0]}) {
494     shift;
495     eval { &$cb }; _self_die if $@;
496     } else {
497     &{ $self->[0] };
498 root 1.33 }
499     };
500 root 1.50
501     $self
502 root 1.33 };
503    
504 root 1.50 "AnyEvent::MP::Port" eq ref $self
505     or Carp::croak "$port: rcv can only be called on message matching ports, caught";
506 root 1.22
507 root 1.50 my ($tag, $cb) = splice @_, 0, 2;
508 root 1.33
509 root 1.50 if (defined $cb) {
510     $self->[1]{$tag} = $cb;
511 root 1.33 } else {
512 root 1.50 delete $self->[1]{$tag};
513 root 1.33 }
514 root 1.22 }
515 root 1.3 }
516 root 1.31
517 root 1.33 $port
518 root 1.2 }
519    
520 root 1.101 =item peval $port, $coderef[, @args]
521    
522     Evaluates the given C<$codref> within the contetx of C<$port>, that is,
523     when the code throews an exception the C<$port> will be killed.
524    
525     Any remaining args will be passed to the callback. Any return values will
526     be returned to the caller.
527    
528     This is useful when you temporarily want to execute code in the context of
529     a port.
530    
531     Example: create a port and run some initialisation code in it's context.
532    
533     my $port = port { ... };
534    
535     peval $port, sub {
536     init
537     or die "unable to init";
538     };
539    
540     =cut
541    
542     sub peval($$) {
543     local $SELF = shift;
544     my $cb = shift;
545    
546     if (wantarray) {
547     my @res = eval { &$cb };
548     _self_die if $@;
549     @res
550     } else {
551     my $res = eval { &$cb };
552     _self_die if $@;
553     $res
554     }
555     }
556    
557 root 1.22 =item $closure = psub { BLOCK }
558 root 1.2
559 root 1.22 Remembers C<$SELF> and creates a closure out of the BLOCK. When the
560     closure is executed, sets up the environment in the same way as in C<rcv>
561     callbacks, i.e. runtime errors will cause the port to get C<kil>ed.
562    
563 root 1.101 The effect is basically as if it returned C<< sub { peval $SELF, sub {
564 root 1.114 BLOCK }, @_ } >>.
565 root 1.101
566 root 1.22 This is useful when you register callbacks from C<rcv> callbacks:
567    
568     rcv delayed_reply => sub {
569     my ($delay, @reply) = @_;
570     my $timer = AE::timer $delay, 0, psub {
571     snd @reply, $SELF;
572     };
573     };
574 root 1.3
575 root 1.8 =cut
576 root 1.3
577 root 1.22 sub psub(&) {
578     my $cb = shift;
579 root 1.3
580 root 1.22 my $port = $SELF
581     or Carp::croak "psub can only be called from within rcv or psub callbacks, not";
582 root 1.1
583 root 1.22 sub {
584     local $SELF = $port;
585 root 1.2
586 root 1.22 if (wantarray) {
587     my @res = eval { &$cb };
588     _self_die if $@;
589     @res
590     } else {
591     my $res = eval { &$cb };
592     _self_die if $@;
593     $res
594     }
595     }
596 root 1.2 }
597    
598 root 1.67 =item $guard = mon $port, $rcvport # kill $rcvport when $port dies
599 root 1.36
600 root 1.67 =item $guard = mon $port # kill $SELF when $port dies
601 root 1.32
602 root 1.139 =item $guard = mon $port, $cb->(@reason) # call $cb when $port dies
603    
604 root 1.67 =item $guard = mon $port, $rcvport, @msg # send a message when $port dies
605 root 1.32
606 root 1.42 Monitor the given port and do something when the port is killed or
607     messages to it were lost, and optionally return a guard that can be used
608     to stop monitoring again.
609    
610 root 1.139 The first two forms distinguish between "normal" and "abnormal" kil's:
611 root 1.32
612 root 1.139 In the first form (another port given), if the C<$port> is C<kil>'ed with
613     a non-empty reason, the other port (C<$rcvport>) will be kil'ed with the
614     same reason. That is, on "normal" kil's nothing happens, while under all
615     other conditions, the other port is killed with the same reason.
616 root 1.32
617 root 1.139 The second form (kill self) is the same as the first form, except that
618 root 1.36 C<$rvport> defaults to C<$SELF>.
619    
620 root 1.139 The remaining forms don't distinguish between "normal" and "abnormal" kil's
621     - it's up to the callback or receiver to check whether the C<@reason> is
622     empty and act accordingly.
623    
624     In the third form (callback), the callback is simply called with any
625     number of C<@reason> elements (empty @reason means that the port was deleted
626     "normally"). Note also that I<< the callback B<must> never die >>, so use
627     C<eval> if unsure.
628    
629     In the last form (message), a message of the form C<$rcvport, @msg,
630     @reason> will be C<snd>.
631 root 1.32
632 root 1.79 Monitoring-actions are one-shot: once messages are lost (and a monitoring
633 root 1.139 alert was raised), they are removed and will not trigger again, even if it
634     turns out that the port is still alive.
635 root 1.79
636 root 1.139 As a rule of thumb, monitoring requests should always monitor a remote
637     port locally (using a local C<$rcvport> or a callback). The reason is that
638     kill messages might get lost, just like any other message. Another less
639     obvious reason is that even monitoring requests can get lost (for example,
640     when the connection to the other node goes down permanently). When
641     monitoring a port locally these problems do not exist.
642 root 1.37
643 root 1.79 C<mon> effectively guarantees that, in the absence of hardware failures,
644     after starting the monitor, either all messages sent to the port will
645     arrive, or the monitoring action will be invoked after possible message
646     loss has been detected. No messages will be lost "in between" (after
647     the first lost message no further messages will be received by the
648     port). After the monitoring action was invoked, further messages might get
649     delivered again.
650    
651     Inter-host-connection timeouts and monitoring depend on the transport
652     used. The only transport currently implemented is TCP, and AnyEvent::MP
653     relies on TCP to detect node-downs (this can take 10-15 minutes on a
654 elmex 1.96 non-idle connection, and usually around two hours for idle connections).
655 root 1.79
656     This means that monitoring is good for program errors and cleaning up
657     stuff eventually, but they are no replacement for a timeout when you need
658     to ensure some maximum latency.
659    
660 root 1.32 Example: call a given callback when C<$port> is killed.
661    
662     mon $port, sub { warn "port died because of <@_>\n" };
663    
664     Example: kill ourselves when C<$port> is killed abnormally.
665    
666 root 1.36 mon $port;
667 root 1.32
668 root 1.36 Example: send us a restart message when another C<$port> is killed.
669 root 1.32
670     mon $port, $self => "restart";
671    
672     =cut
673    
674     sub mon {
675 root 1.75 my ($nodeid, $port) = split /#/, shift, 2;
676 root 1.32
677 root 1.75 my $node = $NODE{$nodeid} || add_node $nodeid;
678 root 1.32
679 root 1.41 my $cb = @_ ? shift : $SELF || Carp::croak 'mon: called with one argument only, but $SELF not set,';
680 root 1.32
681     unless (ref $cb) {
682     if (@_) {
683     # send a kill info message
684 root 1.41 my (@msg) = ($cb, @_);
685 root 1.32 $cb = sub { snd @msg, @_ };
686     } else {
687     # simply kill other port
688     my $port = $cb;
689     $cb = sub { kil $port, @_ if @_ };
690     }
691     }
692    
693     $node->monitor ($port, $cb);
694    
695     defined wantarray
696 root 1.124 and ($cb += 0, Guard::guard { $node->unmonitor ($port, $cb) })
697 root 1.32 }
698    
699     =item $guard = mon_guard $port, $ref, $ref...
700    
701     Monitors the given C<$port> and keeps the passed references. When the port
702     is killed, the references will be freed.
703    
704     Optionally returns a guard that will stop the monitoring.
705    
706     This function is useful when you create e.g. timers or other watchers and
707 root 1.67 want to free them when the port gets killed (note the use of C<psub>):
708 root 1.32
709     $port->rcv (start => sub {
710 root 1.67 my $timer; $timer = mon_guard $port, AE::timer 1, 1, psub {
711 root 1.32 undef $timer if 0.9 < rand;
712     });
713     });
714    
715     =cut
716    
717     sub mon_guard {
718     my ($port, @refs) = @_;
719    
720 root 1.36 #TODO: mon-less form?
721    
722 root 1.32 mon $port, sub { 0 && @refs }
723     }
724    
725 root 1.33 =item kil $port[, @reason]
726 root 1.32
727     Kill the specified port with the given C<@reason>.
728    
729 root 1.107 If no C<@reason> is specified, then the port is killed "normally" -
730     monitor callback will be invoked, but the kil will not cause linked ports
731     (C<mon $mport, $lport> form) to get killed.
732 root 1.32
733 root 1.107 If a C<@reason> is specified, then linked ports (C<mon $mport, $lport>
734     form) get killed with the same reason.
735 root 1.32
736     Runtime errors while evaluating C<rcv> callbacks or inside C<psub> blocks
737     will be reported as reason C<< die => $@ >>.
738    
739     Transport/communication errors are reported as C<< transport_error =>
740     $message >>.
741    
742 root 1.133 Common idioms:
743    
744     # silently remove yourself, do not kill linked ports
745     kil $SELF;
746    
747     # report a failure in some detail
748     kil $SELF, failure_mode_1 => "it failed with too high temperature";
749    
750     # do not waste much time with killing, just die when something goes wrong
751     open my $fh, "<file"
752     or die "file: $!";
753 root 1.38
754     =item $port = spawn $node, $initfunc[, @initdata]
755    
756     Creates a port on the node C<$node> (which can also be a port ID, in which
757     case it's the node where that port resides).
758    
759 root 1.67 The port ID of the newly created port is returned immediately, and it is
760     possible to immediately start sending messages or to monitor the port.
761 root 1.38
762 root 1.67 After the port has been created, the init function is called on the remote
763     node, in the same context as a C<rcv> callback. This function must be a
764     fully-qualified function name (e.g. C<MyApp::Chat::Server::init>). To
765     specify a function in the main program, use C<::name>.
766 root 1.38
767     If the function doesn't exist, then the node tries to C<require>
768     the package, then the package above the package and so on (e.g.
769     C<MyApp::Chat::Server>, C<MyApp::Chat>, C<MyApp>) until the function
770     exists or it runs out of package names.
771    
772     The init function is then called with the newly-created port as context
773 root 1.82 object (C<$SELF>) and the C<@initdata> values as arguments. It I<must>
774     call one of the C<rcv> functions to set callbacks on C<$SELF>, otherwise
775     the port might not get created.
776 root 1.38
777 root 1.67 A common idiom is to pass a local port, immediately monitor the spawned
778     port, and in the remote init function, immediately monitor the passed
779     local port. This two-way monitoring ensures that both ports get cleaned up
780     when there is a problem.
781 root 1.38
782 root 1.80 C<spawn> guarantees that the C<$initfunc> has no visible effects on the
783     caller before C<spawn> returns (by delaying invocation when spawn is
784     called for the local node).
785    
786 root 1.38 Example: spawn a chat server port on C<$othernode>.
787    
788     # this node, executed from within a port context:
789     my $server = spawn $othernode, "MyApp::Chat::Server::connect", $SELF;
790     mon $server;
791    
792     # init function on C<$othernode>
793     sub connect {
794     my ($srcport) = @_;
795    
796     mon $srcport;
797    
798     rcv $SELF, sub {
799     ...
800     };
801     }
802    
803     =cut
804    
805     sub _spawn {
806     my $port = shift;
807     my $init = shift;
808    
809 root 1.82 # rcv will create the actual port
810 root 1.38 local $SELF = "$NODE#$port";
811     eval {
812     &{ load_func $init }
813     };
814     _self_die if $@;
815     }
816    
817     sub spawn(@) {
818 root 1.75 my ($nodeid, undef) = split /#/, shift, 2;
819 root 1.38
820 root 1.123 my $id = $RUNIQ . ++$ID;
821 root 1.38
822 root 1.39 $_[0] =~ /::/
823     or Carp::croak "spawn init function must be a fully-qualified name, caught";
824    
825 root 1.75 snd_to_func $nodeid, "AnyEvent::MP::_spawn" => $id, @_;
826 root 1.38
827 root 1.75 "$nodeid#$id"
828 root 1.38 }
829    
830 root 1.121
831 root 1.59 =item after $timeout, @msg
832    
833     =item after $timeout, $callback
834    
835     Either sends the given message, or call the given callback, after the
836     specified number of seconds.
837    
838 root 1.67 This is simply a utility function that comes in handy at times - the
839     AnyEvent::MP author is not convinced of the wisdom of having it, though,
840     so it may go away in the future.
841 root 1.59
842     =cut
843    
844     sub after($@) {
845     my ($timeout, @action) = @_;
846    
847     my $t; $t = AE::timer $timeout, 0, sub {
848     undef $t;
849     ref $action[0]
850     ? $action[0]()
851     : snd @action;
852     };
853     }
854    
855 root 1.129 #=item $cb2 = timeout $seconds, $cb[, @args]
856    
857 root 1.87 =item cal $port, @msg, $callback[, $timeout]
858    
859     A simple form of RPC - sends a message to the given C<$port> with the
860     given contents (C<@msg>), but adds a reply port to the message.
861    
862     The reply port is created temporarily just for the purpose of receiving
863     the reply, and will be C<kil>ed when no longer needed.
864    
865     A reply message sent to the port is passed to the C<$callback> as-is.
866    
867     If an optional time-out (in seconds) is given and it is not C<undef>,
868     then the callback will be called without any arguments after the time-out
869     elapsed and the port is C<kil>ed.
870    
871 root 1.98 If no time-out is given (or it is C<undef>), then the local port will
872     monitor the remote port instead, so it eventually gets cleaned-up.
873 root 1.87
874     Currently this function returns the temporary port, but this "feature"
875     might go in future versions unless you can make a convincing case that
876     this is indeed useful for something.
877    
878     =cut
879    
880     sub cal(@) {
881     my $timeout = ref $_[-1] ? undef : pop;
882     my $cb = pop;
883    
884     my $port = port {
885     undef $timeout;
886     kil $SELF;
887     &$cb;
888     };
889    
890     if (defined $timeout) {
891     $timeout = AE::timer $timeout, 0, sub {
892     undef $timeout;
893     kil $port;
894     $cb->();
895     };
896     } else {
897     mon $_[0], sub {
898     kil $port;
899     $cb->();
900     };
901     }
902    
903     push @_, $port;
904     &snd;
905    
906     $port
907     }
908    
909 root 1.8 =back
910    
911 root 1.124 =head1 DISTRIBUTED DATABASE
912    
913     AnyEvent::MP comes with a simple distributed database. The database will
914 root 1.131 be mirrored asynchronously on all global nodes. Other nodes bind to one
915     of the global nodes for their needs. Every node has a "local database"
916     which contains all the values that are set locally. All local databases
917     are merged together to form the global database, which can be queried.
918    
919     The database structure is that of a two-level hash - the database hash
920     contains hashes which contain values, similarly to a perl hash of hashes,
921     i.e.:
922 root 1.124
923 root 1.131 $DATABASE{$family}{$subkey} = $value
924 root 1.124
925     The top level hash key is called "family", and the second-level hash key
926 root 1.126 is called "subkey" or simply "key".
927 root 1.124
928 root 1.125 The family must be alphanumeric, i.e. start with a letter and consist
929     of letters, digits, underscores and colons (C<[A-Za-z][A-Za-z0-9_:]*>,
930     pretty much like Perl module names.
931 root 1.124
932 root 1.125 As the family namespace is global, it is recommended to prefix family names
933 root 1.124 with the name of the application or module using it.
934    
935 root 1.126 The subkeys must be non-empty strings, with no further restrictions.
936 root 1.125
937 root 1.124 The values should preferably be strings, but other perl scalars should
938 root 1.131 work as well (such as C<undef>, arrays and hashes).
939 root 1.124
940 root 1.126 Every database entry is owned by one node - adding the same family/subkey
941 root 1.124 combination on multiple nodes will not cause discomfort for AnyEvent::MP,
942     but the result might be nondeterministic, i.e. the key might have
943     different values on different nodes.
944    
945 root 1.126 Different subkeys in the same family can be owned by different nodes
946     without problems, and in fact, this is the common method to create worker
947     pools. For example, a worker port for image scaling might do this:
948 root 1.124
949 root 1.126 db_set my_image_scalers => $port;
950 root 1.124
951 root 1.126 And clients looking for an image scaler will want to get the
952 root 1.129 C<my_image_scalers> keys from time to time:
953    
954     db_keys my_image_scalers => sub {
955     @ports = @{ $_[0] };
956     };
957    
958     Or better yet, they want to monitor the database family, so they always
959     have a reasonable up-to-date copy:
960    
961     db_mon my_image_scalers => sub {
962     @ports = keys %{ $_[0] };
963     };
964    
965     In general, you can set or delete single subkeys, but query and monitor
966     whole families only.
967 root 1.126
968 root 1.129 If you feel the need to monitor or query a single subkey, try giving it
969     it's own family.
970 root 1.126
971     =over
972    
973 root 1.137 =item $guard = db_set $family => $subkey [=> $value]
974 root 1.126
975     Sets (or replaces) a key to the database - if C<$value> is omitted,
976     C<undef> is used instead.
977    
978 root 1.137 When called in non-void context, C<db_set> returns a guard that
979     automatically calls C<db_del> when it is destroyed.
980    
981 root 1.130 =item db_del $family => $subkey...
982 root 1.124
983 root 1.130 Deletes one or more subkeys from the database family.
984 root 1.124
985 root 1.137 =item $guard = db_reg $family => $port => $value
986    
987     =item $guard = db_reg $family => $port
988    
989     =item $guard = db_reg $family
990    
991     Registers a port in the given family and optionally returns a guard to
992     remove it.
993    
994     This function basically does the same as:
995 root 1.124
996 root 1.137 db_set $family => $port => $value
997    
998     Except that the port is monitored and automatically removed from the
999     database family when it is kil'ed.
1000    
1001     If C<$value> is missing, C<undef> is used. If C<$port> is missing, then
1002     C<$SELF> is used.
1003    
1004     This function is most useful to register a port in some port group (which
1005     is just another name for a database family), and have it removed when the
1006     port is gone. This works best when the port is a local port.
1007    
1008     =cut
1009    
1010     sub db_reg($$;$) {
1011     my $family = shift;
1012     my $port = @_ ? shift : $SELF;
1013    
1014     my $clr = sub { db_del $family => $port };
1015     mon $port, $clr;
1016    
1017     db_set $family => $port => $_[0];
1018    
1019     defined wantarray
1020     and &Guard::guard ($clr)
1021     }
1022 root 1.124
1023 root 1.129 =item db_family $family => $cb->(\%familyhash)
1024    
1025     Queries the named database C<$family> and call the callback with the
1026     family represented as a hash. You can keep and freely modify the hash.
1027    
1028     =item db_keys $family => $cb->(\@keys)
1029    
1030     Same as C<db_family>, except it only queries the family I<subkeys> and passes
1031     them as array reference to the callback.
1032    
1033     =item db_values $family => $cb->(\@values)
1034    
1035     Same as C<db_family>, except it only queries the family I<values> and passes them
1036     as array reference to the callback.
1037    
1038 root 1.143 =item $guard = db_mon $family => $cb->(\%familyhash, \@added, \@changed, \@deleted)
1039 root 1.128
1040 root 1.130 Creates a monitor on the given database family. Each time a key is set
1041     or or is deleted the callback is called with a hash containing the
1042     database family and three lists of added, changed and deleted subkeys,
1043     respectively. If no keys have changed then the array reference might be
1044     C<undef> or even missing.
1045    
1046 root 1.132 If not called in void context, a guard object is returned that, when
1047     destroyed, stops the monitor.
1048    
1049 root 1.130 The family hash reference and the key arrays belong to AnyEvent::MP and
1050     B<must not be modified or stored> by the callback. When in doubt, make a
1051     copy.
1052    
1053     As soon as possible after the monitoring starts, the callback will be
1054     called with the intiial contents of the family, even if it is empty,
1055     i.e. there will always be a timely call to the callback with the current
1056     contents.
1057 root 1.128
1058     It is possible that the callback is called with a change event even though
1059     the subkey is already present and the value has not changed.
1060    
1061     The monitoring stops when the guard object is destroyed.
1062    
1063     Example: on every change to the family "mygroup", print out all keys.
1064    
1065     my $guard = db_mon mygroup => sub {
1066 root 1.130 my ($family, $a, $c, $d) = @_;
1067 root 1.128 print "mygroup members: ", (join " ", keys %$family), "\n";
1068     };
1069    
1070     Exmaple: wait until the family "My::Module::workers" is non-empty.
1071    
1072     my $guard; $guard = db_mon My::Module::workers => sub {
1073 root 1.130 my ($family, $a, $c, $d) = @_;
1074 root 1.128 return unless %$family;
1075     undef $guard;
1076     print "My::Module::workers now nonempty\n";
1077     };
1078    
1079     Example: print all changes to the family "AnyRvent::Fantasy::Module".
1080    
1081     my $guard = db_mon AnyRvent::Fantasy::Module => sub {
1082 root 1.130 my ($family, $a, $c, $d) = @_;
1083 root 1.128
1084 root 1.130 print "+$_=$family->{$_}\n" for @$a;
1085     print "*$_=$family->{$_}\n" for @$c;
1086     print "-$_=$family->{$_}\n" for @$d;
1087 root 1.128 };
1088    
1089 root 1.124 =cut
1090    
1091     =back
1092    
1093 root 1.26 =head1 AnyEvent::MP vs. Distributed Erlang
1094    
1095 root 1.35 AnyEvent::MP got lots of its ideas from distributed Erlang (Erlang node
1096     == aemp node, Erlang process == aemp port), so many of the documents and
1097     programming techniques employed by Erlang apply to AnyEvent::MP. Here is a
1098 root 1.27 sample:
1099    
1100 root 1.95 http://www.erlang.se/doc/programming_rules.shtml
1101     http://erlang.org/doc/getting_started/part_frame.html # chapters 3 and 4
1102     http://erlang.org/download/erlang-book-part1.pdf # chapters 5 and 6
1103     http://erlang.org/download/armstrong_thesis_2003.pdf # chapters 4 and 5
1104 root 1.27
1105     Despite the similarities, there are also some important differences:
1106 root 1.26
1107     =over 4
1108    
1109 root 1.65 =item * Node IDs are arbitrary strings in AEMP.
1110 root 1.26
1111 root 1.65 Erlang relies on special naming and DNS to work everywhere in the same
1112     way. AEMP relies on each node somehow knowing its own address(es) (e.g. by
1113 root 1.99 configuration or DNS), and possibly the addresses of some seed nodes, but
1114     will otherwise discover other nodes (and their IDs) itself.
1115 root 1.27
1116 root 1.54 =item * Erlang has a "remote ports are like local ports" philosophy, AEMP
1117 root 1.51 uses "local ports are like remote ports".
1118    
1119     The failure modes for local ports are quite different (runtime errors
1120     only) then for remote ports - when a local port dies, you I<know> it dies,
1121     when a connection to another node dies, you know nothing about the other
1122     port.
1123    
1124     Erlang pretends remote ports are as reliable as local ports, even when
1125     they are not.
1126    
1127     AEMP encourages a "treat remote ports differently" philosophy, with local
1128     ports being the special case/exception, where transport errors cannot
1129     occur.
1130    
1131 root 1.26 =item * Erlang uses processes and a mailbox, AEMP does not queue.
1132    
1133 root 1.119 Erlang uses processes that selectively receive messages out of order, and
1134     therefore needs a queue. AEMP is event based, queuing messages would serve
1135     no useful purpose. For the same reason the pattern-matching abilities
1136     of AnyEvent::MP are more limited, as there is little need to be able to
1137 elmex 1.77 filter messages without dequeuing them.
1138 root 1.26
1139 root 1.119 This is not a philosophical difference, but simply stems from AnyEvent::MP
1140     being event-based, while Erlang is process-based.
1141    
1142     You cna have a look at L<Coro::MP> for a more Erlang-like process model on
1143     top of AEMP and Coro threads.
1144 root 1.26
1145     =item * Erlang sends are synchronous, AEMP sends are asynchronous.
1146    
1147 root 1.119 Sending messages in Erlang is synchronous and blocks the process until
1148     a conenction has been established and the message sent (and so does not
1149     need a queue that can overflow). AEMP sends return immediately, connection
1150     establishment is handled in the background.
1151 root 1.26
1152 root 1.51 =item * Erlang suffers from silent message loss, AEMP does not.
1153 root 1.26
1154 root 1.99 Erlang implements few guarantees on messages delivery - messages can get
1155     lost without any of the processes realising it (i.e. you send messages a,
1156     b, and c, and the other side only receives messages a and c).
1157 root 1.26
1158 root 1.117 AEMP guarantees (modulo hardware errors) correct ordering, and the
1159     guarantee that after one message is lost, all following ones sent to the
1160     same port are lost as well, until monitoring raises an error, so there are
1161     no silent "holes" in the message sequence.
1162 root 1.26
1163 root 1.119 If you want your software to be very reliable, you have to cope with
1164     corrupted and even out-of-order messages in both Erlang and AEMP. AEMP
1165     simply tries to work better in common error cases, such as when a network
1166     link goes down.
1167    
1168 root 1.26 =item * Erlang can send messages to the wrong port, AEMP does not.
1169    
1170 root 1.119 In Erlang it is quite likely that a node that restarts reuses an Erlang
1171     process ID known to other nodes for a completely different process,
1172     causing messages destined for that process to end up in an unrelated
1173     process.
1174 root 1.26
1175 root 1.119 AEMP does not reuse port IDs, so old messages or old port IDs floating
1176 root 1.26 around in the network will not be sent to an unrelated port.
1177    
1178     =item * Erlang uses unprotected connections, AEMP uses secure
1179     authentication and can use TLS.
1180    
1181 root 1.66 AEMP can use a proven protocol - TLS - to protect connections and
1182 root 1.26 securely authenticate nodes.
1183    
1184 root 1.28 =item * The AEMP protocol is optimised for both text-based and binary
1185     communications.
1186    
1187 root 1.66 The AEMP protocol, unlike the Erlang protocol, supports both programming
1188 root 1.119 language independent text-only protocols (good for debugging), and binary,
1189 root 1.67 language-specific serialisers (e.g. Storable). By default, unless TLS is
1190     used, the protocol is actually completely text-based.
1191 root 1.28
1192     It has also been carefully designed to be implementable in other languages
1193 root 1.66 with a minimum of work while gracefully degrading functionality to make the
1194 root 1.28 protocol simple.
1195    
1196 root 1.35 =item * AEMP has more flexible monitoring options than Erlang.
1197    
1198 root 1.119 In Erlang, you can chose to receive I<all> exit signals as messages or
1199     I<none>, there is no in-between, so monitoring single Erlang processes is
1200     difficult to implement.
1201    
1202     Monitoring in AEMP is more flexible than in Erlang, as one can choose
1203     between automatic kill, exit message or callback on a per-port basis.
1204 root 1.35
1205 root 1.37 =item * Erlang tries to hide remote/local connections, AEMP does not.
1206 root 1.35
1207 root 1.67 Monitoring in Erlang is not an indicator of process death/crashes, in the
1208     same way as linking is (except linking is unreliable in Erlang).
1209 root 1.37
1210     In AEMP, you don't "look up" registered port names or send to named ports
1211     that might or might not be persistent. Instead, you normally spawn a port
1212 root 1.67 on the remote node. The init function monitors you, and you monitor the
1213     remote port. Since both monitors are local to the node, they are much more
1214     reliable (no need for C<spawn_link>).
1215 root 1.37
1216     This also saves round-trips and avoids sending messages to the wrong port
1217     (hard to do in Erlang).
1218 root 1.35
1219 root 1.26 =back
1220    
1221 root 1.46 =head1 RATIONALE
1222    
1223     =over 4
1224    
1225 root 1.67 =item Why strings for port and node IDs, why not objects?
1226 root 1.46
1227     We considered "objects", but found that the actual number of methods
1228 root 1.67 that can be called are quite low. Since port and node IDs travel over
1229 root 1.46 the network frequently, the serialising/deserialising would add lots of
1230 root 1.67 overhead, as well as having to keep a proxy object everywhere.
1231 root 1.46
1232     Strings can easily be printed, easily serialised etc. and need no special
1233     procedures to be "valid".
1234    
1235 root 1.110 And as a result, a port with just a default receiver consists of a single
1236 root 1.117 code reference stored in a global hash - it can't become much cheaper.
1237 root 1.47
1238 root 1.67 =item Why favour JSON, why not a real serialising format such as Storable?
1239 root 1.46
1240     In fact, any AnyEvent::MP node will happily accept Storable as framing
1241     format, but currently there is no way to make a node use Storable by
1242 root 1.67 default (although all nodes will accept it).
1243 root 1.46
1244     The default framing protocol is JSON because a) JSON::XS is many times
1245     faster for small messages and b) most importantly, after years of
1246     experience we found that object serialisation is causing more problems
1247 root 1.67 than it solves: Just like function calls, objects simply do not travel
1248 root 1.46 easily over the network, mostly because they will always be a copy, so you
1249     always have to re-think your design.
1250    
1251     Keeping your messages simple, concentrating on data structures rather than
1252     objects, will keep your messages clean, tidy and efficient.
1253    
1254     =back
1255    
1256 root 1.137 =head1 PORTING FROM AnyEvent::MP VERSION 1.X
1257    
1258 root 1.139 AEMP version 2 has a few major incompatible changes compared to version 1:
1259 root 1.137
1260     =over 4
1261    
1262     =item AnyEvent::MP::Global no longer has group management functions.
1263    
1264 root 1.140 At least not officially - the grp_* functions are still exported and might
1265     work, but they will be removed in some later release.
1266    
1267 root 1.137 AnyEvent::MP now comes with a distributed database that is more
1268 root 1.139 powerful. Its database families map closely to port groups, but the API
1269     has changed (the functions are also now exported by AnyEvent::MP). Here is
1270     a rough porting guide:
1271 root 1.137
1272     grp_reg $group, $port # old
1273     db_reg $group, $port # new
1274    
1275     $list = grp_get $group # old
1276     db_keys $group, sub { my $list = shift } # new
1277    
1278     grp_mon $group, $cb->(\@ports, $add, $del) # old
1279     db_mon $group, $cb->(\%ports, $add, $change, $del) # new
1280    
1281 root 1.139 C<grp_reg> is a no-brainer (just replace by C<db_reg>), but C<grp_get> is
1282     no longer instant, because the local node might not have a copy of the
1283     group. You can either modify your code to allow for a callback, or use
1284     C<db_mon> to keep an updated copy of the group:
1285 root 1.137
1286     my $local_group_copy;
1287 root 1.139 db_mon $group => sub { $local_group_copy = $_[0] };
1288 root 1.137
1289 root 1.139 # now "keys %$local_group_copy" always returns the most up-to-date
1290 root 1.137 # list of ports in the group.
1291    
1292 root 1.139 C<grp_mon> can be replaced by C<db_mon> with minor changes - C<db_mon>
1293     passes a hash as first argument, and an extra C<$chg> argument that can be
1294     ignored:
1295 root 1.137
1296     db_mon $group => sub {
1297     my ($ports, $add, $chg, $lde) = @_;
1298     $ports = [keys %$ports];
1299    
1300     # now $ports, $add and $del are the same as
1301     # were originally passed by grp_mon.
1302     ...
1303     };
1304    
1305     =item Nodes not longer connect to all other nodes.
1306    
1307     In AEMP 1.x, every node automatically loads the L<AnyEvent::MP::Global>
1308     module, which in turn would create connections to all other nodes in the
1309     network (helped by the seed nodes).
1310    
1311     In version 2.x, global nodes still connect to all other global nodes, but
1312     other nodes don't - now every node either is a global node itself, or
1313     attaches itself to another global node.
1314    
1315     If a node isn't a global node itself, then it attaches itself to one
1316     of its seed nodes. If that seed node isn't a global node yet, it will
1317     automatically be upgraded to a global node.
1318    
1319     So in many cases, nothing needs to be changed - one just has to make sure
1320     that all seed nodes are meshed together with the other seed nodes (as with
1321 root 1.139 AEMP 1.x), and other nodes specify them as seed nodes. This is most easily
1322     achieved by specifying the same set of seed nodes for all nodes in the
1323     network.
1324 root 1.137
1325     Not opening a connection to every other node is usually an advantage,
1326     except when you need the lower latency of an already established
1327     connection. To ensure a node establishes a connection to another node,
1328     you can monitor the node port (C<mon $node, ...>), which will attempt to
1329 root 1.138 create the connection (and notify you when the connection fails).
1330 root 1.137
1331 root 1.138 =item Listener-less nodes (nodes without binds) are gone.
1332 root 1.137
1333 root 1.138 And are not coming back, at least not in their old form. If no C<binds>
1334 root 1.139 are specified for a node, AnyEvent::MP assumes a default of C<*:*>.
1335 root 1.137
1336     There are vague plans to implement some form of routing domains, which
1337     might or might not bring back listener-less nodes, but don't count on it.
1338    
1339     The fact that most connections are now optional somewhat mitigates this,
1340     as a node can be effectively unreachable from the outside without any
1341     problems, as long as it isn't a global node and only reaches out to other
1342     nodes (as opposed to being contacted from other nodes).
1343    
1344 root 1.138 =item $AnyEvent::MP::Kernel::WARN has gone.
1345    
1346     AnyEvent has acquired a logging framework (L<AnyEvent::Log>), and AEMP now
1347     uses this, and so should your programs.
1348    
1349     Every module now documents what kinds of messages it generates, with
1350     AnyEvent::MP acting as a catch all.
1351    
1352     On the positive side, this means that instead of setting
1353 root 1.139 C<PERL_ANYEVENT_MP_WARNLEVEL>, you can get away by setting C<AE_VERBOSE> -
1354 root 1.138 much less to type.
1355    
1356 root 1.137 =back
1357    
1358 root 1.139 =head1 LOGGING
1359    
1360     AnyEvent::MP does not normally log anything by itself, but sinc eit is the
1361     root of the contetx hierarchy for AnyEvent::MP modules, it will receive
1362     all log messages by submodules.
1363    
1364 root 1.1 =head1 SEE ALSO
1365    
1366 root 1.68 L<AnyEvent::MP::Intro> - a gentle introduction.
1367    
1368     L<AnyEvent::MP::Kernel> - more, lower-level, stuff.
1369    
1370 root 1.113 L<AnyEvent::MP::Global> - network maintenance and port groups, to find
1371 root 1.68 your applications.
1372    
1373 root 1.105 L<AnyEvent::MP::DataConn> - establish data connections between nodes.
1374    
1375 root 1.81 L<AnyEvent::MP::LogCatcher> - simple service to display log messages from
1376     all nodes.
1377    
1378 root 1.1 L<AnyEvent>.
1379    
1380     =head1 AUTHOR
1381    
1382     Marc Lehmann <schmorp@schmorp.de>
1383     http://home.schmorp.de/
1384    
1385     =cut
1386    
1387     1
1388