[lttng-dev] [RFC] LTTng address API proposal v3

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Tue Aug 7 15:19:15 EDT 2012


* David Goulet (dgoulet at efficios.com) wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> 
> After a discussion with Mathieu and Yannick, here is some big changes.
> 
> I hope I did not forget anything important.
> 
> Cheers!
> David
> -----BEGIN PGP SIGNATURE-----
> 
> iQEcBAEBCgAGBQJQIWfcAAoJEELoaioR9I02SAkH/iic+EYwOs5dw0X+yS37sBrp
> rbP8VHm+v7OP4Lc+x84pfHBnz0pk5qM7MN5/lmMpRfRwCiYNW8CbxC13V5Au6UgC
> PsNQdZGduVb56xmB5zhV1cD1laiU2W+0vdQzahIN0YDDZowYa6uJda9yjav/b6z8
> +duI2Zuw9NPOUnIDCSIpb3hKA4NZIZFsQGn+/IToikqWyRt/4wwiufaZNtlC85/w
> C0pGJL/9TBTY4rFmyZ/e19lJRUoNEygrFRRoJb5qxKWH5nHvfRXdFGw78xjDgim7
> g9AvrWZ7g73KZaS7LEpmAcofgRicWafIMd0+jUXv0MMrj3NeT/xD66UbtcUusl8=
> =jRvr
> -----END PGP SIGNATURE-----

> RFC - LTTng address API proposal
> 
> Author: David Goulet <david.goulet at efficios.com>
> 
> Contributors:
>     * Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> 	* Yannick Brosseau <yannick.brosseau at polymtl.ca>
> 
> Version:
>     - v0.1: 31/07/2012
>         * Initial proposal
> 	- v0.2: 07/08/0212
> 		* Remove lttng_create_session_addr
> 		* Describe URL string format
> 		* Add set_consumer_url examples
> 
> Introduction
> -----------------
> 
> This document proposes the use of string URLs to the command line interface and
> API which will deprecate a function and propose new ones.
> 
> The purpose of this proposal is to support network streaming using URL string
> format that you can find in proposal doc/proposals/0003-network.consumer.txt,
> remove the lttng_uri structure from the API and integrate the URL string to the
> API.
> 
> API
> -----------------
> 
> In order NOT to expose the new lttng_uri structure used to identify trace
> location for lttng consumer, the public API will only use string address where
> it will be converted in a lttng_uri and sent to the session daemon.
> 
> [*] Create session:
> 
> With the introduction of the enable-consumer command used for network
> streaming, the create session command has been modified so the user could
> define a consumer location either on the network or local with the command.
> 
> This does NOT change the current API call but rather simply rename _path_ to
> _url_ and how it is used in the lttng-ctl library.
> 
> Call changed from:
> --> lttng_create_session(const char *name, const char *path);
> 
> To:
> --> lttng_create_session(const char *name, const char *url);
> 
> The _name_ argument is the session name and _url_ is a string representing the
> URL specified by the user which is define like so:
> 
> PROTO://[HOSTNAME|IP][:PORT][/PATH]
> 
> The proto supported at this stage are (6 means IPv6):
> 
> 	* net, net6, tcp, tcp6, file
> 
> If the proto is NOT recognized, the string is considered to be a simple path on
> the local filesystem.

you could specify that it is a path relative to the process CWD (unless
it starts with a /).

> 
> The PATH section is the destination path on the _remote_ host where the trace
> data will be written with the <target_hostname> append after.

The last sentence is not clear (after reading it 2-3 times, it's still
not obvious what it explains).

Simply saying that the PATH is relative to a subdirectory "hostname",
under the remote relayd "virtual" root directory, might be enough.


> The relayd
> defines a default location

... for its virtual root directory...

> if none is given using the -o, --output option. This
> default is at:
> 
> 	* $USER/lttng-traces
> 
> For example, this URL results in writing the trace data in
> "$USER/lttng-traces/<target_hostname>/foo/bar".
> 
> 	* net://hostname/foo/bar
> 
> The PATH part can not be bigger than PATH_MAX (define in limits.h) which is
> 4096 bytes at the time of this proposal. Moreover, "../" is ignored and
> removed. For instance, using "net://localhost/../../" will set the path to the
> default one.
> 
> The <net(6)> protocol has a special case where the user can input two ports
> respectively being the control and data port.
> 
> 	* net://[HOSTNAME|IP][:CTRL_PORT][:DATA_PORT][/PATH]
> 
> If _url_ is not NULL, the lttng_create_session will use two API calls.

If _url_ is not NULL, in addition to creating the session, the
lttng_create_session will use the two following API calls:

> 
> 	1) lttng_set_consumer_url(handle, url);
> 	2) lttng_enable_consumer(handle);
> 
> If _url_ is NULL, then NO consumer is created for this tracing session and
> subsequent calls are needed to set up a consumer (i.e lttng_enable_consumer and
> lttng_set_consumer_url).
> 
> [*] Consumer:
> 
> This call is simply renamed.
> 
> From:
> --> lttng_set_consumer_uri(...)
> 
> To:
> --> lttng_set_consumer_url(struct lttng_handle *handle,
> 				const char *url);
> 
> For both functions (consumer and create), the _url_ will be parsed into a
> lttng_uri in the liblttng-ctl and sent to the session daemon.
> 
> Example:
> 
> 	lttng_set_consumer_url(handle, "net://42.42.42.2");
> 
> 
> With all this, the lttng_uri data structure will NOT be exposed to the public
> API and the user command line interface.

The rest looks good!

Thanks,

Mathieu


> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev


-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com



More information about the lttng-dev mailing list