Fix: channel errors on local stress-tests
[lttng-tools.git] / src / bin / lttng-sessiond / ust-app.c
index 52d1da787f8142cd7cf92bab17acd9d3eda11235..f97d869e6900fc9a9efd9903e67c164b0f78fc08 100644 (file)
@@ -487,9 +487,11 @@ void delete_ust_app_channel(int sock, struct ust_app_channel *ua_chan,
                registry = get_session_registry(ua_chan->session);
                if (registry) {
                        ust_registry_channel_del_free(registry, ua_chan->key,
-                               true);
+                               sock >= 0);
+               }
+               if (sock >= 0) {
+                       save_per_pid_lost_discarded_counters(ua_chan);
                }
-               save_per_pid_lost_discarded_counters(ua_chan);
        }
 
        if (ua_chan->obj != NULL) {
@@ -5429,7 +5431,7 @@ static int reply_ust_register_channel(int sock, int cobjd,
                size_t nr_fields, struct ustctl_field *fields)
 {
        int ret, ret_code = 0;
-       uint32_t chan_id, reg_count;
+       uint32_t chan_id;
        uint64_t chan_reg_key;
        enum ustctl_channel_header type;
        struct ust_app *app;
@@ -5481,13 +5483,12 @@ static int reply_ust_register_channel(int sock, int cobjd,
        assert(chan_reg);
 
        if (!chan_reg->register_done) {
-               reg_count = ust_registry_get_event_count(chan_reg);
-               if (reg_count < 31) {
-                       type = USTCTL_CHANNEL_HEADER_COMPACT;
-               } else {
-                       type = USTCTL_CHANNEL_HEADER_LARGE;
-               }
-
+               /*
+                * TODO: eventually use the registry event count for
+                * this channel to better guess header type for per-pid
+                * buffers.
+                */
+               type = USTCTL_CHANNEL_HEADER_LARGE;
                chan_reg->nr_ctx_fields = nr_fields;
                chan_reg->ctx_fields = fields;
                fields = NULL;
@@ -6328,7 +6329,7 @@ int ust_app_regenerate_statedump_all(struct ltt_ust_session *usess)
  *
  * Return 0 on success or else a negative value.
  */
-int ust_app_rotate_session(struct ltt_session *session, bool *ust_active)
+int ust_app_rotate_session(struct ltt_session *session)
 {
        int ret = 0;
        struct lttng_ht_iter iter;
@@ -6357,22 +6358,6 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active)
                                goto error;
                        }
 
-                       /*
-                        * Account the metadata channel first to make sure the
-                        * number of channels waiting for a rotation cannot
-                        * reach 0 before we complete the iteration over all
-                        * the channels.
-                        */
-                       ret = rotate_add_channel_pending(
-                                       reg->registry->reg.ust->metadata_key,
-                                       LTTNG_DOMAIN_UST, session);
-                       if (ret < 0) {
-                               ret = reg->bits_per_long == 32 ?
-                                               -LTTNG_ERR_UST_CONSUMER32_FAIL :
-                                               -LTTNG_ERR_UST_CONSUMER64_FAIL;
-                               goto error;
-                       }
-
                        ret = snprintf(pathname, sizeof(pathname),
                                        DEFAULT_UST_TRACE_DIR "/" DEFAULT_UST_TRACE_UID_PATH,
                                        reg->uid, reg->bits_per_long);
@@ -6384,22 +6369,12 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active)
                        /* Rotate the data channels. */
                        cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter,
                                        reg_chan, node.node) {
-                               ret = rotate_add_channel_pending(
-                                               reg_chan->consumer_key,
-                                               LTTNG_DOMAIN_UST, session);
-                               if (ret < 0) {
-                                       ret = reg->bits_per_long == 32 ?
-                                                       -LTTNG_ERR_UST_CONSUMER32_FAIL :
-                                                       -LTTNG_ERR_UST_CONSUMER64_FAIL;
-                                       goto error;
-                               }
                                ret = consumer_rotate_channel(socket,
                                                reg_chan->consumer_key,
                                                usess->uid, usess->gid,
                                                usess->consumer, pathname,
                                                /* is_metadata_channel */ false,
-                                               session->current_archive_id,
-                                               &session->rotate_pending_relay);
+                                               session->current_archive_id);
                                if (ret < 0) {
                                        goto error;
                                }
@@ -6412,12 +6387,10 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active)
                                        usess->uid, usess->gid,
                                        usess->consumer, pathname,
                                        /* is_metadata_channel */ true,
-                                       session->current_archive_id,
-                                       &session->rotate_pending_relay);
+                                       session->current_archive_id);
                        if (ret < 0) {
                                goto error;
                        }
-                       *ust_active = true;
                }
                break;
        }
@@ -6453,44 +6426,20 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active)
 
                        registry = get_session_registry(ua_sess);
                        if (!registry) {
-                               DBG("Application session is being torn down. Abort snapshot record.");
+                               DBG("Application session is being torn down. Abort session rotation.");
                                ret = -1;
                                goto error;
                        }
 
-                       /*
-                        * Account the metadata channel first to make sure the
-                        * number of channels waiting for a rotation cannot
-                        * reach 0 before we complete the iteration over all
-                        * the channels.
-                        */
-                       ret = rotate_add_channel_pending(registry->metadata_key,
-                                       LTTNG_DOMAIN_UST, session);
-                       if (ret < 0) {
-                               ret = app->bits_per_long == 32 ?
-                                               -LTTNG_ERR_UST_CONSUMER32_FAIL :
-                                               -LTTNG_ERR_UST_CONSUMER64_FAIL;
-                               goto error;
-                       }
 
                        /* Rotate the data channels. */
                        cds_lfht_for_each_entry(ua_sess->channels->ht, &chan_iter.iter,
                                        ua_chan, node.node) {
-                               ret = rotate_add_channel_pending(
-                                               ua_chan->key, LTTNG_DOMAIN_UST,
-                                               session);
-                               if (ret < 0) {
-                                       ret = app->bits_per_long == 32 ?
-                                                       -LTTNG_ERR_UST_CONSUMER32_FAIL :
-                                                       -LTTNG_ERR_UST_CONSUMER64_FAIL;
-                                       goto error;
-                               }
                                ret = consumer_rotate_channel(socket, ua_chan->key,
                                                ua_sess->euid, ua_sess->egid,
                                                ua_sess->consumer, pathname,
                                                /* is_metadata_channel */ false,
-                                               session->current_archive_id,
-                                               &session->rotate_pending_relay);
+                                               session->current_archive_id);
                                if (ret < 0) {
                                        goto error;
                                }
@@ -6502,12 +6451,10 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active)
                                        ua_sess->euid, ua_sess->egid,
                                        ua_sess->consumer, pathname,
                                        /* is_metadata_channel */ true,
-                                       session->current_archive_id,
-                                       &session->rotate_pending_relay);
+                                       session->current_archive_id);
                        if (ret < 0) {
                                goto error;
                        }
-                       *ust_active = true;
                }
                break;
        }
This page took 0.025693 seconds and 4 git commands to generate.