Sophie

Sophie

distrib > Mageia > 1 > x86_64 > by-pkgid > 51d5a48452b28f7c53a4d8d40fe9733e > files > 14

lib64taktuk0-3.7-3.mga1.x86_64.rpm

<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>TakTuk</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:_www@b02.apple.com" />
</head>

<body style="background-color: white">

<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<li><a href="#options">OPTIONS</a></li>
	<li><a href="#deployment_options">DEPLOYMENT OPTIONS</a></li>
	<li><a href="#command_line_parsing_options">COMMAND LINE PARSING OPTIONS</a></li>
	<li><a href="#i_o_options">I/O OPTIONS</a></li>
	<li><a href="#performance_tuning_options">PERFORMANCE TUNING OPTIONS</a></li>
	<li><a href="#miscellaneous_options">MISCELLANEOUS OPTIONS</a></li>
	<li><a href="#internal_options">INTERNAL OPTIONS</a></li>
	<li><a href="#commands">COMMANDS</a></li>
	<li><a href="#exec_parameters">EXEC PARAMETERS</a></li>
	<li><a href="#environment">ENVIRONMENT</a></li>
	<li><a href="#hostnames_specification">HOSTNAMES SPECIFICATION</a></li>
	<li><a href="#set_and_targets_specification">SET AND TARGETS SPECIFICATION</a></li>
	<li><a href="#examples">EXAMPLES</a></li>
	<ul>

		<li><a href="#basic_usage">Basic usage</a></li>
		<li><a href="#developer_usage">Developer usage</a></li>
	</ul>

	<li><a href="#bugs">BUGS</a></li>
	<li><a href="#see_also">SEE ALSO</a></li>
	<li><a href="#author">AUTHOR</a></li>
	<li><a href="#copyright">COPYRIGHT</a></li>
</ul>
<!-- INDEX END -->

<hr />
<center><h1>USER MANUAL</h1></center><p>
</p>
<hr />
<h1><a name="name">NAME</a></h1>
<p><strong>TakTuk</strong> - a tool for large scale remote execution deployment</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<p><strong>taktuk</strong> [<strong>-behinsvzMP</strong>] [<strong>-c</strong> connector] [<strong>-d</strong> limit] [<strong>-f</strong> filename]
[<strong>-g</strong> duration] [<strong>-l</strong> login] [<strong>-m</strong> hostname [<strong>-[</strong> args ... <strong>-]</strong>]]
[<strong>-o</strong> stream=template] [<strong>-t</strong> timeout] [<strong>-u</strong> limit] [<strong>-w</strong> size]
[<strong>-B</strong> parameter=expression] [<strong>-C</strong> separators] [<strong>-E</strong> character]
[<strong>-F</strong> filename] [<strong>-G</strong> hostname [<strong>-[</strong> args ... <strong>-]</strong>]] [<strong>-L</strong> hostname]
[<strong>-I</strong> interpreter] [<strong>-O</strong> separators] [<strong>-R</strong> stream=filename] [<strong>-S</strong> files]
[<strong>-T</strong> command] [<strong>-V</strong> path ] [<strong>-W</strong> scheme] [commands ... ]</p>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p><strong>TakTuk</strong> is a tool for broadcasting the remote execution of one ore more
commands to a set of one or more distant machines. <strong>TakTuk</strong> combines local
parallelization (using concurrent deployment processes) and work distribution
(using an adaptive work-stealing algorithm) to achieve both
<strong>scalability</strong> and <strong>efficiency</strong>.</p>
<p><strong>TakTuk</strong> is especially suited to interactive tasks involving several distant 
machines and parallel remote executions. This is the case of clusters 
administration and parallel program debugging.</p>
<p><strong>TakTuk</strong> also provides a basic communication layer to programs it executes.
This communication layer uses the communication infrastructure set up by
<strong>TakTuk</strong> during its deployment. It is available both for the Perl and the C
langages and is described in <code>TakTuk(3)</code> and <code>taktukcomm(3)</code> respectively.</p>
<p>
</p>
<hr />
<h1><a name="options">OPTIONS</a></h1>
<p>Caution, in <strong>TakTuk</strong> options are parsed in the order given on the comand line.
This means that <strong>TakTuk</strong> is not POSIX compliant regarding options order.  This
is important as some of the options change the behavior of following ones (and
only these ones - e.g. <strong>-l</strong> applies to following <strong>-m</strong> options). The defaults
settings of <strong>TakTuk</strong> can be obtained by using the <a href="#item__2d_2dprint_2ddefaults"><code>--print-defaults</code></a> option.
The following options are given by category in alphabetical order.</p>
<p>
</p>
<hr />
<h1><a name="deployment_options">DEPLOYMENT OPTIONS</a></h1>
<dl>
<dt><strong><a name="item__2db"><strong>-b</strong></a></strong>

<dt><strong><a name="item__2d_2dbegin_2dgroup"><strong>--begin-group</strong></a></strong>

<dd>
<p>begins a new deployment group. A deployment group acts both as a context for
most options (options set within a group have no effect outside the group) and
as an isolation for deployment tasks scheduling (deployment tasks within a
group cannot be stolen by nodes deployed in other groups).</p>
</dd>
</li>
<dt><strong><a name="item__2dc_connector"><strong>-c</strong> connector</a></strong>

<dt><strong><a name="item__2d_2dconnector_connector"><strong>--connector</strong> connector</a></strong>

<dd>
<p>defines the connector command used to contact the following remote machines.</p>
</dd>
</li>
<dt><strong><a name="item__2dd_limit"><strong>-d</strong> limit</a></strong>

<dt><strong><a name="item__2d_2ddynamic_limit"><strong>--dynamic</strong> limit</a></strong>

<dd>
<p>turns dynamic mode (work stealing) on or off for the deployment of all the
following remote machines specifications. If <a href="#item_limit"><code>limit</code></a> is positive or null,
<strong>TakTuk</strong> uses the dynamic mode with its value as a maximal arity (0 =
no maximal arity).
A negative value for <a href="#item_limit"><code>limit</code></a> turns dynamic mode off.
<strong>Warning</strong>,
currently it is a bad idea to use several -d options on the same command line.</p>
</dd>
</li>
<dt><strong><a name="item__2de"><strong>-e</strong></a></strong>

<dt><strong><a name="item__2d_2dend_2dgroup"><strong>--end-group</strong></a></strong>

<dd>
<p>ends a deployment group.</p>
</dd>
</li>
<dt><strong><a name="item__2df_filename"><strong>-f</strong> filename</a></strong>

<dt><strong><a name="item__2d_2dmachines_2dfile_filename"><strong>--machines-file</strong> filename</a></strong>

<dd>
<p><a href="#item_filename"><code>filename</code></a> is the name of a file that contains remote machines names
(equivalent to several <code>-m</code> opions). In each line of this file, the first word
is considered as a machine name and the remaining as comments.</p>
</dd>
</li>
<dt><strong><a name="item__2dl_login"><strong>-l</strong> login</a></strong>

<dt><strong><a name="item__2d_2dlogin_login"><strong>--login</strong> login</a></strong>

<dd>
<p>sets the login name for the following hosts. This assumes that the connector
command accepts <code>-l</code> option (this is the case for ssh, the default).</p>
</dd>
</li>
<dt><strong><a name="item__2dm_hostname"><strong>-m</strong> hostname</a></strong>

<dt><strong><a name="item__2d_2dmachine_hostname"><strong>--machine</strong> hostname</a></strong>

<dd>
<p><code>hostname</code> is the name of a remote machine on which <strong>TakTuk</strong> has to be
deployed. <code>hostname</code> might contain list of values specified inside brackets
and exclusion lists (see <a href="#hostnames_specification">HOSTNAMES SPECIFICATION</a>). In such case, the
depolyment will be performed on all the matching hosts.
This option can be followed by any number of arguments enclosed
between <code>-[</code> and <code>-]</code> which will be transmitted as arguments of the remote
<strong>TakTuk</strong> that will execute on all the target hosts.</p>
</dd>
</li>
<dt><strong><a name="item__2ds"><strong>-s</strong></a></strong>

<dt><strong><a name="item__2d_2dself_2dpropagate"><strong>--self-propagate</strong></a></strong>

<dd>
<p>propagates the <strong>TakTuk</strong> executable through the following connectors and thus
eliminates the need for a <strong>TakTuk</strong> installation on remote machines.</p>
</dd>
</li>
<dt><strong><a name="item__2dz"><strong>-z</strong></a></strong>

<dt><strong><a name="item__2d_2ddont_2dself_2dpropagate"><strong>--dont-self-propagate</strong></a></strong>

<dd>
<p>cancels a preceding <strong>-s</strong> option.</p>
</dd>
</li>
<dt><strong><a name="item__2df_filename"><strong>-F</strong> filename</a></strong>

<dt><strong><a name="item__2d_2dargs_2dfile_filename"><strong>--args-file</strong> filename</a></strong>

<dd>
<p><a href="#item_filename"><code>filename</code></a> is the name of a file that contains additional options for <strong>TakTuk</strong>. The parsing of the file is done when encountering this option.</p>
</dd>
</li>
<dt><strong><a name="item__2dg_hostname"><strong>-G</strong> hostname</a></strong>

<dt><strong><a name="item__2d_2dgateway_hostname"><strong>--gateway</strong> hostname</a></strong>

