X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Factions%2Frotate-session.c;h=e519d45d827b2b7771dbb198560aac54d02c1110;hb=a0377dfefe40662ba7d68617bce6ff467114136c;hp=815e919d843c1cce33bc1953570d60e8eef6d268;hpb=c2c584344de5929117f84f3a2a9ad3f5e3c578ca;p=lttng-tools.git diff --git a/src/common/actions/rotate-session.c b/src/common/actions/rotate-session.c index 815e919d8..e519d45d8 100644 --- a/src/common/actions/rotate-session.c +++ b/src/common/actions/rotate-session.c @@ -5,12 +5,12 @@ * */ -#include #include #include +#include #include -#include -#include +#include +#include #include #include @@ -22,7 +22,7 @@ struct lttng_action_rotate_session { /* Owned by this. */ char *session_name; - struct lttng_firing_policy *policy; + struct lttng_rate_policy *policy; }; struct lttng_action_rotate_session_comm { @@ -38,10 +38,14 @@ struct lttng_action_rotate_session_comm { char data[]; } LTTNG_PACKED; +static const struct lttng_rate_policy * +lttng_action_rotate_session_internal_get_rate_policy( + const struct lttng_action *action); + static struct lttng_action_rotate_session *action_rotate_session_from_action( struct lttng_action *action) { - assert(action); + LTTNG_ASSERT(action); return container_of(action, struct lttng_action_rotate_session, parent); } @@ -49,7 +53,7 @@ static struct lttng_action_rotate_session *action_rotate_session_from_action( static const struct lttng_action_rotate_session * action_rotate_session_from_action_const(const struct lttng_action *action) { - assert(action); + LTTNG_ASSERT(action); return container_of(action, struct lttng_action_rotate_session, parent); } @@ -88,13 +92,13 @@ static bool lttng_action_rotate_session_is_equal( b = action_rotate_session_from_action_const(_b); /* Action is not valid if this is not true. */ - assert(a->session_name); - assert(b->session_name); + LTTNG_ASSERT(a->session_name); + LTTNG_ASSERT(b->session_name); if (strcmp(a->session_name, b->session_name)) { 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; } @@ -106,12 +110,12 @@ static int lttng_action_rotate_session_serialize( size_t session_name_len; int ret; - assert(action); - assert(payload); + LTTNG_ASSERT(action); + LTTNG_ASSERT(payload); action_rotate_session = action_rotate_session_from_action(action); - assert(action_rotate_session->session_name); + LTTNG_ASSERT(action_rotate_session->session_name); DBG("Serializing rotate session action: session-name: %s", action_rotate_session->session_name); @@ -133,7 +137,7 @@ static int lttng_action_rotate_session_serialize( goto end; } - ret = lttng_firing_policy_serialize( + ret = lttng_rate_policy_serialize( action_rotate_session->policy, payload); if (ret) { ret = -1; @@ -153,7 +157,7 @@ static void lttng_action_rotate_session_destroy(struct lttng_action *action) action_rotate_session = action_rotate_session_from_action(action); - lttng_firing_policy_destroy(action_rotate_session->policy); + lttng_rate_policy_destroy(action_rotate_session->policy); free(action_rotate_session->session_name); free(action_rotate_session); @@ -170,7 +174,7 @@ ssize_t lttng_action_rotate_session_create_from_payload( const char *session_name; struct lttng_action *action; enum lttng_action_status status; - struct lttng_firing_policy *policy = NULL; + struct lttng_rate_policy *policy = NULL; action = lttng_action_rotate_session_create(); if (!action) { @@ -188,12 +192,12 @@ ssize_t lttng_action_rotate_session_create_from_payload( } consumed_len = sizeof(*comm) + comm->session_name_len; - /* Firing policy. */ + /* Rate policy. */ { struct lttng_payload_view policy_view = lttng_payload_view_from_view( view, consumed_len, -1); - ret = lttng_firing_policy_create_from_payload( + ret = lttng_rate_policy_create_from_payload( &policy_view, &policy); if (ret < 0) { consumed_len = -1; @@ -209,8 +213,8 @@ ssize_t lttng_action_rotate_session_create_from_payload( goto end; } - assert(policy); - status = lttng_action_rotate_session_set_firing_policy(action, policy); + LTTNG_ASSERT(policy); + status = lttng_action_rotate_session_set_rate_policy(action, policy); if (status != LTTNG_ACTION_STATUS_OK) { consumed_len = -1; goto end; @@ -220,20 +224,76 @@ ssize_t lttng_action_rotate_session_create_from_payload( action = NULL; end: - lttng_firing_policy_destroy(policy); + lttng_rate_policy_destroy(policy); lttng_action_rotate_session_destroy(action); return consumed_len; } +static enum lttng_error_code lttng_action_rotate_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_rate_policy *policy = NULL; + + LTTNG_ASSERT(action); + LTTNG_ASSERT(IS_ROTATE_SESSION_ACTION(action)); + + status = lttng_action_rotate_session_get_session_name( + action, &session_name); + LTTNG_ASSERT(status == LTTNG_ACTION_STATUS_OK); + LTTNG_ASSERT(session_name != NULL); + + status = lttng_action_notify_get_rate_policy(action, &policy); + LTTNG_ASSERT(status == LTTNG_ACTION_STATUS_OK); + LTTNG_ASSERT(policy != NULL); + + /* Open action rotate session element. */ + ret = mi_lttng_writer_open_element( + writer, mi_lttng_element_action_rotate_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; + } + + /* Rate policy. */ + ret_code = lttng_rate_policy_mi_serialize(policy, writer); + if (ret_code != LTTNG_OK) { + goto end; + } + + /* Close action rotate 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_rotate_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; } @@ -247,9 +307,12 @@ struct lttng_action *lttng_action_rotate_session_create(void) lttng_action_rotate_session_validate, lttng_action_rotate_session_serialize, lttng_action_rotate_session_is_equal, - lttng_action_rotate_session_destroy); + lttng_action_rotate_session_destroy, + lttng_action_rotate_session_internal_get_rate_policy, + lttng_action_generic_add_error_query_results, + lttng_action_rotate_session_mi_serialize); - status = lttng_action_rotate_session_set_firing_policy(action, policy); + status = lttng_action_rotate_session_set_rate_policy(action, policy); if (status != LTTNG_ACTION_STATUS_OK) { free(action); action = NULL; @@ -257,7 +320,7 @@ struct lttng_action *lttng_action_rotate_session_create(void) } end: - lttng_firing_policy_destroy(policy); + lttng_rate_policy_destroy(policy); return action; } @@ -308,20 +371,20 @@ end: return status; } -enum lttng_action_status lttng_action_rotate_session_set_firing_policy( +enum lttng_action_status lttng_action_rotate_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_rotate_session *rotate_session_action; - struct lttng_firing_policy *copy = NULL; + struct lttng_rate_policy *copy = NULL; if (!action || !policy || !IS_ROTATE_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; @@ -329,8 +392,8 @@ enum lttng_action_status lttng_action_rotate_session_set_firing_policy( rotate_session_action = action_rotate_session_from_action(action); - /* Free the previous firing policy .*/ - lttng_firing_policy_destroy(rotate_session_action->policy); + /* Free the previous rate policy .*/ + lttng_rate_policy_destroy(rotate_session_action->policy); /* Assign the policy. */ rotate_session_action->policy = copy; @@ -338,13 +401,13 @@ enum lttng_action_status lttng_action_rotate_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_rotate_session_get_firing_policy( +enum lttng_action_status lttng_action_rotate_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_rotate_session *rotate_session_action; @@ -361,3 +424,13 @@ enum lttng_action_status lttng_action_rotate_session_get_firing_policy( end: return status; } + +static const struct lttng_rate_policy * +lttng_action_rotate_session_internal_get_rate_policy( + const struct lttng_action *action) +{ + const struct lttng_action_rotate_session *_action; + _action = action_rotate_session_from_action_const(action); + + return _action->policy; +}