[lttng-dev] [PATCH lttng-tools v2 1/2] Introduce monitor_timer_interval to session configuration schema
Jérémie Galarneau
jeremie.galarneau at efficios.com
Mon Jul 24 21:11:12 UTC 2017
Merged in master and stable-2.10 with some minor changes; read on.
Thanks!
Jérémie
On 6 July 2017 at 11:08, Jonathan Rajotte
<jonathan.rajotte-julien at efficios.com> wrote:
> Session configuration schema version is bumped to 2.10
>
> Fixes #1099
>
> Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com>
> ---
> src/bin/lttng-sessiond/save.c | 27 ++++++++++++++++++++
> src/common/config/session-config.c | 52 +++++++++++++++++++++++++++++++++-----
> src/common/config/session.xsd | 3 ++-
> 3 files changed, 74 insertions(+), 8 deletions(-)
>
> diff --git a/src/bin/lttng-sessiond/save.c b/src/bin/lttng-sessiond/save.c
> index 1a879b21..3c34c856 100644
> --- a/src/bin/lttng-sessiond/save.c
> +++ b/src/bin/lttng-sessiond/save.c
> @@ -104,6 +104,18 @@ int save_kernel_channel_attributes(struct config_writer *writer,
> if (ret) {
> goto end;
> }
> +
> + if (attr->extended.ptr) {
> + struct lttng_channel_extended *ext = NULL;
Added an empty line here.
> + ext = (struct lttng_channel_extended *) attr->extended.ptr;
> + ret = config_writer_write_element_unsigned_int(writer,
> + config_element_monitor_timer_interval,
> + ext->monitor_timer_interval);
> + if (ret) {
> + goto end;
> + }
> + }
> +
> end:
> return ret ? LTTNG_ERR_SAVE_IO_FAIL : 0;
> }
> @@ -113,6 +125,7 @@ int save_ust_channel_attributes(struct config_writer *writer,
> struct lttng_ust_channel_attr *attr)
> {
> int ret;
> + struct ltt_ust_channel *channel = NULL;
>
> ret = config_writer_write_element_string(writer,
> config_element_overwrite_mode,
> @@ -156,6 +169,20 @@ int save_ust_channel_attributes(struct config_writer *writer,
> if (ret) {
> goto end;
> }
> +
> + /*
> + * Fetch the monitor timer which is located in the parent of
> + * lttng_ust_channel_attr
> + */
> +
^ Removed this empty line.
> + channel = caa_container_of(attr, struct ltt_ust_channel, attr);
> + ret = config_writer_write_element_unsigned_int(writer,
> + config_element_monitor_timer_interval,
> + channel->monitor_timer_interval);
> + if (ret) {
> + goto end;
> + }
> +
> end:
> return ret ? LTTNG_ERR_SAVE_IO_FAIL : 0;
> }
> diff --git a/src/common/config/session-config.c b/src/common/config/session-config.c
> index 5d0c2365..6042f1dc 100644
> --- a/src/common/config/session-config.c
> +++ b/src/common/config/session-config.c
> @@ -2081,6 +2081,37 @@ int process_channel_attr_node(xmlNodePtr attr_node,
> channel->attr.live_timer_interval =
> live_timer_interval;
> } else if (!strcmp((const char *) attr_node->name,
> + config_element_monitor_timer_interval)) {
> + xmlChar *content;
> + uint64_t monitor_timer_interval = 0;
> +
> + /* monitor_timer_interval */
> + content = xmlNodeGetContent(attr_node);
> + if (!content) {
> + ret = -LTTNG_ERR_NOMEM;
> + goto end;
> + }
> +
> + ret = parse_uint(content, &monitor_timer_interval);
> + free(content);
> + if (ret) {
> + ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
> + goto end;
> + }
> +
> + if (monitor_timer_interval > UINT_MAX) {
> + WARN("monitor_timer_interval out of range.");
> + ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
> + goto end;
Removed this check since monitor_timer is a uint64_t both in the
liblttng-ctl and internally in the session daemon.
> + }
> +
> + ret = lttng_channel_set_monitor_timer_interval(channel,
> + monitor_timer_interval);
> + if (ret) {
> + ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
> + goto end;
> + }
> + } else if (!strcmp((const char *) attr_node->name,
> config_element_events)) {
> /* events */
> *events_node = attr_node;
> @@ -2347,6 +2378,7 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name)
> int ret;
> struct lttng_domain domain = { 0 };
> struct lttng_handle *handle = NULL;
> + struct lttng_channel *channel = NULL;
> xmlNodePtr channels_node = NULL;
> xmlNodePtr trackers_node = NULL;
> xmlNodePtr pid_tracker_node = NULL;
> @@ -2382,39 +2414,44 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name)
> /* create all channels */
> for (node = xmlFirstElementChild(channels_node); node;
> node = xmlNextElementSibling(node)) {
> - struct lttng_channel channel;
> xmlNodePtr contexts_node = NULL;
> xmlNodePtr events_node = NULL;
> xmlNodePtr channel_attr_node;
>
> - memset(&channel, 0, sizeof(channel));
> - lttng_channel_set_default_attr(&domain, &channel.attr);
> + channel = lttng_channel_create(&domain);
> + if (!channel) {
> + ret = 1;
Changed to "ret = -1". It has no effect since the caller check "if
(ret)", but we typically use negative error code.
> + goto end;
> + }
>
> for (channel_attr_node = xmlFirstElementChild(node);
> channel_attr_node; channel_attr_node =
> xmlNextElementSibling(channel_attr_node)) {
> ret = process_channel_attr_node(channel_attr_node,
> - &channel, &contexts_node, &events_node);
> + channel, &contexts_node, &events_node);
> if (ret) {
> goto end;
> }
> }
>
> - ret = lttng_enable_channel(handle, &channel);
> + ret = lttng_enable_channel(handle, channel);
> if (ret < 0) {
> goto end;
> }
>
> - ret = process_events_node(events_node, handle, channel.name);
> + ret = process_events_node(events_node, handle, channel->name);
> if (ret) {
> goto end;
> }
>
> ret = process_contexts_node(contexts_node, handle,
> - channel.name);
> + channel->name);
> if (ret) {
> goto end;
> }
> +
> + lttng_channel_destroy(channel);
Moved the NULL assignment out of the loop.
> + channel = NULL;
> }
>
> /* get the trackers node */
> @@ -2447,6 +2484,7 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name)
> }
>
> end:
> + lttng_channel_destroy(channel);
> lttng_destroy_handle(handle);
> return ret;
> }
> diff --git a/src/common/config/session.xsd b/src/common/config/session.xsd
> index 6efdc433..83f04bc5 100644
> --- a/src/common/config/session.xsd
> +++ b/src/common/config/session.xsd
> @@ -21,7 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> THE SOFTWARE.
> -->
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> -elementFormDefault="qualified" version="2.8">
> +elementFormDefault="qualified" version="2.10">
>
> <xs:simpleType name="name_type">
> <xs:restriction base="xs:string">
> @@ -205,6 +205,7 @@ by its signed 32-bit representation when converted to msec.
> <xs:element name="live_timer_interval" type="uint32_type" default="0" minOccurs="0"/> <!-- usec -->
> <xs:element name="events" type="event_list_type" minOccurs="0"/>
> <xs:element name="contexts" type="event_context_list_type" minOccurs="0"/>
> + <xs:element name="monitor_timer_interval" type="uint64_type" default="0" minOccurs="0"/> <!-- usec -->
> </xs:all>
> </xs:complexType>
>
> --
> 2.11.0
>
--
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list