<dd>
<p>same as <strong>-m</strong> hostname, except that the deployed <code>node(s)</code> are considered as
forward-only nodes: they will not be numbered and will not be targeted by
subsequent diffusion commands. As an exception, execution of <strong>TakTuk</strong> commands
on those nodes is still possible by giving them as deployment
arguments of the <strong>-G</strong> option.</p>
</dd>
</li>
<dt><strong><a name="item__2di_command"><strong>-I</strong> command</a></strong>

<dt><strong><a name="item__2d_2dperl_2dinterpreter_command"><strong>--perl-interpreter</strong> command</a></strong>

<dd>
<p><a href="#item_command"><code>command</code></a> is the name of the command to use as a Perl interpreter when auto
propagating or when using the <code>taktuk_perl</code> command.</p>
</dd>
</li>
<dt><strong><a name="item__2dl_hostname"><strong>-L</strong> hostname</a></strong>

<dt><strong><a name="item__2d_2dlocalhost_hostname"><strong>--localhost</strong> hostname</a></strong>

<dd>
<p>changes the name of localhost as viewed by <strong>TakTuk</strong>.</p>
</dd>
</li>
<dt><strong><a name="item__2ds_files"><strong>-S</strong> files</a></strong>

<dt><strong><a name="item__2d_2dsend_2dfiles_files"><strong>--send-files</strong> files</a></strong>

<dd>
<p>gives to <strong>TakTuk</strong> a list of files to be sent upon successfull remote
connection. Use with caution as it will slow down deployment (the files are
transfered before the end of the deployment). The intended use is NOT to
transfer application data files (rather use the <code>put</code> command to transfer such
files). This option should be used to transfer files that are necessary
to perform further connections from the remote node.  <code>files</code> is a comma
separated list of pairs <code>local_file:remote_file</code>. Regarding the transfer
itself, it behaves as the <code>put</code> command.</p>
</dd>
</li>
<dt><strong><a name="item__2dt_command"><strong>-T</strong> command</a></strong>

<dt><strong><a name="item__2d_2dtaktuk_2dcommand_command"><strong>--taktuk-command</strong> command</a></strong>

<dd>
<p><a href="#item_command"><code>command</code></a> is the name of the <strong>TakTuk</strong> command (default is $0, the name used to
launch <strong>TakTuk</strong>). This is the command used once connected to initiate the
remote <strong>TakTuk</strong> engine. Note that
the effect of this switch is void when using the <a href="#item__2ds"><code>-s</code></a> option.</p>
</dd>
</li>
<dt><strong><a name="item__2dv_list"><strong>-V</strong> list</a></strong>

<dt><strong><a name="item__2d_2dpath_2dvalue_list"><strong>--path-value</strong> list</a></strong>

<dd>
<p>set the PATH environment variable to the given list (as usual, a colon
separated directories list) on remote hosts to which <strong>TakTuk</strong> connects. This
is performed very early and is taken into account even for <a href="#item_taktuk"><code>taktuk</code></a> or <code>perl</code>
invocations at connection time.</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="command_line_parsing_options">COMMAND LINE PARSING OPTIONS</a></h1>
<dl>
<dt><strong><a name="item__2dc_separators_set"><strong>-C</strong> separators set</a></strong>

<dt><strong><a name="item__2d_2dcommand_2dseparator_separators_set"><strong>--command-separator</strong> separators set</a></strong>

<dd>
<p>replaces the default set of characters that separates successive <strong>TakTuk</strong>
commands.</p>
</dd>
</li>
<dt><strong><a name="item__2de_character"><strong>-E</strong> character</a></strong>

<dt><strong><a name="item__2d_2descape_2dcharacter_character"><strong>--escape-character</strong> character</a></strong>

<dd>
<p>defines an escape character that can be used to protect any following character
from <strong>TakTuk</strong> interpretation. This protection applies nearly to the whole
<strong>TakTuk</strong> command line.</p>
</dd>
</li>
<dt><strong><a name="item__2do_separators_set"><strong>-O</strong> separators set</a></strong>

<dt><strong><a name="item__2d_2doption_2dseparator_separators_set"><strong>--option-separator</strong> separators set</a></strong>

<dd>
<p>replaces the default set of characters that separates successive words when
reading options and commands from a file (using the <code>-F</code> switch).</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="i_o_options">I/O OPTIONS</a></h1>
<dl>
<dt><strong><a name="item__2do_stream_3dtemplate"><strong>-o</strong> stream=template</a></strong>

<dt><strong><a name="item__2d_2doutput_2dtemplate_stream_3dtemplate"><strong>--output-template</strong> stream=template</a></strong>

<dd>
<p>sets an output template specification for one of output streams designed by the
given name. When giving only a stream name (without template) this disables the
stream. Available streams include :</p>
</dd>
<dl>
<dt><strong><a name="item_connector"><code>connector</code> (errors from the connector command)</a></strong>

<dd>
<p>this stream contains in <a href="#item__line"><code>$line</code></a> informations outputed to stderr by a connector
command. Relevant fields include <a href="#item__host"><code>$host</code></a>, <code>$peer</code> and others listed below.</p>
</dd>
</li>
<dt><strong><a name="item_output"><code>error</code>, <code>output</code> (error and output of remotely executed commands)</a></strong>

<dd>
<p>these streams contain in <a href="#item__line"><code>$line</code></a> informations outputed by executed command to
stdout or stderr (respectively). Relevant fields include <a href="#item__host"><code>$host</code></a>,
<code>$command</code>, <code>$pid</code> and others listed below.</p>
</dd>
</li>
<dt><strong><a name="item_info"><code>info</code> (general informations such as help summary or version)</a></strong>

<dd>
<p>this stream contains in <a href="#item__line"><code>$line</code></a> informations outputed by taktuk in response to
commands such as <a href="#item_help"><code>help</code></a> or <a href="#item_version"><code>version</code></a>.</p>
</dd>
</li>
<dt><strong><a name="item_message"><code>message</code> (messages from running processes)</a></strong>

<dd>
<p>each output of this stream contains in <a href="#item__line"><code>$line</code></a> a message sent with target
``output'' (through <strong>TakTuk</strong> out-of-band communications facilities) by some
processus started using <strong>TakTuk</strong> commands. Relevant fields for this stream
include <code>$from</code> and <code>$to</code> and others listed below.</p>
</dd>
</li>
<dt><strong><a name="item_state"><code>state</code> (internal state of TakTuk instance)</a></strong>

<dd>
<p>this stream contains in <a href="#item__line"><code>$line</code></a> the state change code matching some <strong>TakTuk</strong>
events. Codes are the following:</p>
</dd>
<dd>
<pre>
  0 - TakTuk is ready
  1 - TakTuk is numbered
  2 - TakTuk terminated
  3 - connection failed
  4 - connection initialized
  5 - connection lost
  6 - command started
  7 - command failed
  8 - command terminated
  9 - numbering update failed
 10 - pipe input started
 11 - pipe input failed
 12 - pipe input terminated
 13 - file reception started
 14 - file reception failed
 15 - file reception terminated
 16 - file send failed
 17 - Invalid target
 18 - No target
 19 - Message delivered
 20 - Invalid destination
 21 - Destination not available anymore</pre>
</dd>
<dd>
<p>The function <code>event_msg($)</code> can be used in the template to translate this code
into a string that describes the event.  Relevant fields include <a href="#item__host"><code>$host</code></a>,
<a href="#item__position"><code>$position</code></a>, <a href="#item__rank"><code>$rank</code></a>, <a href="#item__count"><code>$count</code></a> and others listed below.</p>
</dd>
</li>
<dt><strong><a name="item_status"><code>status</code> (commands exit status)</a></strong>

<dd>
<p>this stream contains in <a href="#item__line"><code>$line</code></a> the return code of executed commands. Relevant
fields include <a href="#item__host"><code>$host</code></a>, <code>$pid</code> and others listed below.</p>
</dd>
</li>
<dt><strong><a name="item_taktuk"><code>taktuk</code> (internal messages, warnings and errors)</a></strong>

<dd>
<p>this stream contains in <a href="#item__line"><code>$line</code></a> error, warning and debug messages outputed by
<strong>TakTuk</strong> itself. Relevant fields include <code>$line_number</code>, <code>$package</code> and
others listed below.</p>
</dd>
</li>
</dl>
<p>a template is a Perl expression that should evaluate to the string
eventually displayed. Within a
specification, some variables might be used depending on the concerned stream:</p>
<dl>
<dt><strong><a name="item_command"><code>$command</code> (not for <a href="#item_taktuk"><code>taktuk</code></a> nor <a href="#item_info"><code>info</code></a>)</a></strong>

<dd>
<p>the command line execution that generated output.</p>
</dd>
</li>
<dt><strong><a name="item__count"><code>$count</code></a></strong>

<dd>
<p>the total number of <strong>TakTuk</strong> instances.</p>
</dd>
</li>
<dt><strong><a name="item__eol"><code>$eol</code></a></strong>

<dd>
<p>an empty string or a newline depending on what character ended command output.</p>
</dd>
</li>
<dt><strong><a name="item_filename"><code>$filename</code> (<a href="#item_taktuk"><code>taktuk</code></a> only)</a></strong>

<dd>
<p>the file in which a <strong>TakTuk</strong> diagnostic function has been called.</p>
</dd>
</li>
<dt><strong><a name="item_from"><code>$from</code> (<a href="#item_message"><code>message</code></a> only)</a></strong>

<dd>
<p>the logical number of the <strong>TakTuk</strong> instance from which the message has been
sent.</p>
</dd>
</li>
<dt><strong><a name="item__host"><code>$host</code></a></strong>

