[lttng-dev] [PATCH lttng-tools] Perform local data pending before checking data pending with relayd
Jérémie Galarneau
jeremie.galarneau at efficios.com
Wed Sep 19 11:52:35 EDT 2018
Merged in master, stable-2.11, stable-2.10, and stable-2.9.
Thanks,
Jérémie
On Mon, Sep 10, 2018 at 08:09:15PM -0400, Jonathan Rajotte wrote:
> Performing the data pending check in two phases, local and network,
> reduce the total number network operation needed.
>
> Doing the local check first enable early return in cases where data is
> still pending locally.
>
> Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com>
> ---
> src/common/consumer/consumer.c | 52 ++++++++++++++++++----------------
> 1 file changed, 28 insertions(+), 24 deletions(-)
>
> diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c
> index 66f10c780..5a32c7e8b 100644
> --- a/src/common/consumer/consumer.c
> +++ b/src/common/consumer/consumer.c
> @@ -3734,19 +3734,6 @@ int consumer_data_pending(uint64_t id)
> /* Ease our life a bit */
> ht = consumer_data.stream_list_ht;
>
> - relayd = find_relayd_by_session_id(id);
> - if (relayd) {
> - /* Send init command for data pending. */
> - pthread_mutex_lock(&relayd->ctrl_sock_mutex);
> - ret = relayd_begin_data_pending(&relayd->control_sock,
> - relayd->relayd_session_id);
> - pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
> - if (ret < 0) {
> - /* Communication error thus the relayd so no data pending. */
> - goto data_not_pending;
> - }
> - }
> -
> cds_lfht_for_each_entry_duplicate(ht->ht,
> ht->hash_fct(&id, lttng_ht_seed),
> ht->match_fct, &id,
> @@ -3769,9 +3756,27 @@ int consumer_data_pending(uint64_t id)
> }
> }
>
> - /* Relayd check */
> - if (relayd) {
> - pthread_mutex_lock(&relayd->ctrl_sock_mutex);
> + pthread_mutex_unlock(&stream->lock);
> + }
> +
> + relayd = find_relayd_by_session_id(id);
> + if (relayd) {
> + unsigned int is_data_inflight = 0;
> +
> + /* Send init command for data pending. */
> + pthread_mutex_lock(&relayd->ctrl_sock_mutex);
> + ret = relayd_begin_data_pending(&relayd->control_sock,
> + relayd->relayd_session_id);
> + if (ret < 0) {
> + pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
> + /* Communication error thus the relayd so no data pending. */
> + goto data_not_pending;
> + }
> +
> + cds_lfht_for_each_entry_duplicate(ht->ht,
> + ht->hash_fct(&id, lttng_ht_seed),
> + ht->match_fct, &id,
> + &iter.iter, stream, node_session_id.node) {
> if (stream->metadata_flag) {
> ret = relayd_quiescent_control(&relayd->control_sock,
> stream->relayd_stream_id);
> @@ -3780,20 +3785,19 @@ int consumer_data_pending(uint64_t id)
> stream->relayd_stream_id,
> stream->next_net_seq_num - 1);
> }
> - pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
> if (ret == 1) {
> + pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
> pthread_mutex_unlock(&stream->lock);
> goto data_pending;
> }
> + if (ret < 0) {
> + pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
> + pthread_mutex_unlock(&stream->lock);
> + goto data_not_pending;
> + }
> }
> - pthread_mutex_unlock(&stream->lock);
> - }
>
> - if (relayd) {
> - unsigned int is_data_inflight = 0;
> -
> - /* Send init command for data pending. */
> - pthread_mutex_lock(&relayd->ctrl_sock_mutex);
> + /* Send end command for data pending. */
> ret = relayd_end_data_pending(&relayd->control_sock,
> relayd->relayd_session_id, &is_data_inflight);
> pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
> --
> 2.17.1
>
More information about the lttng-dev
mailing list