From: Jérémie Galarneau Date: Wed, 16 May 2018 22:32:38 +0000 (-0400) Subject: Fix: sessions with agent channels fail to load X-Git-Tag: v2.11.0-rc1~236 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=36d1687c718cc647604741cf21e1ffa0b3459429;p=lttng-tools.git Fix: sessions with agent channels fail to load Channels of the "agent" types cannot be created directly. They are meant to be created implicitly through the activation of events in their domain. However, a user can override the default channel configuration attributes by creating the underlying UST channel before enabling an agent domain event. Hence, the channel's type is substituted before the creation and restored by the time events are created. Signed-off-by: Jérémie Galarneau --- diff --git a/src/common/config/session-config.c b/src/common/config/session-config.c index 8b91f32d5..0d75a088d 100644 --- a/src/common/config/session-config.c +++ b/src/common/config/session-config.c @@ -2437,10 +2437,31 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) /* create all channels */ for (node = xmlFirstElementChild(channels_node); node; node = xmlNextElementSibling(node)) { + const enum lttng_domain_type original_domain = domain.type; xmlNodePtr contexts_node = NULL; xmlNodePtr events_node = NULL; xmlNodePtr channel_attr_node; + /* + * Channels of the "agent" types cannot be created directly. + * They are meant to be created implicitly through the + * activation of events in their domain. However, a user + * can override the default channel configuration attributes + * by creating the underlying UST channel _before_ enabling + * an agent domain event. + * + * Hence, the channel's type is substituted before the creation + * and restored by the time the events are created. + */ + switch (domain.type) { + case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_LOG4J: + case LTTNG_DOMAIN_PYTHON: + domain.type = LTTNG_DOMAIN_UST; + default: + break; + } + channel = lttng_channel_create(&domain); if (!channel) { ret = -1; @@ -2462,6 +2483,9 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) goto end; } + /* Restore the original channel domain. */ + domain.type = original_domain; + ret = process_events_node(events_node, handle, channel->name); if (ret) { goto end;