<dd>
<p>the name of the host executing the current <strong>TakTuk</strong> instance</p>
</dd>
</li>
<dt><strong><a name="item_init_date"><code>$init_date</code> (<a href="#item_connector"><code>connector</code></a> and <a href="#item_state"><code>state</code></a> only)</a></strong>

<dd>
<p>the time in seconds since Jan. 1, 1970 at which the remote <strong>TakTuk</strong> instance
completed its initialization (including ssh connection time and self
propagation if any).</p>
</dd>
</li>
<dt><strong><a name="item_level"><code>$level</code> (<a href="#item_taktuk"><code>taktuk</code></a> only)</a></strong>

<dd>
<p>the level of the diagnostic function called.</p>
</dd>
</li>
<dt><strong><a name="item_level_name"><code>$level_name</code> (<a href="#item_taktuk"><code>taktuk</code></a> only)</a></strong>

<dd>
<p>the name associated with the level of the diagnostic function called.</p>
</dd>
</li>
<dt><strong><a name="item__line"><code>$line</code></a></strong>

<dd>
<p>the raw data outputed by a command or passed to a diagnostic function, any
trailing newline removed (see $eol).</p>
</dd>
</li>
<dt><strong><a name="item_line_number"><code>$line_number</code> (<a href="#item_taktuk"><code>taktuk</code></a> only)</a></strong>

<dd>
<p>the line number at which a <strong>TakTuk</strong> diagnostic function has been called.</p>
</dd>
</li>
<dt><strong><a name="item_package"><code>$package</code> (<a href="#item_taktuk"><code>taktuk</code></a> only)</a></strong>

<dd>
<p>the package in which a <strong>TakTuk</strong> diagnostic function has been called.</p>
</dd>
</li>
<dt><strong><a name="item_peer"><code>$peer</code> (<a href="#item_connector"><code>connector</code></a> and <a href="#item_state"><code>state</code></a> only)</a></strong>

<dd>
<p>the remote machine for which a connector command outputed information.</p>
</dd>
</li>
<dt><strong><a name="item_peer_position"><code>$peer_position</code> (<a href="#item_connector"><code>connector</code></a> and <a href="#item_state"><code>state</code></a> only)</a></strong>

<dd>
<p>position on the command line of the remote host. This position is expressed as
a path in the hierarchy of hosts expressed on the command line (dot separated
position number at each level of imbrication).</p>
</dd>
</li>
<dt><strong><a name="item_pid"><code>$pid</code> (not for <a href="#item_taktuk"><code>taktuk</code></a> nor <a href="#item_info"><code>info</code></a>)</a></strong>

<dd>
<p>the pid of the command line executed (that produced output).</p>
</dd>
</li>
<dt><strong><a name="item__position"><code>$position</code></a></strong>

<dd>
<p>position on the command line of the current host. This position is expressed as
a path in the hierarchy of hosts expressed on the command line (dot separated
position number at each level of imbrication).</p>
</dd>
</li>
<dt><strong><a name="item__rank"><code>$rank</code></a></strong>

<dd>
<p>the logical number of <strong>TakTuk</strong> instance in which output is collected.</p>
</dd>
</li>
<dt><strong><a name="item_reply_date"><code>$reply_date</code> (<a href="#item_connector"><code>connector</code></a> and <a href="#item_state"><code>state</code></a> only)</a></strong>

<dd>
<p>the time in seconds since Jan. 1, 1970 at which the connector command replied
to the local <strong>TakTuk</strong> instance (note that this does not include the
initialization exange occuring before the remote <strong>TakTuk</strong> is considered as
functional).</p>
</dd>
</li>
<dt><strong><a name="item_start_date"><code>$start_date</code> (<a href="#item_output"><code>output</code></a>, <code>error</code>, <a href="#item_connector"><code>connector</code></a> and <a href="#item_status"><code>status</code></a>)</a></strong>

<dd>
<p>the time in seconds since Jan. 1, 1970 at which the command started (taken just
after the call to fork()).</p>
</dd>
</li>
<dt><strong><code>$init_date</code> (<a href="#item_connector"><code>connector</code></a> and <a href="#item_state"><code>state</code></a> only)</strong>

<dd>
<p>the time in seconds since Jan. 1, 1970 at which the remote <strong>TakTuk</strong> completed
its initilization.</p>
</dd>
</li>
<dt><strong><a name="item_stop_date"><code>$stop_date</code> (<a href="#item_connector"><code>connector</code></a> and <a href="#item_status"><code>status</code></a> only)</a></strong>

<dd>
<p>the time in seconds since Jan. 1, 1970 at which the command terminated (after
the closing of its stdout).</p>
</dd>
</li>
<dt><strong><a name="item_to"><code>$to</code> (<a href="#item_message"><code>message</code></a> only)</a></strong>

<dd>
<p>the logical number (or set of such numbers) of the <strong>TakTuk</strong> instance to which
the message has been sent.</p>
</dd>
</li>
<dt><strong><a name="item__type"><code>$type</code></a></strong>

<dd>
<p>the name of the output stream (connector, error, output, ...).</p>
</dd>
</li>
<dt><strong><a name="item__user_scalar"><code>$user_scalar</code></a></strong>

<dd>
<p>a scalar, global to the package, initially initialized to undef, that the user
is free to use for any purpose.</p>
</dd>
</li>
</dl>
<p>at the end of the day, the specification is evaluated for each line of the
concerned stream and the result printed on the root node.
Note that the newline has to be added explicitely as <code>\n</code> in the template if
needed.</p>
<p>WARNING: take care of your specification, if the Perl syntax is not correct
lots of awfull compilation error messages will be displayed and <strong>TakTuk</strong>
execution will fail.</p>
<dt><strong><a name="item__2dr_stream_3dfilename"><strong>-R</strong> stream=filename</a></strong>

<dt><strong><a name="item__2d_2doutput_2dredirect_stream_3dfilename"><strong>--output-redirect</strong> stream=filename</a></strong>

<dd>
<p>redirect a given stream output to a given file (located at the root node).
Notice that the given filename comply with Perl open syntax: for instance, one
might redirect to a file descriptor X using the name ``&gt;&amp;=X''. See <code>-o</code> option
for more details about streams output.</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="performance_tuning_options">PERFORMANCE TUNING OPTIONS</a></h1>
<dl>
<dt><strong><a name="item__2db_parameter_3dexpression"><strong>-B</strong> parameter=expression</a></strong>

<dt><strong><a name="item__2d_2dworksteal_2dbehavior_parameter_3dexpression"><strong>--worksteal-behavior</strong> parameter=expression</a></strong>

<dd>
<p>caution: this feature should be considered as experimental and could be removed
from future releases.
Tunes finely the behavior of the work-stealing algorithm by setting some its
parameters to Perl expressions. These Perl expressions can use the variables
<code>$last_given</code> and <code>$available</code> which are respectively equal to the number of
tasks given to a stealer last time it stole and to the total number of
remaining deployment tasks.
Available parameters are :</p>
</dd>
<dl>
<dt><strong><a name="item_initial">initial</a></strong>

<dd>
<p>the number of tasks given to a remote <strong>TakTuk</strong> instance the first time it send
a steal request to the local host.</p>
</dd>
</li>
<dt><strong><a name="item_growth">growth</a></strong>

<dd>
<p>the number of tasks given to a remote <strong>TakTuk</strong> instance each time it performs
a steal to the local host after the first time.</p>
</dd>
</li>
<dt><strong><a name="item_limit">limit</a></strong>

<dd>
<p>an upper bound to the value resulting from the evaluation of <a href="#item_growth"><code>growth</code></a>.</p>
</dd>
</li>
</dl>
<dt><strong><a name="item__2dg_duration"><strong>-g</strong> duration</a></strong>

<dt><strong><a name="item__2d_2dtime_2dgranularity_duration"><strong>--time-granularity</strong> duration</a></strong>

<dd>
<p>sets to <code>duration</code> (in seconds) the maximal interval between timeouts checks
(usually checks are made more often: at each message received a timeouts check
is made).</p>
</dd>
</li>
<dt><strong><a name="item__2dn"><strong>-n</strong></a></strong>

<dt><strong><a name="item__2d_2dno_2dnumbering"><strong>--no-numbering</strong></a></strong>

<dd>
<p>disables <strong>TakTuk</strong> logical numbering and the variables <a href="#item_taktuk_count"><code>TAKTUK_COUNT</code></a> and
<a href="#item_taktuk_rank"><code>TAKTUK_RANK</code></a> are not defined in executed commands. This has the advantage of
removing the global synchronization occuring at the end of the deployment and
making the deployment more efficient.</p>
</dd>
<dd>
<p>WARNING: use this option only before any remote node specification (<code>-m</code> or
<code>-f</code>) otherwise you might get serious synchronization issues in <strong>TakTuk</strong>.
Using <strong>TakTuk</strong> point-to-point communication along with this option will
fail and produce <strong>TakTuk</strong> warnings.</p>
</dd>
</li>
<dt><strong><a name="item__2dt_timeout"><strong>-t</strong> timeout</a></strong>

<dt><strong><a name="item__2d_2dtimeout_timeout"><strong>--timeout</strong> timeout</a></strong>

<dd>
<p>sets the timeout (in seconds) for following connectors (0 = no timeout). Notice
that this option override the timeout of the connector command (<code>ssh</code> for
instance).  When the delay expires, the connector command is simply killed.</p>
</dd>
</li>
<dt><strong><a name="item__2du_limit"><strong>-u</strong> limit</a></strong>

