X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconfig%2Fsession-config.cpp;h=8f96b7f21e638a122fef392a4a5ed0e7dd3a86bf;hb=fbc3f258425648821da7264860ca32cc24db0915;hp=ef254d7ccea1d28bb8e64b348882a88a805b303d;hpb=f46376a14da2eb796690cb4e718e8b213839d6ea;p=lttng-tools.git diff --git a/src/common/config/session-config.cpp b/src/common/config/session-config.cpp index ef254d7cc..8f96b7f21 100644 --- a/src/common/config/session-config.cpp +++ b/src/common/config/session-config.cpp @@ -18,12 +18,12 @@ #include #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -34,16 +34,18 @@ #include #include -#include "session-config.h" -#include "config-internal.h" +#include "session-config.hpp" +#include "config-internal.hpp" #define CONFIG_USERSPACE_PROBE_LOOKUP_METHOD_NAME_MAX_LEN 7 +namespace { struct session_config_validation_ctx { xmlSchemaParserCtxtPtr parser_ctx; xmlSchemaPtr schema; xmlSchemaValidCtxtPtr schema_validation_ctx; }; +} /* namespace */ const char * const config_element_all = "all"; LTTNG_EXPORT const char *config_xml_encoding = "UTF-8"; @@ -233,12 +235,14 @@ enum process_event_node_phase { ENABLE = 1, }; +namespace { struct consumer_output { int enabled; char *path; char *control_uri; char *data_uri; }; +} /* namespace */ /* * Returns a xmlChar string which must be released using xmlFree(). @@ -287,7 +291,7 @@ struct config_writer *config_writer_create(int fd_output, int indent) struct config_writer *writer; xmlOutputBufferPtr buffer; - writer = (config_writer *) zmalloc(sizeof(struct config_writer)); + writer = zmalloc(); if (!writer) { PERROR("zmalloc config_writer_create"); goto end; @@ -581,7 +585,7 @@ char *get_session_config_xsd_path(void) base_path_len = strlen(base_path); max_path_len = base_path_len + sizeof(DEFAULT_SESSION_CONFIG_XSD_FILENAME) + 1; - xsd_path = (char *) zmalloc(max_path_len); + xsd_path = zmalloc(max_path_len); if (!xsd_path) { goto end; } @@ -1145,65 +1149,46 @@ end: return ret; } -static -int create_session_net_output(const char *name, const char *control_uri, - const char *data_uri) -{ - int ret; - struct lttng_handle *handle; - const char *uri = NULL; - - LTTNG_ASSERT(name); - - handle = lttng_create_handle(name, NULL); - if (!handle) { - ret = -LTTNG_ERR_NOMEM; - goto end; - } - - if (!control_uri || !data_uri) { - uri = control_uri ? control_uri : data_uri; - control_uri = uri; - data_uri = uri; - } - - ret = lttng_set_consumer_url(handle, control_uri, data_uri); - lttng_destroy_handle(handle); -end: - return ret; -} - static int create_snapshot_session(const char *session_name, xmlNodePtr output_node, const struct config_load_session_override_attr *overrides) { int ret; + enum lttng_error_code ret_code; xmlNodePtr node = NULL; xmlNodePtr snapshot_output_list_node; xmlNodePtr snapshot_output_node; + struct lttng_session_descriptor *session_descriptor = nullptr; LTTNG_ASSERT(session_name); + LTTNG_ASSERT(output_node); - ret = lttng_create_session_snapshot(session_name, NULL); - if (ret) { + /* + * Use a descriptor without output since consumer output size is not + * exposed by the session descriptor api. + */ + session_descriptor = lttng_session_descriptor_snapshot_create(session_name); + if (session_descriptor == nullptr) { + ret = -LTTNG_ERR_NOMEM; goto end; } - if (!output_node) { + ret_code = lttng_create_session_ext(session_descriptor); + if (ret_code != LTTNG_OK) { + ret = -ret_code; goto end; } snapshot_output_list_node = xmlFirstElementChild(output_node); /* Parse and create snapshot outputs */ - for (snapshot_output_node = xmlFirstElementChild(snapshot_output_list_node); snapshot_output_node; snapshot_output_node = xmlNextElementSibling(snapshot_output_node)) { char *name = NULL; uint64_t max_size = UINT64_MAX; - struct consumer_output output = { 0 }; + struct consumer_output output = {}; struct lttng_snapshot_output *snapshot_output = NULL; const char *control_uri = NULL; const char *data_uri = NULL; @@ -1319,6 +1304,7 @@ error_snapshot_output: } } end: + lttng_session_descriptor_destroy(session_descriptor); return ret; } @@ -1328,12 +1314,14 @@ int create_session(const char *name, uint64_t live_timer_interval, const struct config_load_session_override_attr *overrides) { - int ret; - struct consumer_output output = { 0 }; + int ret = 0; + enum lttng_error_code ret_code; + struct consumer_output output = {}; xmlNodePtr consumer_output_node; const char *control_uri = NULL; const char *data_uri = NULL; const char *path = NULL; + struct lttng_session_descriptor *session_descriptor = nullptr; LTTNG_ASSERT(name); @@ -1383,7 +1371,6 @@ int create_session(const char *name, } } - if (live_timer_interval != UINT64_MAX && !control_uri && !data_uri) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; @@ -1397,30 +1384,36 @@ int create_session(const char *name, * with a live timer the data and control URIs are provided. So, * NULL is passed here and will be set right after. */ - ret = lttng_create_session_live(name, NULL, live_timer_interval); + session_descriptor = lttng_session_descriptor_live_network_create( + name, control_uri, data_uri, live_timer_interval); } else { - ret = lttng_create_session(name, NULL); - } - if (ret) { - goto end; - } - - ret = create_session_net_output(name, control_uri, data_uri); - if (ret) { - goto end; + session_descriptor = lttng_session_descriptor_network_create( + name, control_uri, data_uri); } + } else if (path != nullptr) { + session_descriptor = lttng_session_descriptor_local_create(name, path); } else { - /* either local output or no output */ - ret = lttng_create_session(name, path); - if (ret) { - goto end; - } + /* No output */ + session_descriptor = lttng_session_descriptor_create(name); } + + if (session_descriptor == nullptr) { + ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; + goto end; + } + + ret_code = lttng_create_session_ext(session_descriptor); + if (ret_code != LTTNG_OK) { + ret = -ret_code; + goto end; + } + end: free(output.path); free(output.control_uri); free(output.data_uri); + lttng_session_descriptor_destroy(session_descriptor); return ret; } @@ -1856,7 +1849,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, continue; } - exclusions = (char **) zmalloc(exclusion_count * sizeof(char *)); + exclusions = calloc(exclusion_count); if (!exclusions) { exclusion_count = 0; ret = -LTTNG_ERR_NOMEM; @@ -3399,9 +3392,8 @@ int process_session_node(xmlNodePtr session_node, const char *session_name, /* Init domains to create the session handles */ for (node = xmlFirstElementChild(domains_node); node; node = xmlNextElementSibling(node)) { - struct lttng_domain *domain; + lttng_domain *domain = zmalloc(); - domain = (lttng_domain *) zmalloc(sizeof(*domain)); if (!domain) { ret = -LTTNG_ERR_NOMEM; goto error; @@ -3859,7 +3851,7 @@ int config_load_session(const char *path, const char *session_name, int ret; bool session_loaded = false; const char *path_ptr = NULL; - struct session_config_validation_ctx validation_ctx = { 0 }; + struct session_config_validation_ctx validation_ctx = {}; ret = init_session_config_validation_ctx(&validation_ctx); if (ret) {