From: Jérémie Galarneau Date: Wed, 22 May 2019 20:28:39 +0000 (-0400) Subject: Cleanup: remove duplicated code in snapshot record command X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=commitdiff_plain;h=fb9a95c4d6242bd8336b638c90a7d8f846125659 Cleanup: remove duplicated code in snapshot record command The session daemon's snapshot record command contains duplicated code depending on the configuration of the snapshot output. This makes it harder to modify the code in a follow-up commit. Those code paths are made const-correct by the same occasion. No behaviour change is intended. Signed-off-by: Jérémie Galarneau --- diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index 0ba1ec4f7..3cf8c518c 100644 --- a/src/bin/lttng-sessiond/cmd.c +++ b/src/bin/lttng-sessiond/cmd.c @@ -1030,7 +1030,8 @@ static enum lttng_error_code send_consumer_relayd_socket( struct lttng_uri *relayd_uri, struct consumer_output *consumer, struct consumer_socket *consumer_sock, - char *session_name, char *hostname, int session_live_timer) + const char *session_name, const char *hostname, + int session_live_timer) { int ret; struct lttcomm_relayd_sock *rsock = NULL; @@ -1104,8 +1105,8 @@ relayd_comm_error: static enum lttng_error_code send_consumer_relayd_sockets( enum lttng_domain_type domain, unsigned int session_id, struct consumer_output *consumer, - struct consumer_socket *sock, char *session_name, - char *hostname, int session_live_timer) + struct consumer_socket *sock, const char *session_name, + const char *hostname, int session_live_timer) { enum lttng_error_code status = LTTNG_OK; @@ -4103,8 +4104,8 @@ end: */ static enum lttng_error_code set_relayd_for_snapshot( struct consumer_output *consumer, - struct snapshot_output *snap_output, - struct ltt_session *session) + const struct snapshot_output *snap_output, + const struct ltt_session *session) { enum lttng_error_code status = LTTNG_OK; struct lttng_ht_iter iter; @@ -4150,8 +4151,10 @@ error: * * Return LTTNG_OK on success or a LTTNG_ERR code. */ -static enum lttng_error_code record_kernel_snapshot(struct ltt_kernel_session *ksess, - struct snapshot_output *output, struct ltt_session *session, +static enum lttng_error_code record_kernel_snapshot( + struct ltt_kernel_session *ksess, + const struct snapshot_output *output, + const struct ltt_session *session, int wait, uint64_t nb_packets_per_stream) { int ret; @@ -4197,8 +4200,9 @@ end: * Returns LTTNG_OK on success or a LTTNG_ERR error code. */ static enum lttng_error_code record_ust_snapshot(struct ltt_ust_session *usess, - struct snapshot_output *output, struct ltt_session *session, - int wait, uint64_t nb_packets_per_stream) + const struct snapshot_output *output, + const struct ltt_session *session, int wait, + uint64_t nb_packets_per_stream) { int ret; enum lttng_error_code status; @@ -4222,7 +4226,8 @@ static enum lttng_error_code record_ust_snapshot(struct ltt_ust_session *usess, goto error_snapshot; } - status = ust_app_snapshot_record(usess, output, wait, nb_packets_per_stream); + status = ust_app_snapshot_record(usess, output, wait, + nb_packets_per_stream); if (status != LTTNG_OK) { goto error_snapshot; } @@ -4238,14 +4243,15 @@ end: } static -uint64_t get_session_size_one_more_packet_per_stream(struct ltt_session *session, - uint64_t cur_nr_packets) +uint64_t get_session_size_one_more_packet_per_stream( + const struct ltt_session *session, uint64_t cur_nr_packets) { uint64_t tot_size = 0; if (session->kernel_session) { struct ltt_kernel_channel *chan; - struct ltt_kernel_session *ksess = session->kernel_session; + const struct ltt_kernel_session *ksess = + session->kernel_session; cds_list_for_each_entry(chan, &ksess->channel_list.head, list) { if (cur_nr_packets >= chan->channel->attr.num_subbuf) { @@ -4261,7 +4267,7 @@ uint64_t get_session_size_one_more_packet_per_stream(struct ltt_session *session } if (session->ust_session) { - struct ltt_ust_session *usess = session->ust_session; + const struct ltt_ust_session *usess = session->ust_session; tot_size += ust_app_get_size_one_more_packet_per_stream(usess, cur_nr_packets); @@ -4291,7 +4297,8 @@ uint64_t get_session_size_one_more_packet_per_stream(struct ltt_session *session * in between this call and actually grabbing data. */ static -int64_t get_session_nb_packets_per_stream(struct ltt_session *session, uint64_t max_size) +int64_t get_session_nb_packets_per_stream(const struct ltt_session *session, + uint64_t max_size) { int64_t size_left; uint64_t cur_nb_packets = 0; @@ -4304,8 +4311,8 @@ int64_t get_session_nb_packets_per_stream(struct ltt_session *session, uint64_t for (;;) { uint64_t one_more_packet_tot_size; - one_more_packet_tot_size = get_session_size_one_more_packet_per_stream(session, - cur_nb_packets); + one_more_packet_tot_size = get_session_size_one_more_packet_per_stream( + session, cur_nb_packets); if (!one_more_packet_tot_size) { /* We are already grabbing all packets. */ break; @@ -4323,6 +4330,41 @@ int64_t get_session_nb_packets_per_stream(struct ltt_session *session, uint64_t return cur_nb_packets; } +static +enum lttng_error_code snapshot_record(const struct ltt_session *session, + const struct snapshot_output *snapshot_output, int wait) +{ + int64_t nb_packets_per_stream; + enum lttng_error_code ret = LTTNG_OK; + + nb_packets_per_stream = get_session_nb_packets_per_stream(session, + snapshot_output->max_size); + if (nb_packets_per_stream < 0) { + ret = LTTNG_ERR_MAX_SIZE_INVALID; + goto end; + } + + if (session->kernel_session) { + ret = record_kernel_snapshot(session->kernel_session, + snapshot_output, session, + wait, nb_packets_per_stream); + if (ret != LTTNG_OK) { + goto end; + } + } + + if (session->ust_session) { + ret = record_ust_snapshot(session->ust_session, + snapshot_output, session, + wait, nb_packets_per_stream); + if (ret != LTTNG_OK) { + goto end; + } + } +end: + return ret; +} + /* * Command LTTNG_SNAPSHOT_RECORD from lib lttng ctl. * @@ -4393,33 +4435,10 @@ int cmd_snapshot_record(struct ltt_session *session, } if (use_tmp_output) { - int64_t nb_packets_per_stream; - - nb_packets_per_stream = get_session_nb_packets_per_stream(session, - tmp_output.max_size); - if (nb_packets_per_stream < 0) { - cmd_ret = LTTNG_ERR_MAX_SIZE_INVALID; + cmd_ret = snapshot_record(session, &tmp_output, wait); + if (cmd_ret != LTTNG_OK) { goto error; } - - if (session->kernel_session) { - cmd_ret = record_kernel_snapshot(session->kernel_session, - &tmp_output, session, - wait, nb_packets_per_stream); - if (cmd_ret != LTTNG_OK) { - goto error; - } - } - - if (session->ust_session) { - cmd_ret = record_ust_snapshot(session->ust_session, - &tmp_output, session, - wait, nb_packets_per_stream); - if (cmd_ret != LTTNG_OK) { - goto error; - } - } - snapshot_success = 1; } else { struct snapshot_output *sout; @@ -4428,26 +4447,18 @@ int cmd_snapshot_record(struct ltt_session *session, rcu_read_lock(); cds_lfht_for_each_entry(session->snapshot.output_ht->ht, &iter.iter, sout, node.node) { - int64_t nb_packets_per_stream; - /* - * Make a local copy of the output and assign the possible - * temporary value given by the caller. + * Make a local copy of the output and assign the + * possible temporary value given by the caller. */ - memset(&tmp_output, 0, sizeof(tmp_output)); memcpy(&tmp_output, sout, sizeof(tmp_output)); if (output->max_size != (uint64_t) -1ULL) { tmp_output.max_size = output->max_size; } - nb_packets_per_stream = get_session_nb_packets_per_stream(session, - tmp_output.max_size); - if (nb_packets_per_stream < 0) { - cmd_ret = LTTNG_ERR_MAX_SIZE_INVALID; - rcu_read_unlock(); - goto error; - } + tmp_output.nb_snapshot = session->snapshot.nb_snapshot; + memcpy(tmp_output.datetime, datetime, sizeof(datetime)); /* Use temporary name. */ if (*output->name != '\0') { @@ -4459,27 +4470,10 @@ int cmd_snapshot_record(struct ltt_session *session, } } - tmp_output.nb_snapshot = session->snapshot.nb_snapshot; - memcpy(tmp_output.datetime, datetime, sizeof(datetime)); - - if (session->kernel_session) { - cmd_ret = record_kernel_snapshot(session->kernel_session, - &tmp_output, session, - wait, nb_packets_per_stream); - if (cmd_ret != LTTNG_OK) { - rcu_read_unlock(); - goto error; - } - } - - if (session->ust_session) { - cmd_ret = record_ust_snapshot(session->ust_session, - &tmp_output, session, - wait, nb_packets_per_stream); - if (cmd_ret != LTTNG_OK) { - rcu_read_unlock(); - goto error; - } + cmd_ret = snapshot_record(session, &tmp_output, wait); + if (cmd_ret != LTTNG_OK) { + rcu_read_unlock(); + goto error; } snapshot_success = 1; } diff --git a/src/bin/lttng-sessiond/consumer.c b/src/bin/lttng-sessiond/consumer.c index 171301ab5..99b22210d 100644 --- a/src/bin/lttng-sessiond/consumer.c +++ b/src/bin/lttng-sessiond/consumer.c @@ -1058,7 +1058,8 @@ error: int consumer_send_relayd_socket(struct consumer_socket *consumer_sock, struct lttcomm_relayd_sock *rsock, struct consumer_output *consumer, enum lttng_stream_type type, uint64_t session_id, - char *session_name, char *hostname, int session_live_timer) + const char *session_name, const char *hostname, + int session_live_timer) { int ret; struct lttcomm_consumer_msg msg; @@ -1418,7 +1419,7 @@ end: * Returns LTTNG_OK on success or else an LTTng error code. */ enum lttng_error_code consumer_snapshot_channel(struct consumer_socket *socket, - uint64_t key, struct snapshot_output *output, int metadata, + uint64_t key, const struct snapshot_output *output, int metadata, uid_t uid, gid_t gid, const char *session_path, int wait, uint64_t nb_packets_per_stream, uint64_t trace_archive_id) { diff --git a/src/bin/lttng-sessiond/consumer.h b/src/bin/lttng-sessiond/consumer.h index caa076c89..c0f7fee36 100644 --- a/src/bin/lttng-sessiond/consumer.h +++ b/src/bin/lttng-sessiond/consumer.h @@ -212,7 +212,8 @@ int consumer_send_channel(struct consumer_socket *sock, int consumer_send_relayd_socket(struct consumer_socket *consumer_sock, struct lttcomm_relayd_sock *rsock, struct consumer_output *consumer, enum lttng_stream_type type, uint64_t session_id, - char *session_name, char *hostname, int session_live_timer); + const char *session_name, const char *hostname, + int session_live_timer); int consumer_send_channel_monitor_pipe(struct consumer_socket *consumer_sock, int pipe); int consumer_send_destroy_relayd(struct consumer_socket *sock, @@ -294,7 +295,7 @@ int consumer_get_lost_packets(uint64_t session_id, uint64_t channel_key, /* Snapshot command. */ enum lttng_error_code consumer_snapshot_channel(struct consumer_socket *socket, - uint64_t key, struct snapshot_output *output, int metadata, + uint64_t key, const struct snapshot_output *output, int metadata, uid_t uid, gid_t gid, const char *session_path, int wait, uint64_t nb_packets_per_stream, uint64_t trace_archive_id); diff --git a/src/bin/lttng-sessiond/kernel.c b/src/bin/lttng-sessiond/kernel.c index 7173fac16..9268a2779 100644 --- a/src/bin/lttng-sessiond/kernel.c +++ b/src/bin/lttng-sessiond/kernel.c @@ -1240,8 +1240,9 @@ void kernel_destroy_channel(struct ltt_kernel_channel *kchan) * * Return LTTNG_OK on success or else return a LTTNG_ERR code. */ -enum lttng_error_code kernel_snapshot_record(struct ltt_kernel_session *ksess, - struct snapshot_output *output, int wait, +enum lttng_error_code kernel_snapshot_record( + struct ltt_kernel_session *ksess, + const struct snapshot_output *output, int wait, uint64_t nb_packets_per_stream) { int err, ret, saved_metadata_fd; diff --git a/src/bin/lttng-sessiond/kernel.h b/src/bin/lttng-sessiond/kernel.h index 9b0c15cd1..5fcd7e4c5 100644 --- a/src/bin/lttng-sessiond/kernel.h +++ b/src/bin/lttng-sessiond/kernel.h @@ -59,8 +59,9 @@ int kernel_validate_version(int tracer_fd, struct lttng_kernel_tracer_abi_version *kernel_tracer_abi_version); void kernel_destroy_session(struct ltt_kernel_session *ksess); void kernel_destroy_channel(struct ltt_kernel_channel *kchan); -enum lttng_error_code kernel_snapshot_record(struct ltt_kernel_session *ksess, - struct snapshot_output *output, int wait, +enum lttng_error_code kernel_snapshot_record( + struct ltt_kernel_session *ksess, + const struct snapshot_output *output, int wait, uint64_t nb_packets_per_stream); int kernel_syscall_mask(int chan_fd, char **syscall_mask, uint32_t *nr_bits); enum lttng_error_code kernel_rotate_session(struct ltt_session *session); diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 6b9afe3ab..4cc21b42c 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -1923,7 +1923,7 @@ error: * Lookup sesison wrapper. */ static -void __lookup_session_by_app(struct ltt_ust_session *usess, +void __lookup_session_by_app(const struct ltt_ust_session *usess, struct ust_app *app, struct lttng_ht_iter *iter) { /* Get right UST app session from app */ @@ -1935,7 +1935,7 @@ void __lookup_session_by_app(struct ltt_ust_session *usess, * id. */ static struct ust_app_session *lookup_session_by_app( - struct ltt_ust_session *usess, struct ust_app *app) + const struct ltt_ust_session *usess, struct ust_app *app) { struct lttng_ht_iter iter; struct lttng_ht_node_u64 *node; @@ -5874,8 +5874,9 @@ void ust_app_destroy(struct ust_app *app) * * Returns LTTNG_OK on success or a LTTNG_ERR error code. */ -enum lttng_error_code ust_app_snapshot_record(struct ltt_ust_session *usess, - struct snapshot_output *output, int wait, +enum lttng_error_code ust_app_snapshot_record( + const struct ltt_ust_session *usess, + const struct snapshot_output *output, int wait, uint64_t nb_packets_per_stream) { int ret = 0; @@ -6040,8 +6041,8 @@ error: /* * Return the size taken by one more packet per stream. */ -uint64_t ust_app_get_size_one_more_packet_per_stream(struct ltt_ust_session *usess, - uint64_t cur_nr_packets) +uint64_t ust_app_get_size_one_more_packet_per_stream( + const struct ltt_ust_session *usess, uint64_t cur_nr_packets) { uint64_t tot_size = 0; struct ust_app *app; diff --git a/src/bin/lttng-sessiond/ust-app.h b/src/bin/lttng-sessiond/ust-app.h index b90ff4bce..0627dd904 100644 --- a/src/bin/lttng-sessiond/ust-app.h +++ b/src/bin/lttng-sessiond/ust-app.h @@ -340,11 +340,12 @@ void ust_app_notify_sock_unregister(int sock); ssize_t ust_app_push_metadata(struct ust_registry_session *registry, struct consumer_socket *socket, int send_zero_data); void ust_app_destroy(struct ust_app *app); -enum lttng_error_code ust_app_snapshot_record(struct ltt_ust_session *usess, - struct snapshot_output *output, int wait, +enum lttng_error_code ust_app_snapshot_record( + const struct ltt_ust_session *usess, + const struct snapshot_output *output, int wait, uint64_t nb_packets_per_stream); uint64_t ust_app_get_size_one_more_packet_per_stream( - struct ltt_ust_session *usess, uint64_t cur_nr_packets); + const struct ltt_ust_session *usess, uint64_t cur_nr_packets); struct ust_app *ust_app_find_by_sock(int sock); int ust_app_uid_get_channel_runtime_stats(uint64_t ust_session_id, struct cds_list_head *buffer_reg_uid_list, diff --git a/src/common/hashtable/hashtable.c b/src/common/hashtable/hashtable.c index 4fb19cffd..78175ca6d 100644 --- a/src/common/hashtable/hashtable.c +++ b/src/common/hashtable/hashtable.c @@ -259,7 +259,7 @@ void lttng_ht_node_free_two_u64(struct lttng_ht_node_two_u64 *node) * Lookup function in hashtable. */ LTTNG_HIDDEN -void lttng_ht_lookup(struct lttng_ht *ht, void *key, +void lttng_ht_lookup(struct lttng_ht *ht, const void *key, struct lttng_ht_iter *iter) { assert(ht); diff --git a/src/common/hashtable/hashtable.h b/src/common/hashtable/hashtable.h index ea58bfe12..0dd925645 100644 --- a/src/common/hashtable/hashtable.h +++ b/src/common/hashtable/hashtable.h @@ -103,7 +103,7 @@ LTTNG_HIDDEN void lttng_ht_node_free_two_u64(struct lttng_ht_node_two_u64 *node); LTTNG_HIDDEN -void lttng_ht_lookup(struct lttng_ht *ht, void *key, +void lttng_ht_lookup(struct lttng_ht *ht, const void *key, struct lttng_ht_iter *iter); /* Specialized add unique functions */ diff --git a/src/common/relayd/relayd.c b/src/common/relayd/relayd.c index ff0be32a1..08bbad23b 100644 --- a/src/common/relayd/relayd.c +++ b/src/common/relayd/relayd.c @@ -126,7 +126,7 @@ error: * payload size is introduced. */ static int relayd_create_session_2_11(struct lttcomm_relayd_sock *rsock, - char *session_name, char *hostname, + const char *session_name, const char *hostname, int session_live_timer, unsigned int snapshot, uint64_t sessiond_session_id, const lttng_uuid sessiond_uuid) { @@ -183,8 +183,8 @@ error: * support the live reading capability. */ static int relayd_create_session_2_4(struct lttcomm_relayd_sock *rsock, - char *session_name, char *hostname, int session_live_timer, - unsigned int snapshot) + const char *session_name, const char *hostname, + int session_live_timer, unsigned int snapshot) { int ret; struct lttcomm_relayd_create_session_2_4 msg; @@ -235,8 +235,10 @@ error: * On success, return 0 else a negative value which is either an errno error or * a lttng error code from the relayd. */ -int relayd_create_session(struct lttcomm_relayd_sock *rsock, uint64_t *relayd_session_id, - char *session_name, char *hostname, int session_live_timer, +int relayd_create_session(struct lttcomm_relayd_sock *rsock, + uint64_t *relayd_session_id, + const char *session_name, const char *hostname, + int session_live_timer, unsigned int snapshot, uint64_t sessiond_session_id, const lttng_uuid sessiond_uuid) { diff --git a/src/common/relayd/relayd.h b/src/common/relayd/relayd.h index 2fcdcf4c7..af93188ee 100644 --- a/src/common/relayd/relayd.h +++ b/src/common/relayd/relayd.h @@ -26,9 +26,10 @@ int relayd_connect(struct lttcomm_relayd_sock *sock); int relayd_close(struct lttcomm_relayd_sock *sock); int relayd_create_session(struct lttcomm_relayd_sock *sock, - uint64_t *relayd_session_id, char *session_name, char *hostname, - int session_live_timer, unsigned int snapshot, - uint64_t sessiond_session_id, const lttng_uuid sessiond_uuid); + uint64_t *relayd_session_id, const char *session_name, + const char *hostname, int session_live_timer, + unsigned int snapshot, uint64_t sessiond_session_id, + const lttng_uuid sessiond_uuid); int relayd_add_stream(struct lttcomm_relayd_sock *sock, const char *channel_name, const char *pathname, uint64_t *stream_id, uint64_t tracefile_size, uint64_t tracefile_count,