<dt><strong><a name="item__2d_2dcache_2dlimit_limit"><strong>--cache-limit</strong> limit</a></strong>

<dd>
<p>limits a number of memory bytes <strong>TakTuk</strong> might use as an internal write
buffer. For most users, setting such a limit is a bad idea : in some rare
situations it might result in a deadlock in <strong>TakTuk</strong> (caused by parallel
blocking writes between an application and <strong>TakTuk</strong> itself). Setting this
option to a negative value disables the limit (default).</p>
</dd>
<dd>
<p>Nevertheless, if you use <strong>TakTuk</strong> to transfer large files, because of I/O
bandwith disparities in various parts of a system, <strong>TakTuk</strong> memory use might
grow too large and performance can be severely degraded when the system starts
swapping. In such situations, limiting the size of the internal cache will keep
<strong>TakTuk</strong> in main memory and preserve the performance.</p>
</dd>
</li>
<dt><strong><a name="item__2dw_size"><strong>-w</strong> size</a></strong>

<dt><strong><a name="item__2d_2dwindow_size"><strong>--window</strong> size</a></strong>

<dd>
<p>sets initial window to the given size (= pipeline width).</p>
</dd>
</li>
<dt><strong><a name="item__2dw_scheme"><strong>-W</strong> scheme</a></strong>

<dt><strong><a name="item__2d_2dwindow_2dadaptation_scheme"><strong>--window-adaptation</strong> scheme</a></strong>

<dd>
<p>sets the windows adaptation scheme to number (default is 0, 0: no adaptation,
1: implementation in progress).</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="miscellaneous_options">MISCELLANEOUS OPTIONS</a></h1>
<dl>
<dt><strong><a name="item__2dm"><strong>-M</strong></a></strong>

<dt><strong><a name="item__2d_2dmy"><strong>--my</strong></a></strong>

<dd>
<p>makes the next option local (not inherited). This means that the next option is
set only for the local host and not propagated to children <strong>TakTuk</strong> instances.
Has no effect if the next option is already a local one.</p>
</dd>
</li>
<dt><strong><a name="item__2dh"><strong>-h</strong></a></strong>

<dt><strong><a name="item__2d_2dhelp"><strong>--help</strong></a></strong>

<dd>
<p>prints a short description of <strong>TakTuk</strong> on the screen.</p>
</dd>
</li>
<dt><strong><a name="item__2di"><strong>-i</strong></a></strong>

<dt><strong><a name="item__2d_2dinteractive"><strong>--interactive</strong></a></strong>

<dd>
<p>forces <strong>TakTuk</strong> interactive mode even after some batch commands given on the
command line.</p>
</dd>
</li>
<dt><strong><a name="item__2dv"><strong>-v</strong></a></strong>

<dt><strong><a name="item__2d_2dversion"><strong>--version</strong></a></strong>

<dd>
<p>prints the <strong>TakTuk</strong> version.</p>
</dd>
</li>
<dt><strong><a name="item__2dp"><strong>-P</strong></a></strong>

<dt><strong><a name="item__2d_2dprint_2ddefaults"><strong>--print-defaults</strong></a></strong>

<dd>
<p>prints the defaults settings used by <strong>TakTuk</strong> (environment variables taken
into account).</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="internal_options">INTERNAL OPTIONS</a></h1>
<p>These option are not useful for most users. They are used either internally by
<strong>TakTuk</strong> itself or for development purposes.</p>
<dl>
<dt><strong><a name="item__2dp_packagename"><strong>-p</strong> packagename</a></strong>

<dt><strong><a name="item__2d_2dprint_2dpackage_packagename"><strong>--print-package</strong> packagename</a></strong>

<dd>
<p>prints the content of package <code>packagename</code> extracted from the taktuk code in
execution.</p>
</dd>
</li>
<dt><strong><a name="item__2dr"><strong>-r</strong></a></strong>

<dt><strong><a name="item__2d_2dnot_2droot"><strong>--not-root</strong></a></strong>

<dd>
<p>current <strong>TakTuk</strong> instance is not the root node. This is an internal switch
used by spawned <strong>TakTuk</strong> instances. This is usually not useful for most users.</p>
</dd>
</li>
<dt><strong><a name="item__2dd_scope_3dlevel"><strong>-D</strong> scope=level</a></strong>

<dt><strong><a name="item__2d_2ddebug_scope_3dlevel"><strong>--debug</strong> scope=level</a></strong>

<dd>
<p>sets debugging level (1..4) for <code>scope</code>. The <code>scope</code> might be a <strong>TakTuk</strong> package name or <code>default</code> and the lowest the level the more verbose the output.</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="commands">COMMANDS</a></h1>
<p>After the options parsing, <strong>TakTuk</strong> expects some commands either on the
remaining of the command line (batch mode) or on the standard input
(interactive mode). These commands are actions to be performed by <strong>TakTuk</strong>
using the logical network infrastructure set up during the deployment. By
default, commands might be separated by ; or newlines. For all the commands,
any non ambiguous prefix can be used instead of their full name.
In interactive mode, <strong>TakTuk</strong> has support for <code>readline</code> (history, command
line editing) if installed on your system.</p>
<p>When <strong>TakTuk</strong> commands accept arguments, they should be enclosed into matching
delimiters (indicated by * below). In other words, * might be replaced either
by any non alphanumeric character or by a pair of matching braces, brackets or
parenthesis.
These delimiters must be separated from their content (using the options
separator). If the argument contains a closing delimiter preceded by a
separator, then it is probably a good idea to escape it (see <strong>-E</strong> option) or
to protect the whole arguments string if given on the command line.</p>
<p>Taktuk understands the following commands:</p>
<dl>
<dt><strong><a name="item__5b_set_specification__5d_command"><strong>[ set specification ]</strong> command</a></strong>

<dd>
<p>Sends the execution of command to all the peers belonging to the given set. For
more details about the set specification, see section <a href="#set_specification">SET SPECIFICATION</a>.</p>
</dd>
</li>
<dt><strong><a name="item_broadcast_command"><strong>broadcast</strong> command</a></strong>

<dd>
<p>Broadcasts the execution of command on all the remote peers (not including the
node initiating the broadcast).</p>
</dd>
</li>
<dt><strong><a name="item_downcast_command"><strong>downcast</strong> command</a></strong>

<dd>
<p>Spreads the execution of command on all the children of the node initiating
the downcast (not including itself).</p>
</dd>
</li>
<dt><strong><a name="item_exec_parameters__2a_command_line__2a"><strong>exec</strong> parameters * command line *</a></strong>

<dd>
<p>Executes the <code>command line</code> on the local machine.  Inputs/outputs of the
execution are multiplexed and fowarded to the <strong>TakTuk</strong> root.
This command accepts optional parameters that enable the attachment of
callbacks triggered by timeouts to the execution of the command. See section
<a href="#exec_parameters">EXEC PARAMETERS</a> for more details.</p>
</dd>
</li>
<dt><strong><a name="item_get__2a_src__2a__2a_dest__2a"><strong>get</strong> * src * * dest *</a></strong>

<dd>
<p>Copies (a) remote source(s) (present on the remote node(s)) to a 
destination on the node executing this command.
The type of source and destination is quite similar to those accepted by the
<code>cp -r</code> command (that is file or directories). This command also performs some
kind of magic with its parameters: shell environment variables present in the
source or destination names are replaced by their respective value on the
remote and local nodes.
In addition, the variables <a href="#item__host"><code>$host</code></a>, <a href="#item__rank"><code>$rank</code></a> and <a href="#item__position"><code>$position</code></a> of the remote
node (which are the same as in <strong>-o</strong> option) can also be used in both names.</p>
</dd>
</li>
<dt><strong><a name="item_help"><strong>help</strong></a></strong>

<dd>
<p>Prints a very concise <strong>TakTuk</strong> help.</p>
</dd>
</li>
<dt><strong><a name="item_input__5b_target_target__5d__2a_data__2a"><strong>input</strong> <strong>[ target</strong> target <strong>]</strong> * data *</a></strong>

<dt><strong><a name="item_input__5b_target_target__5d_data__2a_data__2a"><strong>input</strong> <strong>[ target</strong> target <strong>]</strong> <strong>data</strong> * data *</a></strong>

<dd>
<p>Sends the given data as input to commands in execution on the
local machine as specified by the given target. If no target is given, the data
is sent to all commands.</p>
</dd>
</li>
<dt><strong><a name="item_input__5b_target_target__5d_close"><strong>input</strong> <strong>[ target</strong> target <strong>]</strong> <strong>close</strong></a></strong>

<dd>
<p>Closes the inputs descriptor of executing commands on the local machine as
specified by the given target. If no target is given, the inputs of all
commands are closed.</p>
</dd>
</li>
<dt><strong><a name="item_input__5b_target_target__5d_file__2a_filename__2a"><strong>input</strong> <strong>[ target</strong> target <strong>]</strong> <strong>file</strong> * filename *</a></strong>

<dd>
<p>Sends the content of a file (which must be local to the node executing the
input file) as input to commands in execution on the local machine as
specified by the given target. If no target is given, the data
is sent to all commands.</p>
</dd>
<dd>
<p>WARNING: this command is not atomic. If you manage somehow to initiate a
input file command from two different <strong>TakTuk</strong> instances, data will probably
be interleaved. In this case you should synchronize the two instances. This is
not required when spreading files only from the root node.</p>
</dd>
</li>
<dt><strong><a name="item_input__5b_target_target__5d_line__2a_data__2a"><strong>input</strong> <strong>[ target</strong> target <strong>]</strong> <strong>line</strong> * data *</a></strong>

