X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fsnapshot.c;h=960240b2c4a1144830109a97fe5389473c19fe43;hb=3afa94aeca5a0daae40fd7b6cc96b7e4c150c7d8;hp=c2efcc02b80523bd4193f21d2b3f126c980d5c7b;hpb=757c48a28258e64fe251b6803ccdba7898590d70;p=lttng-tools.git diff --git a/src/common/snapshot.c b/src/common/snapshot.c index c2efcc02b..960240b2c 100644 --- a/src/common/snapshot.c +++ b/src/common/snapshot.c @@ -5,16 +5,16 @@ * */ -#include -#include +#include +#include +#include +#include #include #include #include -#include #include -LTTNG_HIDDEN bool lttng_snapshot_output_validate(const struct lttng_snapshot_output *output) { bool valid = false; @@ -46,15 +46,14 @@ end: return valid; } -LTTNG_HIDDEN bool lttng_snapshot_output_is_equal( const struct lttng_snapshot_output *a, const struct lttng_snapshot_output *b) { bool equal = false; - assert(a); - assert(b); + LTTNG_ASSERT(a); + LTTNG_ASSERT(b); if (a->max_size != b->max_size) { goto end; @@ -89,7 +88,6 @@ struct lttng_snapshot_output_comm { char data_url[PATH_MAX]; } LTTNG_PACKED; -LTTNG_HIDDEN int lttng_snapshot_output_serialize( const struct lttng_snapshot_output *output, struct lttng_payload *payload) @@ -127,7 +125,6 @@ end: return ret; } -LTTNG_HIDDEN ssize_t lttng_snapshot_output_create_from_payload( struct lttng_payload_view *view, struct lttng_snapshot_output **output_p) @@ -177,3 +174,79 @@ end: lttng_snapshot_output_destroy(output); return ret; } + +enum lttng_error_code lttng_snapshot_output_mi_serialize( + const struct lttng_snapshot_output *output, + struct mi_writer *writer) +{ + int ret; + enum lttng_error_code ret_code; + + LTTNG_ASSERT(output); + LTTNG_ASSERT(writer); + + /* Open output element. */ + ret = mi_lttng_writer_open_element(writer, + mi_lttng_element_action_snapshot_session_output); + if (ret) { + goto mi_error; + } + + /* Name. */ + if (strnlen(output->name, LTTNG_NAME_MAX) != 0) { + ret = mi_lttng_writer_write_element_string( + writer, config_element_name, output->name); + if (ret) { + goto mi_error; + } + } + + /* Control url (always present). */ + ret = mi_lttng_writer_write_element_string(writer, + mi_lttng_element_snapshot_ctrl_url, output->ctrl_url); + if (ret) { + goto mi_error; + } + + /* Data url (optional). */ + if (strnlen(output->data_url, PATH_MAX) != 0) { + ret = mi_lttng_writer_write_element_string(writer, + mi_lttng_element_snapshot_data_url, + output->data_url); + if (ret) { + goto mi_error; + } + } + + /* + * Maximum size in bytes of the snapshot meaning the total size of all + * streams combined. A value of 0 means unlimited. The default value is + * UINT64_MAX which also means unlimited in practice. + * + * The value is not serialized when it is set to either of those values + * to normalize them to '0'. + */ + if (output->max_size > 0 && output->max_size != UINT64_MAX) { + /* Total size of all stream combined. */ + ret = mi_lttng_writer_write_element_unsigned_int(writer, + mi_lttng_element_snapshot_max_size, + output->max_size); + if (ret) { + goto mi_error; + } + } + + /* Close output element. */ + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto mi_error; + } + + ret_code = LTTNG_OK; + goto end; + +mi_error: + ret_code = LTTNG_ERR_MI_IO_FAIL; +end: + return ret_code; +}