X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Factions%2Fsnapshot-session.c;h=6c765edeac12cf90b71202aab1d91439d7a1797d;hb=0f7c296359bf90005e1dadf2d7a02a4b223a8031;hp=5d01784958de3eed0bd07d1119d51b9c73204142;hpb=2d57482cbac710612a36b7beae7b59c277006185;p=lttng-tools.git diff --git a/src/common/actions/snapshot-session.c b/src/common/actions/snapshot-session.c index 5d0178495..6c765edea 100644 --- a/src/common/actions/snapshot-session.c +++ b/src/common/actions/snapshot-session.c @@ -8,13 +8,14 @@ #include #include #include +#include #include #include #include #include #include -#include -#include +#include +#include #include #include #include @@ -36,14 +37,14 @@ struct lttng_action_snapshot_session { * Owned by this. */ struct lttng_snapshot_output *output; - struct lttng_firing_policy *policy; + struct lttng_rate_policy *policy; }; struct lttng_action_snapshot_session_comm { /* All string lengths include the trailing \0. */ uint32_t session_name_len; uint32_t snapshot_output_len; - uint32_t firing_policy_len; + uint32_t rate_policy_len; /* * Variable data (all strings are null-terminated): @@ -55,8 +56,8 @@ struct lttng_action_snapshot_session_comm { char data[]; } LTTNG_PACKED; -static const struct lttng_firing_policy * -lttng_action_snapshot_session_internal_get_firing_policy( +static const struct lttng_rate_policy * +lttng_action_snapshot_session_internal_get_rate_policy( const struct lttng_action *action); static struct lttng_action_snapshot_session * @@ -127,7 +128,7 @@ static bool lttng_action_snapshot_session_is_equal( goto end; } - is_equal = lttng_firing_policy_is_equal(a->policy, b->policy); + is_equal = lttng_rate_policy_is_equal(a->policy, b->policy); end: return is_equal; } @@ -192,12 +193,12 @@ static int lttng_action_snapshot_session_serialize( payload->buffer.size - size_before_output; } - /* Serialize the firing policy. */ + /* Serialize the rate policy. */ { const size_t size_before_output = payload->buffer.size; struct lttng_action_snapshot_session_comm *comm_in_payload; - ret = lttng_firing_policy_serialize( + ret = lttng_rate_policy_serialize( action_snapshot_session->policy, payload); if (ret) { ret = -1; @@ -206,8 +207,8 @@ static int lttng_action_snapshot_session_serialize( comm_in_payload = (typeof(comm_in_payload))( payload->buffer.data + size_before_comm); - /* Adjust firing policy length in header. */ - comm_in_payload->firing_policy_len = + /* Adjust rate policy length in header. */ + comm_in_payload->rate_policy_len = payload->buffer.size - size_before_output; } @@ -227,7 +228,7 @@ static void lttng_action_snapshot_session_destroy(struct lttng_action *action) free(action_snapshot_session->session_name); lttng_snapshot_output_destroy(action_snapshot_session->output); - lttng_firing_policy_destroy(action_snapshot_session->policy); + lttng_rate_policy_destroy(action_snapshot_session->policy); free(action_snapshot_session); end: @@ -243,7 +244,7 @@ ssize_t lttng_action_snapshot_session_create_from_payload( struct lttng_action *action; enum lttng_action_status status; struct lttng_snapshot_output *snapshot_output = NULL; - struct lttng_firing_policy *policy = NULL; + struct lttng_rate_policy *policy = NULL; const struct lttng_action_snapshot_session_comm *comm; const struct lttng_payload_view snapshot_session_comm_view = lttng_payload_view_from_view( @@ -316,46 +317,46 @@ ssize_t lttng_action_snapshot_session_create_from_payload( variable_data += comm->snapshot_output_len; consumed_len += comm->snapshot_output_len; - /* Firing policy. */ - if (comm->firing_policy_len <= 0) { - ERR("Firing policy should be present."); + /* Rate policy. */ + if (comm->rate_policy_len <= 0) { + ERR("Rate policy should be present."); goto error; } { - ssize_t firing_policy_consumed_len; + ssize_t rate_policy_consumed_len; struct lttng_payload_view policy_view = lttng_payload_view_from_view(view, consumed_len, - comm->firing_policy_len); + comm->rate_policy_len); if (!lttng_payload_view_is_valid(&policy_view)) { - ERR("Failed to create buffer view for firing policy."); + ERR("Failed to create buffer view for rate policy."); goto error; } - firing_policy_consumed_len = - lttng_firing_policy_create_from_payload( + rate_policy_consumed_len = + lttng_rate_policy_create_from_payload( &policy_view, &policy); - if (firing_policy_consumed_len < 0) { + if (rate_policy_consumed_len < 0) { goto error; } - if (firing_policy_consumed_len != comm->firing_policy_len) { - ERR("Failed to deserialize firing policy object: " + if (rate_policy_consumed_len != comm->rate_policy_len) { + ERR("Failed to deserialize rate policy object: " "consumed-len: %zd, expected-len: %" PRIu32, - firing_policy_consumed_len, - comm->firing_policy_len); + rate_policy_consumed_len, + comm->rate_policy_len); goto error; } - status = lttng_action_snapshot_session_set_firing_policy( + status = lttng_action_snapshot_session_set_rate_policy( action, policy); if (status != LTTNG_ACTION_STATUS_OK) { goto error; } } - variable_data += comm->firing_policy_len; - consumed_len += comm->firing_policy_len; + variable_data += comm->rate_policy_len; + consumed_len += comm->rate_policy_len; *p_action = action; action = NULL; @@ -366,21 +367,91 @@ error: consumed_len = -1; end: - lttng_firing_policy_destroy(policy); + lttng_rate_policy_destroy(policy); lttng_action_snapshot_session_destroy(action); lttng_snapshot_output_destroy(snapshot_output); return consumed_len; } +static enum lttng_error_code lttng_action_snapshot_session_mi_serialize( + const struct lttng_action *action, struct mi_writer *writer) +{ + int ret; + enum lttng_error_code ret_code; + enum lttng_action_status status; + const char *session_name = NULL; + const struct lttng_snapshot_output *output = NULL; + const struct lttng_rate_policy *policy = NULL; + + assert(action); + assert(IS_SNAPSHOT_SESSION_ACTION(action)); + + status = lttng_action_snapshot_session_get_session_name( + action, &session_name); + assert(status == LTTNG_ACTION_STATUS_OK); + assert(session_name != NULL); + + status = lttng_action_snapshot_session_get_rate_policy(action, &policy); + assert(status == LTTNG_ACTION_STATUS_OK); + assert(policy != NULL); + + /* Open action snapshot session element. */ + ret = mi_lttng_writer_open_element( + writer, mi_lttng_element_action_snapshot_session); + if (ret) { + goto mi_error; + } + + /* Session name. */ + ret = mi_lttng_writer_write_element_string( + writer, mi_lttng_element_session_name, session_name); + if (ret) { + goto mi_error; + } + + /* Output if any. */ + status = lttng_action_snapshot_session_get_output(action, &output); + if (status == LTTNG_ACTION_STATUS_OK) { + assert(output != NULL); + ret_code = lttng_snapshot_output_mi_serialize(output, writer); + if (ret_code != LTTNG_OK) { + goto end; + } + } else if (status != LTTNG_ACTION_STATUS_UNSET) { + /* This should not happen at this point. */ + abort(); + } + + /* Rate policy. */ + ret_code = lttng_rate_policy_mi_serialize(policy, writer); + if (ret_code != LTTNG_OK) { + goto end; + } + + /* Close action_snapshot_session 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; +} + struct lttng_action *lttng_action_snapshot_session_create(void) { struct lttng_action *action = NULL; - struct lttng_firing_policy *policy = NULL; + struct lttng_rate_policy *policy = NULL; enum lttng_action_status status; - /* Create a every N = 1 firing policy. */ - policy = lttng_firing_policy_every_n_create(1); + /* Create a every N = 1 rate policy. */ + policy = lttng_rate_policy_every_n_create(1); if (!policy) { goto end; } @@ -395,10 +466,11 @@ struct lttng_action *lttng_action_snapshot_session_create(void) lttng_action_snapshot_session_serialize, lttng_action_snapshot_session_is_equal, lttng_action_snapshot_session_destroy, - lttng_action_snapshot_session_internal_get_firing_policy); + lttng_action_snapshot_session_internal_get_rate_policy, + lttng_action_generic_add_error_query_results, + lttng_action_snapshot_session_mi_serialize); - status = lttng_action_snapshot_session_set_firing_policy( - action, policy); + status = lttng_action_snapshot_session_set_rate_policy(action, policy); if (status != LTTNG_ACTION_STATUS_OK) { free(action); action = NULL; @@ -406,7 +478,7 @@ struct lttng_action *lttng_action_snapshot_session_create(void) } end: - lttng_firing_policy_destroy(policy); + lttng_rate_policy_destroy(policy); return action; } @@ -510,20 +582,20 @@ end: return status; } -enum lttng_action_status lttng_action_snapshot_session_set_firing_policy( +enum lttng_action_status lttng_action_snapshot_session_set_rate_policy( struct lttng_action *action, - const struct lttng_firing_policy *policy) + const struct lttng_rate_policy *policy) { enum lttng_action_status status; struct lttng_action_snapshot_session *snapshot_session_action; - struct lttng_firing_policy *copy = NULL; + struct lttng_rate_policy *copy = NULL; if (!action || !policy || !IS_SNAPSHOT_SESSION_ACTION(action)) { status = LTTNG_ACTION_STATUS_INVALID; goto end; } - copy = lttng_firing_policy_copy(policy); + copy = lttng_rate_policy_copy(policy); if (!copy) { status = LTTNG_ACTION_STATUS_ERROR; goto end; @@ -531,8 +603,8 @@ enum lttng_action_status lttng_action_snapshot_session_set_firing_policy( snapshot_session_action = action_snapshot_session_from_action(action); - /* Free the previous firing policy .*/ - lttng_firing_policy_destroy(snapshot_session_action->policy); + /* Free the previous rate policy .*/ + lttng_rate_policy_destroy(snapshot_session_action->policy); /* Assign the policy. */ snapshot_session_action->policy = copy; @@ -540,13 +612,13 @@ enum lttng_action_status lttng_action_snapshot_session_set_firing_policy( copy = NULL; end: - lttng_firing_policy_destroy(copy); + lttng_rate_policy_destroy(copy); return status; } -enum lttng_action_status lttng_action_snapshot_session_get_firing_policy( +enum lttng_action_status lttng_action_snapshot_session_get_rate_policy( const struct lttng_action *action, - const struct lttng_firing_policy **policy) + const struct lttng_rate_policy **policy) { enum lttng_action_status status; const struct lttng_action_snapshot_session *snapshot_session_action; @@ -565,8 +637,8 @@ end: return status; } -static const struct lttng_firing_policy * -lttng_action_snapshot_session_internal_get_firing_policy( +static const struct lttng_rate_policy * +lttng_action_snapshot_session_internal_get_rate_policy( const struct lttng_action *action) { const struct lttng_action_snapshot_session *_action;