<dd>
<p>Sends the given data with an additional newline as input to commands
in execution on the local machine as
specified by the given target. If no target is given, the data
is sent to all commands.</p>
</dd>
</li>
<dt><strong><a name="item_input__5b_target_target__5d_pipe__2a_filename__2a"><strong>input</strong> <strong>[ target</strong> target <strong>]</strong> <strong>pipe</strong> * filename *</a></strong>

<dd>
<p>Treat the parameter as a file (which must be local to the node executing
the input pipe) which behavior is the same as a pipe: data
can arrive continuously. <strong>TakTuk</strong> add it as one of its input channels and send
data as input to commands when available. If given, the target specifies to
which command the data are to be sent, otherwise it is sent to all commands.</p>
</dd>
</li>
<dt><strong><a name="item_kill__5b_target_target__5d__3csignal_3e"><strong>kill</strong> <strong>[ target</strong> target <strong>]</strong> &lt;signal&gt;</a></strong>

<dd>
<p>Sends the given signal to local commands processes groups. If no signal is
given, sends a TERM signal (signal 15).  If given, the target specifies to
which command the signal is to be sent, otherwise it is sent to all commands.</p>
</dd>
</li>
<dt><strong><a name="item_message__5b_target_target__5d__2a_data__2a"><strong>message</strong> <strong>[ target</strong> target <strong>]</strong> * data *</a></strong>

<dt><strong><a name="item_message__5b_target_target__5d_data__2a_data__2a"><strong>message</strong> <strong>[ target</strong> target <strong>]</strong> <strong>data</strong> * data *</a></strong>

<dd>
<p>Sends the given data as a message to commands in execution on the local machine
as specified by the given target (see <code>TakTuk(3)</code> and <code>taktukcomm(3)</code> for
more details about messages). If no target is given, the data is sent to the
first command peforming a receive and not already targetted by another message.</p>
</dd>
</li>
<dt><strong><a name="item_message__5b_target_target__5d_file__2a_filename__2"><strong>message</strong> <strong>[ target</strong> target <strong>]</strong> <strong>file</strong> * filename *</a></strong>

<dd>
<p>Sends the content of a file (which must be local to the node executing the
message file) as a message to commands in execution on the local machine as
specified by the given target (see <code>TakTuk(3)</code> and <code>taktukcomm(3)</code> for more
details about messages). If no target is given, the data is sent to the first
command peforming a receive and not already targetted by another message.</p>
</dd>
<dd>
<p>WARNING: this command is not atomic. If you manage somehow to initiate a
message file command from two different <strong>TakTuk</strong> instances, data will probably
be interleaved. In this case you should synchronize the two instances. This is
not required when spreading files only from the root node.</p>
</dd>
</li>
<dt><strong><a name="item_message__5b_target_target__5d_line__2a_data__2a"><strong>message</strong> <strong>[ target</strong> target <strong>]</strong> <strong>line</strong> * data *</a></strong>

<dd>
<p>Sends the given data with an additional newline as a message to commands in
execution on the local machine as specified by the given target (see
<code>TakTuk(3)</code> and <code>taktukcomm(3)</code> for more details about messages). If no
target is given, the data is sent to the first command peforming a receive and
not already targetted by another message.</p>
</dd>
</li>
<dt><strong><a name="item_message__5b_target_target__5d_pipe__2a_data__2a"><strong>message</strong> <strong>[ target</strong> target <strong>]</strong> <strong>pipe</strong> * data *</a></strong>

<dd>
<p>Treat the parameter as a filename (which must be local to the node executing
the input pipe) which behavior is the same as a pipe: data can arrive
continuously. <strong>TakTuk</strong> add it as one of its input channels and send data as a
message to commands when available (see <code>TakTuk(3)</code> and <code>taktukcomm(3)</code> for
more details about messages). If given, the target specifies to which command
the data are to be sent, otherwise it is sent to the first command peforming a
receive and not already targetted by another message.</p>
</dd>
</li>
<dt><strong><a name="item_network"><strong>network</strong></a></strong>

<dt><strong><a name="item_network_state"><strong>network state</strong></a></strong>

<dd>
<p>Prints the current <strong>TakTuk</strong> deployment tree. Numbers in parenthesis match the
peer rank in the logical <strong>TakTuk</strong> numbering and the peer ready state. If the
deployment is not complete, the printed tree will display <code>connecting ...</code>
leaves.</p>
</dd>
</li>
<dt><strong><a name="item_network_cancel"><strong>network cancel</strong></a></strong>

<dd>
<p>Cancels all ongoing connections. Consequently, this causes immediate starting
of the possible numbering of <strong>TakTuk</strong> instances and the execution of <strong>TakTuk</strong>
commands.</p>
</dd>
</li>
<dt><strong><a name="item_network_renumber"><strong>network renumber</strong></a></strong>

<dd>
<p>Completely recomputes the logical numbering of <strong>TakTuk</strong> instances. This is
especially useful when adding new nodes to the deployed network after initial
numbering.</p>
</dd>
</li>
<dt><strong><a name="item_network_update"><strong>network update</strong></a></strong>

<dd>
<p>Updates the logical numbering of <strong>TakTuk</strong> instances without changing already
existing numbers. Does not always succeed as <strong>TakTuk</strong> uses a depth first
scheme for numbering. Sends an event 9 in the stream 'state' for each node of
the tree that cannot be updated while keeping <strong>TakTuk</strong> numbering scheme.
This is especially useful when adding new nodes to the deployed network after
initial numbering.</p>
</dd>
</li>
<dt><strong><a name="item_option_name__2a_value__2a"><strong>option</strong> name * value *</a></strong>

<dt><strong><a name="item_option__2a_line__2a"><strong>option</strong> * line *</a></strong>

<dd>
<p>Either changes a single option which name is given (first form) or parses an
additional options line (second form) on the node(s) executing this command.
See <strong>TakTuk</strong> options for more details, name can be either short or long in the
first form.</p>
</dd>
<dd>
<p>WARNING: new nodes added to <strong>TakTuk</strong> network using this command are not
numbered. Further use of network renumbering or update is necessary to get
<strong>TakTuk</strong> logical numbering.</p>
</dd>
</li>
<dt><strong><a name="item_put__2a_src__2a__2a_dest__2a"><strong>put</strong> * src * * dest *</a></strong>

<dd>
<p>Copies a local source (present on the node executing this command) to a
destination on all the remote nodes given as prefix of the command.
The type of source and destination is quite similar to those accepted by the
<code>cp -r</code> command (that is file or directories). This command also performs some
kind of magic with its parameters: shell environment variables present in the
source or destination names are replaced by their respective value on the
local and remote nodes.
In addition, the variables <a href="#item__host"><code>$host</code></a>, <a href="#item__rank"><code>$rank</code></a> and <a href="#item__position"><code>$position</code></a> of the local
node (which are the same as in <strong>-o</strong> option) can also be used in both names.</p>
</dd>
</li>
<dt><strong><a name="item_synchronize_command"><strong>synchronize</strong> command</a></strong>

<dd>
<p>Forces the given command to wait for the completion of deployment, nodes
numbering and previous commands before executing. This is usefull for commands
like <code>broadcast</code> which does not wait for nodes numbering.</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_perl__2a_arguments__2a"><strong>taktuk_perl</strong> * arguments *</a></strong>

<dd>
<p>Forks a perl interpreter on the local node just as if the command <code>exec perl
arguments</code> has been used. The difference is that this interpreter is
previously fetched with the <a href="#item_taktuk"><code>taktuk</code></a> package that contains point-to-point
communication routines (<code>TakTuk::send</code> and <code>TakTuk::recv</code>, see
<code>taktukcomm(3)</code>).
WARNING: due to the limitations of the parser that analyses the arguments of
this command, you have to give arguments (even if empty) and to use '--' if you
give any option to the perl interpreter (and even if you give it only options).</p>
</dd>
</li>
<dt><strong><a name="item_version"><strong>version</strong></a></strong>

<dd>
<p>prints <strong>TakTuk</strong> version.</p>
</dd>
</li>
<dt><strong><a name="item_quit"><strong>quit</strong></a></strong>

<dd>
<p>Quit the <strong>TakTuk</strong> engine and shut down the logical communication network
established during the deployment.</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="exec_parameters">EXEC PARAMETERS</a></h1>
<p>The <strong>TakTuk</strong> command <code>exec</code> accepts optional parameters. These parameters are
used to attach actions triggered by timeouts to commands execution. An <code>exec</code>
command accepts any number of parameters. These parameters are
interpreted from left to right using the following syntax:</p>
<dl>
<dt><strong><a name="item_timeout_value"><strong>timeout</strong> value</a></strong>

<dd>
<p>Creates a new timeout specification. At the end of the duration expressed by
the given value, it will trigger its attached callbacks. If it has no attached
callback, it will send a TERM signal to the command. If the command
execution terminates before the end of the timeout duration, the timeout is
canceled.</p>
</dd>
</li>
<dt><strong><a name="item_kill_value"><strong>kill</strong> value</a></strong>

<dd>
<p>Attach a callback to the last defined timeout. This callback send a signal,
which number is the given value, to the timeouted command.</p>
</dd>
</li>
<dt><strong><a name="item_action_command"><strong>action</strong> command</a></strong>

