Revision history for AnyEvent::MP TODO: testsuite TODO: intro: maybe simple job pool example? TODO: intro: mention watchdog... TODO: maybe disbale warnings by default? TODO: listener-scopes (10.0.0.1:4040@vpn) and connect-scopes ("vpn,public") TODO: document env-variable usage TODO: make node objects responsible for keepalive? faq: can't se anything faq: all is asynch faq: how to interface to non-perl nodes? TODO: check gproto, nproto, on connect TODO: limiting reconnecting speed when unreachable? somehow use same interval timers as for seeding and keepalive? TODO: multiple profiles? also some default profiles? TODO: export keepalive? TODO: $guard = con $cb->($up) TODO: aemp readline support TODO: gleeco re: AE::MP::DataConn - TODO: version both in MP.pm and MP/Config.pm because of cpan indexer 2.02 Sun Jul 29 04:22:53 CEST 2018 - hardcode version in MP.pm to help the CPAN indexer. 2.01 Tue Jul 24 09:02:34 CEST 2018 - try to work around a race condition that we can't identify (patch suggested by Sadrak). 2.0 Tue Jul 24 08:52:26 CEST 2018 - INCOMPATIBLE CHANGE: the node protocol used by this version is not compatible to versions <2 - you have to upgrade all nodes. - INCOMPATIBLE CHANGE: many APIs have changed, see the section "PORTING FROM VERSION 1" in the AnyEvent::MP manpage for details. - AnyEvent::MP::Global is now optional - only seed nodes autoload it and create a fully-meshed network with each other, normal nodes only have to connect to seed nodes, other connections are on-demand. - remove md6 auth algorithms (and use algorithms based on SHA3 instead). - implement CBOR framing and make it the preferred format. - new "norc" and "force" options for MP::configure to ignore or override the rc file. - a shitload of minor and major fixes all reported and debugged by Felix Ostmann. - move seed code to Kernel. - non-json receive framing was probably broken. - fixed small typo in MP::Transport. - fix (unused) provider-kv (version sometimes missing). - reduce the default export list of MP::Kernel. - reduced various random delays to zero, as they are hopefully no longer needed with the new global protocol. - implement a secure mode that can suppress (some) code execution requests. - do not use GMP for generating alphanumeric strings even when available, use a more tricky algorithm instead. - anonymous node names and remote port names have been shortened considerably. - $AnyEvent::MP::Kernel::SRCNODE contains the node ID of the origin node during message receives. - aemp shell now supports "package" selection and offers an $ECHO port you can send messages to. - rely on perl rand() instead of using /dev/urandom when available, as hopefully it is random enough. - aemp shell no longer leaks one port per command. - nodenames can contain %-escapes such as %n or %u. - aemp now uses aemp/%n/%u as nodename. - configure supports "eval", a small perl snippet to initialsie a node, most useful in "aemp run eval ...". - known_nodes is gone, it has little value, use all_nodes as replacement. - lots of small change and improvements. - node_is_known has been removed. - TRACE now shows the portid on SND. - aggressively reduce number of external modules, to reduce memory usage for nodes. - rework most of the documentation. - clean up MP::Kernel exports. - include AnyEvent::MP in AnyEvent::MP::Kernel's @CARP_NOT to hopefully improve error messages. 1.30 Thu Jun 30 11:30:39 CEST 2011 - connection errors at the right time would kill node connections in a bad way (patch by Malcolm Studd). 1.29 Fri May 7 20:13:39 CEST 2010 - codename "Sadrak". - fix error in callback at AnyEvent/MP/Global.pm line 339 (found by Sadrak). - listener-less nodes had trouble sending keepalive messages on write timeouts (found by Sadrak). - the monitor guard could cause a memleak due to autovivification if a mon was cleared after the port was gone (analysed by Sadrak). - do not overwrite the config file if we couldn't read it for some reason (lesson demonstrated by Sadrak). 1.28 Thu Apr 1 21:23:54 CEST 2010 - accepted connections didn't correctly set up the SRCNODE in some cases, leading to intra-node messages (such as monitoring) to fail silently (great testcase by Sadrak). 1.27 Sat Mar 20 21:11:16 CET 2010 - avoid exceptions in the transport code if the connection fails during TLS negotiation. - delay new address broadcasts in seednodes, to reduce the likelyhood of nodes connecting at the same time, leading to message loss. - improve general message passing efficiency by 8%, and special case json framing for a 50% speed increase. - add hints how to interface to aemp nodes from other programming languages using the aemp protocol in AnyEvent::MP::Transport (it can really be quite simple). - handle unsupported remote framings more gracefully. 1.26 Wed Dec 30 16:48:37 CET 2009 - INCOMPATIBLE CHANGE: the high-level node protocol changed, all nodes need to upgrade. - remote kil's did not work (reported by Eugene Grigoriev). - documented monitor_timeout, connect_interval, auth_offer, auth_accept, framing_format, autocork and nodelay options and make them configurable via bin/aemp. - some doc updates. - remote kil's were not synchronous to message sends which affected nobody, as remote kils were broken. - remote mon/unmonitor requests were not synchronous to message sends either sometimes, although it likely didnt matter. 1.24 Wed Dec 9 14:59:52 CET 2009 - codename "the foul egg". - increased "unmonitored local port died" message level to 2, so it is displayed by default now. - generate random seed at configure time, not module loading time, so fork&configure works as expected. - decreased "seed"-related message priority in Global from 0 (d'oh) to 9, as they are not signifcant. - new experimental module AnyEvent::MP::DataConn to establish additional data connections between nodes. - bin/aemp now loads AnyEvent::Watchdog::Util before trying to call restart. - bin/aemp setcert didn't properly handle the filename argument. - removed empty and unused timeout= parameter from protocol greeting. 1.23 Fri Nov 6 18:46:26 CET 2009 - listener-less nodes were misinformed by their masters about the location of new nodes, and therefore didn't connect properly in all cases. - messages send during node-up processing could sometimes get lost, which would hamper global's ability to mesh the network. - fixed AnyEvent::MP::Global::grp_reg to return a guard also in scalar context. - fixed AnyEvent::MP::Kernel::mon_nodes to return a guard also in scalar context. - try to improve error reporting when automatically loading a function - being unable to load a module will now stop the process and report the error. 1.22 Sat Oct 17 03:41:47 CEST 2009 - fix two rcv-bugs: after adding a tagged rcv, the default callback would not be used or changed anymore (reported by Felix Antonius Wilhelm Ostmann, with apologies for taking so long to releae the fix). - added Coro::MP introduction to AnyEvent::MP::Intro. - add peval function. 1.21 Mon Oct 5 21:58:36 CEST 2009 - always delay kil messages. - remote monitor requests were never cleaned up (found by Sadrak and analysed by elmex). - move $VERSION to AnyEvent::MP and AnyEvent::MP only. 1.2 Thu Oct 1 22:59:35 CEST 2009 - fix a rather big bug where message processing could be inhibited completely. - grp_mon could not return a guard due to a typo. - implement primitive aemp shell. - do not use bound address as listen length (reported by Felix Antonius Wilhelm Ostman). - no longer export an undefined "reg" function from AE::MP. - the mon_guard return value no longer keeps an additional reference to the passed refs. 1.1 Fri Sep 11 04:34:03 CEST 2009 - bumped the transport protocol to version 1 - sorry, but there were too many bugfixes/changes. - new function AnyEvent::MP::cal for simple rpc. - renamed AnyEvent::MP::Global functions to grp_reg|get|mon. - implemented monitoring for Global groups. - removed all userspace time-outs from the transport, instead rely on tcp retransmit timeouts and tcp keepalive. - spawn now delays spawns on the local node artificially, so it can return before invoking the init function. - break endless recursion between ping-pong ports on the local node after ~50 iterations. - support JSON-encoded aemp arguments. - added aemp restart. - support for starting init functions with parameters added. - data_format, auth_offer and auth_accept are now configurable, albeit not documented. - new service: AnyEvent::MP::LogCatcher. - rely on perl srand'ing better than we could. - try to backport to 5.8.2, unfortunately, recursive dependencies rely on Module::Build, which fails at 5.8.7, so YMMV. - use a vastly different reseeding strategy. - use seed nodes to notify nodes about new nodes. - in the case where a ndoe learns new addresses after it tried connecting, prefer the new addrseses over the old ones. 1.0 Wed Sep 2 20:40:43 CEST 2009 - randomise more connection times, but reduce delay to 0.2s (seeds) and 0.05s (normal connects). - upgrade to and require AnyEvent::Watchdog 1.0. 0.95 Mon Aug 31 22:03:55 CEST 2009 - tutorial finally covers all the basics, maybe not optimally, but it is covered. - rename initialise_node to configure and accepts key => value pairs for configuration. - give aemp a full manpage. - bin/aemp now expects comma-separated lists and supports multiple subcommands. - new aemp eval subcommand. - new aemp parent subcommand. - nodes get freed when no longer needed. - support "*" hostname to specify all local interface addresses (without localhost etc.). - support "*" port to specify a dynamically-assigned port (which is the default now). - fix per-transport memory leak. 0.9 Sat Aug 29 18:47:45 CEST 2009 - tutorial was updated to reflect the current API, but does not touch monitoring yet. - got rid of noderefs and slave nodes entirely, introduce free-text node identifiers and anonymous nodes. - document security issues with tls_anon method and introduce optional tls_md6_64_256 method. 0.8 Wed Aug 19 07:54:50 CEST 2009 - added AnyEvent::MP::Global service. - support "package::" names as service names. - many, many, many bugfixes and tweaks. 0.7 Sat Aug 15 01:18:51 CEST 2009 - sorry, another major API simplification. - greatly improved aemp configuration abilities. - introduced profile management. - updated exmaples in eg/. - added Kernel::snd_to_func. 0.6 Thu Aug 13 03:15:05 CEST 2009 - do away with .aemp-secret and use .perl-anyevent-mp as json config file. - introduce bin/aemp to configure nodes. - too many changes to describe. 0.4 Sun Aug 9 18:05:49 CEST 2009 - API should now be really stable :) - distinguish between resolved and unresolved noderefs. - certificates in .aemp-secret are now supported. - change port creation semantics. - replace become_xxx by initialise_node. - implement AE::MP::spawn. - implement transport timeouts, monitoring, reconnecting. - simplify and partially document the transport protocol. 0.1 Tue Aug 4 23:07:11 CEST 2009 - AnyEvent::MP API should be mostly stable by now. 0.02 Sun Aug 2 17:46:43 CEST 2009 - design has stabilised a bit, sitll unusable. 0.01 Sat Aug 1 11:43:31 CEST 2009 - dummy upload to reserve namespace on CPAN. 0.0 Thu Jul 30 06:10:15 CEST 2009 - original version, an AnyEvent::AIO clone.