<dd>
<p>Attach a callback to the last defined timeout. This callback executes the given
<strong>TakTuk</strong> command. If it executes some other command, it can use the
environment variable <code>TAKTUK_PID</code> that contains the pid of the timeouted
command. The given <strong>TakTuk</strong> command can be any valid <strong>TakTuk</strong> command
(without command separator).</p>
</dd>
</li>
</dl>
<p>Notice that each timeout can have any number of attached callbacks. They will
be processed in the order they are given as parameters.</p>
<p>
</p>
<hr />
<h1><a name="environment">ENVIRONMENT</a></h1>
<dl>
<dt><strong><a name="item_variables_that_change_taktuk_default_behavior"><strong>Variables that change TakTuk default behavior</strong></a></strong>

<dd>
<p>Some of <strong>TakTuk</strong> defaults settings can be changed on some host using
environment variables. These settings are propagated as are other options.
They are overridden by propagated settings and command line options.</p>
</dd>
<dd>
<p>To change some default setting use the variable <strong>TAKTUK_NAME</strong> where <strong>NAME</strong> is
the name of the according long option in upper case and with dashes replaced by
underscores. For option taking complex value (such as <code>--debug</code>) just add an
underscore and the field you want to change in upper case at the end of the
name.
Using <code>taktuk --print-defaults</code> will give you examples of names used to change
default settings.
Note that defining in the environment a default setting not used by <strong>TakTuk</strong>
has no effect.</p>
</dd>
<dd>
<p>You can also change some <strong>TakTuk</strong> default settings locally without propagating
the change in the deployment tree. To do this, use the variable
<strong>TAKTUK_MY_NAME</strong> where name is defined as above. As before, these local
settings are overridden by propagated settings and command line options.</p>
</dd>
</li>
<dt><strong><a name="item_variables_set_by_taktuk_in_remotely_executed_comma"><strong>Variables set by TakTuk in remotely executed commands</strong></a></strong>

<dd>
<p>Taktuk sets the following environment variables for all the commands it
executes :</p>
</dd>
<dl>
<dt><strong><a name="item_taktuk_control_read_2c_taktuk_control_write">TAKTUK_CONTROL_READ, TAKTUK_CONTROL_WRITE</a></strong>

<dd>
<p>File descriptors, used internally by <strong>TakTuk</strong>.</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_count">TAKTUK_COUNT</a></strong>

<dd>
<p>The total number of successfully deployed <strong>TakTuk</strong> instances</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_hostname">TAKTUK_HOSTNAME</a></strong>

<dd>
<p>Local node hostname as given to <strong>TakTuk</strong> (on the command line)</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_pids">TAKTUK_PIDS</a></strong>

<dd>
<p>List of pids (separated by spaces) of commands executed by the local <strong>TakTuk</strong>
instance.</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_target">TAKTUK_TARGET</a></strong>

<dd>
<p>Target number of the currently executing process (see
<a href="#set_and_targets_specification">SET AND TARGETS SPECIFICATION</a> for more details).</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_position">TAKTUK_POSITION</a></strong>

<dd>
<p>Host position on the command line.</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_rank">TAKTUK_RANK</a></strong>

<dd>
<p>The logical rank of the local instance.</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_father">TAKTUK_FATHER</a></strong>

<dd>
<p>The logical rank of the taktuk instance that spawned this one.</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_child_min">TAKTUK_CHILD_MIN</a></strong>

<dd>
<p>The logical rank of the lowest numbered child of the current taktuk instance
(-1 if the local TakTuk instance has no children).</p>
</dd>
</li>
<dt><strong><a name="item_taktuk_child_max">TAKTUK_CHILD_MAX</a></strong>

<dd>
<p>The logical rank of the highest numbered child of the current taktuk instance
(-1 if the local TakTuk instance has no children).</p>
</dd>
</li>
</dl>
</dl>
<p>
</p>
<hr />
<h1><a name="hostnames_specification">HOSTNAMES SPECIFICATION</a></h1>
<p>Hostnames given to <strong>TakTuk</strong> might be simple machine name or complex hosts
lists specifications. In its general form, an hostname is made of an host set
and an optional exclusion set separated by a slash.  Each of those sets is a
comma separated list of host templates.  Each of these templates is made of
constant part (characters outside brackets) and optional range parts
(characters inside brackets). Each range part is a comma separated list of
intervals or single values. Each interval is made of two single values
separated by a dash. This is true for all hostnames given to <strong>TakTuk</strong> (both
with <strong>-m</strong> or <strong>-f</strong> options).</p>
<p>In other words, the following expressions are valid host specifications:
    node1
    node[19]
    node[1-3]
    node[1-3],otherhost/node2
    node[1-3,5]part[a-b]/node[3-5]parta,node1partb</p>
<p>they respectively expand to:
    node1
    node19
    node1 node2 node3
    node1 node3 otherhost
    node1parta node2parta node2partb node3partb node5partb</p>
<p>Notice that these list of values are not regular expressions (<code>node[19]</code> is
<code>node19</code> and not <code>node1, node2, ...., node9</code>). Intervals are implemented
using the perl magical auto increment feature, thus you can use alphanumeric
values as interval bounds (see perl documentation, operator ++ for limitations
of this auto increment).</p>
<p>
</p>
<hr />
<h1><a name="set_and_targets_specification">SET AND TARGETS SPECIFICATION</a></h1>
<p>The <strong>TakTuk</strong> command line and the <code>TakTuk::send</code> routine accept a set
specification as destination host(s). A set specification is made of
interval specifications separated by slashes. An interval specification is
either made of a single number, two numbers separated by a dash or a single
number followed by a plus symbol (this last case match the interval that goes
from the number to the highest numbered <strong>TakTuk</strong> destination). Of course the
two numbers specifying an interval must be given in increasing order.</p>
<p>The remote peers included in a set specification are all the peer which logical
number belong to at least one interval of the set. Here are some exemples of
set specifications :</p>
<pre>
    1
the peer numbered 1</pre>
<pre>
    2-7
the peers numbered 2,3,4,5,6 and 7</pre>
<pre>
    2-4/1/10
the peers numbered 1,2,3,4 an 10</pre>
<pre>
    3+
the peers from 3 to the highest numbered</pre>
<pre>
    5+/1
the peers from 5 to the highest numbered and the peer 1</pre>
<p>The target number is a number assigned by <strong>TakTuk</strong> to all processes it
executes (succesfully started or not using <code>exec</code> or <code>taktuk_perl</code> commands).
This number starts from 0 and goes to the total number of processes that have
been executed since TakTuk launch minus one.  Target processes of a
<code>TakTuk::send</code> or a <a href="#item_message"><code>message</code></a> command can be expressed with the same syntax
as in the case of sets.</p>
<p>Furthermore, <strong>TakTuk</strong> understands several special targets. The special target
<code>all</code> targets all processes: this means that the message or input data are
duplicated and sent to all executing processes, this is the default for
the <code>input</code> command. The special target <code>any</code> targets the first process that
issues a <code>TakTuk::recv</code> and that is not already the target of another message,
this is the default for the <a href="#item_message"><code>message</code></a> command. Finally, the special target
<a href="#item_output"><code>output</code></a> targets the output stream <a href="#item_message"><code>message</code></a> rather than a process.</p>
<p>
</p>
<hr />
<h1><a name="examples">EXAMPLES</a></h1>
<p>The following examples illustrate the basic use of <strong>TakTuk</strong> on a few machines and the use of developper options. Notice that <strong>TakTuk</strong> is designed to scale to much more peers than the number involved in these examples.</p>
<p>
</p>
<h2><a name="basic_usage">Basic usage</a></h2>
<dl>
<dt><strong><a name="item_simple_deployment"><strong>simple deployment</strong></a></strong>

<dd>
<p>the simplest way to use <strong>TakTuk</strong> is to make it selfpropagate with option
<a href="#item__2ds"><code>-s</code></a>. In this case, the basic remote execution of <code>hostname</code> on the host
<code>toto.nowhere.com</code> can be written :</p>
</dd>
<dd>
<pre>
    taktuk -s -m toto.nowhere.com broadcast exec [ hostname ]</pre>
</dd>
<dd>
<p>In this example, <a href="#item__2ds"><code>-s</code></a> asks <strong>TakTuk</strong> to propagate its own code on remote
hosts. It can be removed by installing the <a href="#item_taktuk"><code>taktuk</code></a> executable on
<code>toto.nowhere.com</code>. By the following we will assume that <strong>TakTuk</strong> is
installed on all the remote hosts.</p>
</dd>
<dd>
<p>The <code>-m toto.nowhere.com</code> describe the set of remote hosts to be contacted by
<strong>TakTuk</strong> and <code>broadcast exec [ hostname ]</code> is a command that will be executed
by the <strong>TakTuk</strong> interpreter.</p>
</dd>
<dd>
<p>This example can be written in many other ways. In interactive mode, the
same execution might become:</p>
</dd>
<dd>
<pre>
    taktuk -m toto.nowhere.com</pre>
</dd>
<dd>
<p>here <strong>TakTuk</strong> is blocked waiting for commands from stdin. Thus, we just have
to type:</p>
</dd>
<dd>
<pre>
    broadcast exec { hostname }
    Ctrl-D</pre>
</dd>
<dd>
<p>here you can notice that parameters to the <code>exec</code> <strong>TakTuk</strong> command (as all
commands parameters) can be enclosed in any reasonable pair of delimiters.
We might also write the list of hosts involved in the command in
a file <code>machine</code> that contains:</p>
</dd>
<dd>
<pre>
    toto.nowhere.com</pre>
</dd>
<dd>
<p>and the <strong>TakTuk</strong> command becomes:</p>
</dd>
<dd>
<pre>
    taktuk -f machine broadcast exec - hostname -</pre>
</dd>
<dd>
<p>We could also use another file <code>options</code> that contains:</p>
</dd>
<dd>
<pre>
    -f machine</pre>
</dd>
<dd>
<p>and use it as the options line given to <strong>TakTuk</strong>:</p>
</dd>
<dd>
<pre>
    taktuk -F options broadcast exec \( hostname \)</pre>
</dd>
<dd>
<p>Finally, everything could be stored in a last file <code>command_line</code> that
contains:</p>
</dd>
<dd>
<pre>
    -f machine broadcast exec = hostname =</pre>
</dd>
<dd>
<p>and the following command achieve the same result:</p>
</dd>
<dd>
<pre>
    taktuk -F command_line</pre>
</dd>
<dd>
<p>All of these variants have the same effect: they execute <code>hostname</code> on <code>toto.nowhere.com</code> and the output of the program is forwarded to the localhost. In this case:</p>
</dd>
<dd>
<pre>
    toto.nowhere.com: hostname: somepid: output &gt; toto.nowhere.com</pre>
</dd>
</li>
<dt><strong><a name="item_parameters_braces"><strong>parameters braces</strong></a></strong>

<dd>
<p>notice that braces for command parameters must be separated from their content.
Thus, they can contain other braces as long as no single closing brace is part
of the content:</p>
</dd>
<dd>
<pre>
    taktuk -m localhost broadcast exec [ 'if [ $RANDOM -gt 10000 ];then echo greater;else echo lower;fi' ]</pre>
</dd>
<dd>
<p>In this example, quotes are necessary to prevent the shell from interpreting
the <code>$</code> and <code>;</code> characters and to prevent the closing brace for <code>if</code> toe be
considered as closing the <code>exec</code> command.
In this case the variable will be interpolated
only on remote hosts. This same example can also be expressed using shortcuts
and intercative mode:</p>
</dd>
<dd>
<pre>
    taktuk -m localhost -E%</pre>
</dd>
<dd>
<p>then type:</p>
</dd>
<dd>
<pre>
    b e [ if [ $RANDOM -gt 10000 %];then echo greater;else echo lower;fi ]
    Ctrl-D</pre>
</dd>
<dd>
<p>Notice the closing bracket used in the test that should not be
interpreted as the closing bracket for <code>exec</code> arguments. In such case, a
simpler solution is probably to use another kind of braces</p>
</dd>
<dd>
<pre>
    taktuk -m localhost</pre>
</dd>
<dd>
<p>and then:
    b e { if [ $RANDOM -gt 10000 ];then echo greater;else echo lower;fi }
    Ctrl-D</p>
</dd>
<dd>
<p>Usually, if you want to be safe, you can quote all commands parameters.
Nevertheless, notice that parameters should not be quoted in interactive mode
as input lines are not interpreted by the shell.</p>
</dd>
</li>
<dt><strong><a name="item_exec_parameters"><strong>exec parameters</strong></a></strong>

<dd>
<p>commands executed by <strong>TakTuk</strong> can be timeouted using <code>exec</code> parameters.
For instance if you want to execute some command and send it a TERM signal
after two seconds, just type:</p>
</dd>
<dd>
<pre>
    taktuk -m localhost broadcast exec timeout 2 [ sleep 10 ]</pre>
</dd>
<dd>
<p>the callback executed when a timeout occurs can also be something else than a
TERM signal. This can be another signal (KILL for instance):</p>
</dd>
<dd>
<pre>
    taktuk -m localhost broadcast exec timeout 2 kill 9 [ sleep 10 ]</pre>
</dd>
<dd>
<p>or any valid <strong>TakTuk</strong> command:</p>
</dd>
<dd>
<pre>
    taktuk -m localhost broadcast exec timeout 2 action broadcast exec [ echo hello ] [ sleep 10 ]</pre>
</dd>
<dd>
<p>or even several timeouts and several callbacks:</p>
</dd>
<dd>
<pre>
    taktuk -m localhost b e t 2 a e [ echo hello ] k 30 t 10 k 9 [ sleep 5 ]</pre>
</dd>
<dd>
<p>in this last example, the command <code>sleep 5</code> is executed by <strong>TakTuk</strong>. After 2
seconds, the first timeout will be triggered, it will execute the command
<code>echo hello</code> and send a USR1 signal to the first command (<code>sleep 5</code>). The
second timeout is set to 10 seconds. Thus, it will never occur as the
<code>sleep 5</code> command will be terminated before its expiration.</p>
</dd>
</li>
<dt><strong><a name="item_topology"><strong>topology</strong></a></strong>

<dd>
<p>Usually, <strong>TakTuk</strong> deploys itself using a relatively flat tree because its
default window size is quite large (10 simultaneous ongoing connections).
Using a smaller window size will result in a deeper tree although it also
depends on the local load of the deployment nodes.  You can use the
<strong>TakTuk</strong> <a href="#item_network_state"><code>network state</code></a> command to print the tree constructed by <strong>TakTuk</strong>.</p>
</dd>
<dd>
<p>Notice that it is usually a bad idea to use a too large window as it results in
too much local load and bad distribution of work (something like 10 is often sufficient).</p>
</dd>
<dd>
<p>You can also force <strong>TakTuk</strong> to use more specific topologies. For instance, to
execute <code>echo $$</code> using a flat-tree as deployment topology, just disable
work-stealing in <strong>TakTuk</strong>:</p>
</dd>
<dd>
<pre>
    taktuk -d -1 -m host1 -m host2 -m host3 broadcast exec [ 'echo $$' ]</pre>
</dd>
<dd>
<p>and to use a chain-like topology, either encode the topology in arguments
structure:</p>
</dd>
<dd>
<pre>
    taktuk -m host1 -[ -m host2 -[ -m host3 -] -] broadcast exec [ 'echo $$' ]</pre>
</dd>
<dd>
<p>or limits the arity of the dynamic tree to 1:</p>
</dd>
<dd>
<pre>
    taktuk -d 1 -m host1 -m host2 -m host3 broadcast exec [ 'echo $$' ]</pre>
</dd>
<dd>
<p>Finally, the default will use a dynamicly constructed topology:</p>
</dd>
<dd>
<pre>
    taktuk -d 0 -m host1 -m host2 -m host3 broadcast exec [ 'echo $$' ]</pre>
</dd>
</li>
<dt><strong><a name="item_lightweight_grid_deployment"><strong>lightweight grid deployment</strong></a></strong>

<dd>
<p>On a lightweight grid, because of locality issues (ldap cache, network
topology, ...) it seems interesting to separate the deployment of each
subcluster. To do this, it is possible to enclose the nodes of each cluster
into a separate deployment group:</p>
</dd>
<dd>
<pre>
    taktuk -b -m node1.cluster1 -m node2.cluster1 -m node3.cluster1 -m node4.cluster1 -e -b -m node1.cluster2 -m node2.cluster2 -m node3.cluster2 -m node4.cluster2 -e broadcast exec [ hostname ]</pre>
</dd>
<dd>
<p>This command has the effect of deploying <strong>TakTuk</strong> on two clusters (cluster 1
and 2) made of four nodes (node 1 to 4), preventing deployed nodes from one
cluster to be used to deploy nodes from the other cluster.
Finally, once the deployment is complete, it executes the command <code>hostname</code> on all these nodes.</p>
</dd>
</li>
<dt><strong><a name="item_executing_a_distinct_command_on_each_host"><strong>executing a distinct command on each host</strong></a></strong>

<dd>
<p>each distinct host can be given its own command using arguments:</p>
</dd>
<dd>
<pre>
    ./taktuk -m host1 -[ exec [ hostname ] -] -m host2 -[ exec [ id ] -] -m host3 -[ exec [ 'echo $TAKTUK_RANK; ls' ] -] quit</pre>
</dd>
<dd>
<p>but this could also be given using set specification (in this case logical
number are used for hosts):</p>
</dd>
<dd>
<pre>
    ./taktuk -m host1 -m host3 -m host8 1 exec [ hostname ], 2 exec [ id ], 3 exec [ 'echo $TAKTUK_RANK; ls' ]</pre>
</dd>
<dd>
<p>or in interactive mode:</p>
</dd>
<dd>
<pre>
    ./taktuk -m host1 -m host3 -m host8
    1 exec [ hostname ]
    2 exec [ id ]
    3 exec [ echo $TAKTUK_RANK; ls ]
    Ctrl-D</pre>
</dd>
<dd>
<p>Nevertheless keep in mind that in general these logical numbers do not match
the position of hosts on the command line.</p>
</dd>
</li>
<dt><strong><a name="item_script_diffusion"><strong>script diffusion</strong></a></strong>

<dd>
<p>spreading and executing a perl script named <code>essai.pl</code> on three hosts, knowing
that <a href="#item_taktuk"><code>taktuk</code></a> and <code>essai.pl</code> are only present on the root node is
straightforward with <strong>TakTuk</strong>:</p>
</dd>
<dd>
<pre>
    taktuk -s -m host1 -m host2 -m host3
    broadcast exec [ perl -- - ]
    broadcast input file [ essai.pl ]
    broadcast input close
    Ctrl-D</pre>
</dd>
</li>
<dt><strong><a name="item_files_diffusion_and_collection"><strong>files diffusion and collection</strong></a></strong>

<dd>
<p>since version 3.4, files transfer is supported directly by TakTuk. Notice that
this transfer uses the <strong>TakTuk</strong> network (usually a tree composed of ssh
connections by default). This network is not efficient for the tranfer of large
files (both topologically and from a protocol point of view), so keep this in
mind when using this feature.</p>
</dd>
<dd>
<p>copying a file named <code>message.txt</code> to the <code>/tmp</code> directory of each remote
host is thus as easy as:</p>
</dd>
<dd>
<pre>
    taktuk -s -m host1 -m host2 -m host3
    broadcast put [ message.txt ] [ /tmp ]
    Ctrl-D</pre>
</dd>
<dd>
<p>but the older method still works (and does almost the same as the previous
command):</p>
</dd>
<dd>
<pre>
    taktuk -s -m host1 -m host2 -m host3
    broadcast exec [ cat - &gt;/tmp/message.txt ]
    broadcast input file [ message.txt ]
    broadcast input close
    Ctrl-D</pre>
</dd>
<dd>
<p>although it requires to be more careful about shell interpretation when typing
everything directly on the command line:</p>
</dd>
<dd>
<pre>
    taktuk -s -m host1 -m host2 -m host3  broadcast exec [ 'cat - &gt;/tmp/message.txt' ]\;broadcast input file [ message.txt ]</pre>
</dd>
<dd>
<p>notice in this latter command that the <code>input close</code> is not necessary as
<strong>TakTuk</strong> closes inputs of all spawned commands when quitting.</p>
</dd>
<dd>
<p>the <code>get</code> command also makes possible things that were previously very
difficult in <strong>TakTuk</strong>, files collecting. The following command gets the file
<code>/tmp/message.txt</code> from each remote host and copies it locally to
<code>message-number.txt</code> where <code>number</code> is the logical rank of the source node:</p>
</dd>
<dd>
<pre>
    taktuk -s -m host1 -m host2 -m host3
    broadcast get [ /tmp/message.txt ] [ message-$rank.txt ]
    Ctrl-D</pre>
</dd>
<dd>
<p>finally, it seems important to mention that <code>put/get</code> commands can copy
directories and keep files permissions unchanged.</p>
</dd>
</li>
<dt><strong><a name="item_communication"><strong>communication</strong></a></strong>

<dd>
<p><strong>TakTuk</strong> can also be used to establish a point-to-point communication. Assume
the file <code>communication.pl</code> contains the following Perl script:</p>
</dd>
<dd>
<pre>
    my $rank = TakTuk::get('rank');
    my $count = TakTuk::get('count');
    if ($rank == 1)
      {
        print &quot;I'm process 1\n&quot;;
        if ($count &gt; 1)
          {
            TakTuk::send(to=&gt;2, body=&gt;&quot;Hello world&quot;);
          }
      }
    elsif ($rank == 2)
      {
        print &quot;I'm process 2\n&quot;;
        my ($from, $message) = TakTuk::recv();
        print &quot;Process $to received $message from $from\n&quot;;
      }</pre>
</dd>
<dd>
<p>then the execution of the following command:</p>
</dd>
<dd>
<pre>
    taktuk -m localhost -m localhost broadcast taktuk_perl [ - ]\;broadcast input file [ communication.pl ]</pre>
</dd>
<dd>
<p>would produce an output similar to:</p>
</dd>
<dd>
<pre>
    Astaroth.local: taktuk_perl: 3523: output &gt; I'm process 2
    Astaroth.local: taktuk_perl: 3523: output &gt; Process 2 received Hello world from 1
    Astaroth.local: taktuk_perl: 3523: status &gt; 0
    Astaroth.local: taktuk_perl: 3524: output &gt; I'm process 1
    Astaroth.local: taktuk_perl: 3524: status &gt; 0</pre>
</dd>
<dd>
<p>if the file <code>communication.pl</code> was placed in the login directory of the user,
this could have also been executed by the more simple:</p>
</dd>
<dd>
<pre>
    taktuk -m localhost -m localhost broadcast taktuk_perl [ communication.pl ]</pre>
</dd>
</li>
<dt><strong><a name="item_output_templates_and_redirections"><strong>output templates and redirections</strong></a></strong>

<dd>
<p><strong>TakTuk</strong> is also capable of
making each site echo its rank without command status information:</p>
</dd>
<dd>
<pre>
    taktuk -o status -m host1 -m host2 broadcast exec [ 'echo $TAKTUK_RANK' ]</pre>
</dd>
<dd>
<p>or removing the prompt before each line of output from commands:</p>
</dd>
<dd>
<pre>
    taktuk -o output='&quot;$line\n&quot;' -m host1 -m host2 broadcast exec [ 'echo $TAKTUK_RANK' ]</pre>
</dd>
<dd>
<p>or even changing the prompt to make it display only the stream type:</p>
</dd>
<dd>
<pre>
    taktuk -o default='&quot;$type &gt; $line\n&quot;' -m host1 -m host2 broadcast exec [ 'echo $TAKTUK_RANK' ]</pre>
</dd>
<dd>
<p>and it also possible to redirect the status to file descriptor 2 only for the
second host:</p>
</dd>
<dd>
<pre>
    taktuk -m host1 -R status=2 -m host2 broadcast exec [ 'echo $TAKTUK_RANK' ]</pre>
</dd>
<dd>
<p>and so on...</p>
</dd>
</li>
</dl>
<p>
</p>
<h2><a name="developer_usage">Developer usage</a></h2>
<dl>
<dt><strong><a name="item_debugging_taktuk"><strong>debugging TakTuk</strong></a></strong>

<dd>
<p>debugging in <strong>TakTuk</strong> is made using <code>debug</code>, <code>warning</code> and <code>error</code> functions of the package <code>diagnostic</code>. These routines, depending on the debugging level of the package in which they are called, produce an output that is propagated up to the root node and printed on screen.</p>
</dd>
<dd>
<p>By default the debugging level of packages is set to 2 (everything is printed out except <code>debug</code> messages). It might be changed for each package using the <strong>-D</strong> option. For instance the following code executes <code>true</code> on <code>toto.nowhere.com</code> and prints out every bit of internal messaging:</p>
</dd>
<dd>
<pre>
    taktuk -D default=1 -m toto.nowhere.com broadcast exec [ true ]</pre>
</dd>
<dd>
<p>but one could have executed the same command keeping only messages from the <code>scheduler</code> package:</p>
</dd>
<dd>
<pre>
    taktuk -D scheduler=1 -m toto.nowhere.com broadcast exec [ true ]</pre>
</dd>
<dd>
<p>or ensuring an  execution exempted of any warning or error messages:</p>
</dd>
<dd>
<pre>
    taktuk -D default=4 -m toto.nowhere.com broadcast exec [ true ]</pre>
</dd>
</li>
<dt><strong><a name="item_internal_messages_server"><strong>internal messages server</strong></a></strong>

<dd>
<p>the internal message server used in <strong>TakTuk</strong> for the management of logical
network construction, commands execution and I/O forwarding can be exposed
using the <strong>-r</strong> option:</p>
</dd>
<dd>
<pre>
    taktuk -r</pre>
</dd>
<dd>
<p>Notice that in this mode the behavior of <strong>TakTuk</strong> can seem very cryptic. This is not intended for ordinary users.</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="bugs">BUGS</a></h1>
<p>The development of <strong>TakTuk</strong> is still in progress, so there are propably
numbers of bugs. For now, the following characteristics (some of them are not
really bugs) have been identified :</p>
<dl>
<dt><strong><a name="item_hanged_commands">hanged commands</a></strong>

<dd>
<p>currently <strong>TakTuk</strong> do not quit (even if asked to do so) if some local commands
do not terminate upon the closing of their standard input. Interrupting
<strong>TakTuk</strong> actually terminate the engine but do not kill these commands. We
still have to decide if this is the appropriate behavior.</p>
</dd>
</li>
<dt><strong><a name="item_command_order">command order</a></strong>

<dd>
<p>broadcasts and multicast (set specifications) are not synchronized the same way
in <strong>TakTuk</strong>. Thus, broadcast commands given after multicast commands might be
executed before these last ones. Use the <code>synchronize</code> command to avoid this.</p>
</dd>
</li>
<dt><strong><a name="item_fork_failures">fork failures</a></strong>

<dd>
<p>this is not really a bug : when a machine is highly loaded, fork may fail.
If this happen to a local command, a distributed application may deadlock,
because the taktuk instances numbering is correct but some instance didn't
fork the local command.
The simplest fix is to use timeouts on <code>TakTuk::recv()</code>.</p>
</dd>
</li>
</dl>
<p>You might also want to have a look at:</p>
<pre>
    <a href="http://taktuk.gforge.inria.fr/Bugs.txt">http://taktuk.gforge.inria.fr/Bugs.txt</a></pre>
<p>where all the temporary bugs are listed version by version.</p>
<p>
</p>
<hr />
<h1><a name="see_also">SEE ALSO</a></h1>
<p><code>taktukcomm(3)</code>, <code>TakTuk(3)</code>, <code>TakTuk::Pilot(3)</code></p>
<p>
</p>
<hr />
<h1><a name="author">AUTHOR</a></h1>
<p>The original concept of <strong>TakTuk</strong> has been proposed by Cyrille Martin in his PhD thesis. People involved in this work include Jacques Briat, Olivier Richard, Thierry Gautier and Guillaume Huard.</p>
<p>The author of the version 3 (perl version) and current maintainer of the package is Guillaume Huard.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p><strong>TakTuk</strong> is provided under the terms of the GNU General Public License version
2 or later.</p>

</body>

</html>