send the rotate pending to the relay
authorJulien Desfossez <jdesfossez@efficios.com>
Fri, 8 Sep 2017 19:06:55 +0000 (15:06 -0400)
committerJulien Desfossez <jdesfossez@efficios.com>
Fri, 8 Sep 2017 19:06:55 +0000 (15:06 -0400)
Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
19 files changed:
src/bin/lttng-sessiond/cmd.c
src/bin/lttng-sessiond/consumer.c
src/bin/lttng-sessiond/consumer.h
src/bin/lttng-sessiond/kernel.c
src/bin/lttng-sessiond/rotate.c
src/bin/lttng-sessiond/rotate.h
src/bin/lttng-sessiond/rotation-thread.c
src/bin/lttng-sessiond/session.c
src/bin/lttng-sessiond/session.h
src/bin/lttng-sessiond/ust-app.c
src/bin/lttng-sessiond/ust-app.h
src/common/consumer/consumer.c
src/common/consumer/consumer.h
src/common/kernel-consumer/kernel-consumer.c
src/common/relayd/relayd.c
src/common/relayd/relayd.h
src/common/sessiond-comm/relayd.h
src/common/sessiond-comm/sessiond-comm.h
src/common/ust-consumer/ust-consumer.c

index a69eb531cc024689f392bbc99187c1edfb317c4c..88f33c1568a77b21630f57d9486deafd61536763 100644 (file)
@@ -4205,7 +4205,7 @@ int cmd_rotate_session(struct ltt_session *session,
        }
 
        session->rotate_count++;
-       session->rotate_pending = 1;
+       session->rotate_pending = true;
        session->rotate_status = LTTNG_ROTATE_STARTED;
 
        /*
@@ -4300,6 +4300,39 @@ int cmd_rotate_pending(struct ltt_session *session,
        } else if (session->rotate_status == LTTNG_ROTATE_EMPTY) {
                DBG("Nothing to rotate");
                (*pending_return)->status = LTTNG_ROTATE_EMPTY;
+       /* Rotate with a relay */
+       } else if (session->rotate_pending_relay) {
+               /* The consumer has not finished the rotation. */
+               if (session->rotate_pending) {
+                       DBG("Session %s, rotate_id %" PRIu64 " still pending",
+                                       session->name, session->rotate_count);
+                       (*pending_return)->status = LTTNG_ROTATE_STARTED;
+               } else {
+                       /*
+                        * The consumer finished the rotation, but we don't
+                        * know if the relay still has data pending. We need
+                        * to find one consumer_output to talk to the relay
+                        * and ask it.
+                        */
+                       ret = relay_rotate_pending(session);
+                       if (ret == 0) {
+                               DBG("Rotate completed on the relay for session %s"
+                                               ", rotate_id %" PRIu64,
+                                               session->name,
+                                               session->rotate_count);
+                               (*pending_return)->status = LTTNG_ROTATE_COMPLETED;
+                               snprintf((*pending_return)->output_path, PATH_MAX, "%s",
+                                               session->rotation_chunk.current_rotate_path);
+                       } else if (ret == 1) {
+                               DBG("Session %s, rotate_id %" PRIu64 " still pending "
+                                               "on the relay",
+                                               session->name, session->rotate_count);
+                               (*pending_return)->status = LTTNG_ROTATE_STARTED;
+                       } else {
+                               ERR("Failed to check rotate pending on the relay");
+                               (*pending_return)->status = LTTNG_ROTATE_ERROR;
+                       }
+               }
        } else if (session->rotate_pending) {
                DBG("Session %s, rotate_id %" PRIu64 " still pending",
                                session->name, session->rotate_count);
index 537090b70709f855541cc635dcae2d3b5aff71f0..f901466f8d96e9f35590506b829e436a4d9bcd03 100644 (file)
@@ -1601,7 +1601,8 @@ end:
  */
 int consumer_rotate_channel(struct consumer_socket *socket, uint64_t key,
                uid_t uid, gid_t gid, struct consumer_output *output,
-               char *app_pathname, uint32_t metadata, uint64_t new_chunk_id)
+               char *app_pathname, uint32_t metadata, uint64_t new_chunk_id,
+               bool *rotate_pending_relay)
 {
        int ret;
        struct lttcomm_consumer_msg msg;
@@ -1625,6 +1626,7 @@ int consumer_rotate_channel(struct consumer_socket *socket, uint64_t key,
                                output->dst.net.base_dir,
                                output->chunk_path, app_pathname);
                fprintf(stderr, "SENDING: %s\n", msg.u.rotate_channel.pathname);
+               *rotate_pending_relay = true;
        } else {
                msg.u.rotate_channel.relayd_id = (uint64_t) -1ULL;
                snprintf(msg.u.rotate_channel.pathname, PATH_MAX, "%s%s%s",
@@ -1664,9 +1666,6 @@ int consumer_rotate_rename(struct consumer_socket *socket, uint64_t session_id,
        msg.u.rotate_rename.gid = gid;
        snprintf(msg.u.rotate_rename.current_path, PATH_MAX, "%s", current_path);
        snprintf(msg.u.rotate_rename.new_path, PATH_MAX, "%s", new_path);
-       fprintf(stderr, "rotate rename from %s to %s\n", current_path,
-                       new_path);
-
 
        if (output->type == CONSUMER_DST_NET) {
                msg.u.rotate_rename.relayd_id = output->net_seq_index;
@@ -1675,15 +1674,59 @@ int consumer_rotate_rename(struct consumer_socket *socket, uint64_t session_id,
        }
 
        health_code_update();
-       fprintf(stderr, "send %d to the consumer\n",
-                       LTTNG_CONSUMER_ROTATE_RENAME);
+       ret = consumer_send_msg(socket, &msg);
+       if (ret < 0) {
+               goto error;
+       }
 
-       ret = 0;
+error:
+       health_code_update();
+       return ret;
+}
+
+/*
+ * Ask the relay if a rotation is still pending. Must be called with the socket
+ * lock held.
+ *
+ * Return 1 if the rotation is still pending, 0 if finished, a negative value
+ * on error.
+ */
+int consumer_rotate_pending_relay(struct consumer_socket *socket,
+               struct consumer_output *output, uint64_t session_id,
+               uint64_t chunk_id)
+{
+       int ret;
+       struct lttcomm_consumer_msg msg;
+       int32_t ret_code = 0;
+
+       assert(socket);
+
+       DBG("Consumer rotate pending on relay for session %" PRIu64, session_id);
+       assert(output->type == CONSUMER_DST_NET);
+
+       memset(&msg, 0, sizeof(msg));
+       msg.cmd_type = LTTNG_CONSUMER_ROTATE_PENDING_RELAY;
+       msg.u.rotate_pending_relay.session_id = session_id;
+       msg.u.rotate_pending_relay.relayd_id = output->net_seq_index;
+       msg.u.rotate_pending_relay.chunk_id = chunk_id;
+
+       health_code_update();
        ret = consumer_send_msg(socket, &msg);
        if (ret < 0) {
                goto error;
        }
 
+       /*
+        * No need for a recv reply status because the answer to the command is
+        * the reply status message.
+        */
+       ret = consumer_socket_recv(socket, &ret_code, sizeof(ret_code));
+       if (ret < 0) {
+               goto error;
+       }
+
+       ret = ret_code;
+
 error:
        health_code_update();
        return ret;
index ae303222e1891f4317506d1e7a562a0a779161a1..60f84a5fa839b7cb558df0507aae43e45df0ac99 100644 (file)
@@ -326,9 +326,13 @@ int consumer_snapshot_channel(struct consumer_socket *socket, uint64_t key,
 
 int consumer_rotate_channel(struct consumer_socket *socket, uint64_t key,
                uid_t uid, gid_t gid, struct consumer_output *output,
-               char *tmp, uint32_t metadata, uint64_t new_chunk_id);
+               char *tmp, uint32_t metadata, uint64_t new_chunk_id,
+               bool *rotate_pending_relay);
 int consumer_rotate_rename(struct consumer_socket *socket, uint64_t session_id,
                struct consumer_output *output, char *current_path, char *new_path,
                uid_t uid, gid_t gid);
+int consumer_rotate_pending_relay(struct consumer_socket *socket, 
+               struct consumer_output *output, uint64_t session_id,
+               uint64_t chunk_id);
 
 #endif /* _CONSUMER_H */
index 43fc935536612bf5af9287cc32bac4c45d4010b7..10ddabdbc641aa28d5f45646d811b3fdb40d4c58 100644 (file)
@@ -1179,8 +1179,8 @@ int kernel_rotate_session(struct ltt_session *session)
 
                        ret = consumer_rotate_channel(socket, chan->fd,
                                        ksess->uid, ksess->gid, ksess->consumer,
-                                       "", 0,
-                                       session->rotate_count);
+                                       "", 0, session->rotate_count,
+                                       &session->rotate_pending_relay);
                        if (ret < 0) {
                                ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
                                pthread_mutex_unlock(socket->lock);
@@ -1196,7 +1196,8 @@ int kernel_rotate_session(struct ltt_session *session)
                pthread_mutex_lock(socket->lock);
                ret = consumer_rotate_channel(socket, ksess->metadata->fd,
                                ksess->uid, ksess->gid, ksess->consumer, "", 1,
-                               session->rotate_count);
+                               session->rotate_count,
+                               &session->rotate_pending_relay);
                if (ret < 0) {
                        ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
                        pthread_mutex_unlock(socket->lock);
index d99e2d9ff6a5beaab6dd483b8cb53670f7d2033b..498a3b67e0e2c564fb15fe48d97788783d94ab21 100644 (file)
@@ -195,12 +195,6 @@ int rename_complete_chunk(struct ltt_session *session, time_t ts)
        char *new_path = NULL;
        int ret;
 
-       /*
-        * TODO 2: on first rotate, the current_rotate_path is the session root
-        * path, so move the kernel/ and ust/ folders inside the
-        * "session->last_chunk_start_ts-now()"
-        */
-
        timeinfo = localtime(&ts);
        strftime(datetime, sizeof(datetime), "%Y%m%d-%H%M%S", timeinfo);
 
@@ -301,3 +295,59 @@ end:
        return ret;
 }
 
+int relay_rotate_pending(struct ltt_session *session)
+{
+       int ret;
+       struct consumer_socket *socket;
+       struct consumer_output *output;
+       struct lttng_ht_iter iter;
+
+       /*
+        * Either one of the sessions is enough to find the consumer_output
+        * and uid/gid.
+        */
+       if (session->kernel_session) {
+               output = session->kernel_session->consumer;
+       } else if (session->ust_session) {
+               output = session->ust_session->consumer;
+       } else {
+               assert(0);
+       }
+
+       if (!output || !output->socks) {
+               ERR("No consumer output found");
+               ret = -1;
+               goto end;
+       }
+
+       rcu_read_lock();
+       /*
+        * We have to iterate to find a socket, but we only need to send the
+        * rotate pending command to one consumer, so we break after the first
+        * one.
+        */
+       cds_lfht_for_each_entry(output->socks->ht, &iter.iter, socket, node.node) {
+               pthread_mutex_lock(socket->lock);
+               /*
+                * (rotate_count - 1) is the chunk id that we want to make sure
+                * is completely flushed to disk on the relay.
+                */
+               ret = consumer_rotate_pending_relay(socket, output, session->id,
+                               session->rotate_count - 1);
+               pthread_mutex_unlock(socket->lock);
+               if (ret) {
+                       ERR("Consumer rename chunk");
+                       ret = -1;
+                       rcu_read_unlock();
+                       goto end;
+               }
+               break;
+       }
+       rcu_read_unlock();
+
+       ret = 0;
+
+end:
+       return ret;
+}
+
index 397a161e096edb81c99135e40240eef6e7de25b7..652ff4d3ec89c531c3b032389b708347a07d88ff 100644 (file)
@@ -32,4 +32,6 @@ int session_rename_chunk(struct ltt_session *session, char *current_path,
 
 int rename_complete_chunk(struct ltt_session *session, time_t ts);
 
+int relay_rotate_pending(struct ltt_session *session);
+
 #endif /* ROTATE_H */
index 3269f71a16efe3a553b8c48e02bcfc3c70b09117..24c9715a167e50c11cc0af54f8df51282ca9d7ce 100644 (file)
@@ -323,7 +323,7 @@ int handle_channel_rotation_pipe(int fd, uint32_t revents,
                        ERR("Failed to rename completed rotation chunk");
                        goto end;
                }
-               channel_info->session->rotate_pending = 0;
+               channel_info->session->rotate_pending = false;
        }
 
        channel_rotation_info_destroy(channel_info);
index 5a10340a71ab28d67285010cc7a9e311d4b018e9..f6e8ab07146c92f8bc97088aa8e6f5444663aaf2 100644 (file)
@@ -400,6 +400,9 @@ int session_create(char *name, uid_t uid, gid_t gid)
                goto error;
        }
 
+       new_session->rotate_pending = false;
+       new_session->rotate_pending_relay = false;
+
        /* Add new session to the session list */
        session_lock_list();
        new_session->id = add_session_list(new_session);
index 41a894079e5244b131b9c6cc76c1f18c9f8bfd5b..25f0927f7c0879e42a2b8e14d8c196fd715e5854 100644 (file)
@@ -135,14 +135,13 @@ struct ltt_session {
         * Number of session rotation for this session.
         */
        uint64_t rotate_count;
-       unsigned int rotate_pending:1;
+       bool rotate_pending;
+       bool rotate_pending_relay;
        enum lttng_rotate_status rotate_status;
        /*
         * Number of channels waiting for a rotate.
         * When this number reaches 0, we can handle the rename of the chunk
         * folder and inform the client that the rotate is finished.
-        *
-        * TODO: replace rotate_pending checks by that.
         */
        unsigned int nr_chan_rotate_pending;
        struct ltt_session_chunk rotation_chunk;
index 2283f980ae079c53c483f5c9f11e58aa4600b099..cc42e250be41f3a1bf03932c6ab20c6a7452cece 100644 (file)
@@ -6360,7 +6360,8 @@ int ust_app_rotate_session(struct ltt_session *session)
                                                reg_chan->consumer_key,
                                                usess->uid, usess->gid,
                                                usess->consumer, pathname, 0,
-                                               session->rotate_count);
+                                               session->rotate_count,
+                                               &session->rotate_pending_relay);
                                if (ret < 0) {
                                        goto error;
                                }
@@ -6372,7 +6373,8 @@ int ust_app_rotate_session(struct ltt_session *session)
                                        reg->registry->reg.ust->metadata_key,
                                        usess->uid, usess->gid,
                                        usess->consumer, pathname, 1,
-                                       session->rotate_count);
+                                       session->rotate_count,
+                                       &session->rotate_pending_relay);
                        if (ret < 0) {
                                goto error;
                        }
@@ -6444,7 +6446,8 @@ int ust_app_rotate_session(struct ltt_session *session)
                                ret = consumer_rotate_channel(socket, ua_chan->key,
                                                ua_sess->euid, ua_sess->egid,
                                                ua_sess->consumer, pathname, 0,
-                                               session->rotate_count);
+                                               session->rotate_count,
+                                               &session->rotate_pending_relay);
                                if (ret < 0) {
                                        goto error;
                                }
@@ -6455,7 +6458,8 @@ int ust_app_rotate_session(struct ltt_session *session)
                        ret = consumer_rotate_channel(socket, registry->metadata_key,
                                        ua_sess->euid, ua_sess->egid,
                                        ua_sess->consumer, pathname, 1,
-                                       session->rotate_count);
+                                       session->rotate_count,
+                                       &session->rotate_pending_relay);
                        if (ret < 0) {
                                goto error;
                        }
@@ -6468,7 +6472,7 @@ int ust_app_rotate_session(struct ltt_session *session)
        }
 
        if (nr_app == 0 && nr_channels == 0) {
-               session->rotate_pending = 0;
+               session->rotate_pending = false;
                session->rotate_status = LTTNG_ROTATE_EMPTY;
        }
 
index 9e5a037a34011674b6ee9a921698f021d71e8042..53e88c26eba7d2d929caf4657a7efb36a8836e7c 100644 (file)
@@ -593,6 +593,12 @@ int ust_app_rotate_session(struct ltt_session *session)
 {
        return 0;
 }
+
+static inline
+int ust_app_relay_rotate_pending(struct ltt_session *session)
+{
+       return 0;
+}
 #endif /* HAVE_LIBLTTNG_UST_CTL */
 
 #endif /* _LTT_UST_APP_H */
index f8b25665f1df4ae83279a9801d8e54ca52b2eded..c6fce97774f4888d22738d6661832fd90c6bb4e7 100644 (file)
@@ -4348,3 +4348,23 @@ int lttng_consumer_rotate_rename(char *current_path, char *new_path,
                return rotate_rename_local(current_path, new_path, uid, gid);
        }
 }
+
+int lttng_consumer_rotate_pending_relay(uint64_t session_id,
+               uint64_t relayd_id, uint64_t chunk_id)
+{
+       int ret;
+       struct consumer_relayd_sock_pair *relayd;
+
+       relayd = consumer_find_relayd(relayd_id);
+       if (!relayd) {
+               ERR("Failed to find relayd");
+               ret = -1;
+               goto end;
+       }
+
+       ret = relayd_rotate_pending(&relayd->control_sock, chunk_id);
+
+end:
+       return ret;
+
+}
index 63254007af65bf912e38418848275f2c727ab7a3..0ee937c7a488053e3df5e2b06571c6538857392e 100644 (file)
@@ -65,6 +65,7 @@ enum lttng_consumer_command {
        LTTNG_CONSUMER_SET_CHANNEL_ROTATE_PIPE,
        LTTNG_CONSUMER_ROTATE_CHANNEL,
        LTTNG_CONSUMER_ROTATE_RENAME,
+       LTTNG_CONSUMER_ROTATE_PENDING_RELAY,
 };
 
 /* State of each fd in consumer */
@@ -834,6 +835,8 @@ int lttng_consumer_rotate_ready_streams(uint64_t key,
                struct lttng_consumer_local_data *ctx);
 int lttng_consumer_rotate_rename(char *current_path, char *new_path,
                uid_t uid, gid_t gid, uint64_t relayd_id);
+int lttng_consumer_rotate_pending_relay( uint64_t session_id,
+               uint64_t relayd_id, uint64_t chunk_id);
 void lttng_consumer_reset_stream_rotate_state(struct lttng_consumer_stream *stream);
 
 #endif /* LIB_CONSUMER_H */
index 4fb586c085f8f0fb6d439cdabecb941b9fb276d3..91722f3a32a58a11c0a0135dbb80ca4feff7f934 100644 (file)
@@ -1193,6 +1193,28 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                        goto end_nosignal;
                }
 
+       }
+       case LTTNG_CONSUMER_ROTATE_PENDING_RELAY:
+       {
+               DBG("Consumer rotate pending on relay for session %" PRIu64,
+                               msg.u.rotate_pending_relay.session_id);
+               ret = lttng_consumer_rotate_pending_relay(
+                               msg.u.rotate_pending_relay.session_id,
+                               msg.u.rotate_pending_relay.relayd_id,
+                               msg.u.rotate_pending_relay.chunk_id);
+               if (ret < 0) {
+                       ERR("Rotate pending relay failed");
+                       ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
+               }
+
+               health_code_update();
+
+               ret = consumer_send_status_msg(sock, ret_code);
+               if (ret < 0) {
+                       /* Somehow, the session daemon is not responding anymore. */
+                       goto end_nosignal;
+               }
+
        }
        default:
                goto end_nosignal;
index ed8136193927145dcad5b9fb7232ebfe41ba5c1c..339ed85ab535080ee79320a59e20e534956b8bd8 100644 (file)
@@ -995,7 +995,7 @@ int relayd_rotate_stream(struct lttcomm_relayd_sock *rsock, uint64_t stream_id,
        msg.stream_id = htobe64(stream_id);
        msg.new_chunk_id = htobe64(new_chunk_id);
        /*
-        * the seq_num is invalid for metadata streams, but it is ignored on
+        * The seq_num is invalid for metadata streams, but it is ignored on
         * the relay.
         */
        msg.rotate_at_seq_num = htobe64(seq_num);
@@ -1087,3 +1087,47 @@ error:
        return ret;
 
 }
+
+int relayd_rotate_pending(struct lttcomm_relayd_sock *rsock, uint64_t chunk_id)
+{
+       int ret;
+       struct lttcomm_relayd_rotate_pending msg;
+       struct lttcomm_relayd_generic_reply reply;
+
+       /* Code flow error. Safety net. */
+       assert(rsock);
+
+       DBG("Relayd rotate pending");
+
+       memset(&msg, 0, sizeof(msg));
+       msg.chunk_id = htobe64(chunk_id);
+
+       /* Send command */
+       ret = send_command(rsock, RELAYD_ROTATE_PENDING, (void *) &msg, sizeof(msg), 0);
+       if (ret < 0) {
+               goto error;
+       }
+
+       /* Receive response */
+       ret = recv_reply(rsock, (void *) &reply, sizeof(reply));
+       if (ret < 0) {
+               goto error;
+       }
+
+       reply.ret_code = be32toh(reply.ret_code);
+
+       /* Return session id or negative ret code. */
+       if (reply.ret_code != LTTNG_OK) {
+               ret = -1;
+               ERR("Relayd rotate pending replied error %d", reply.ret_code);
+       } else {
+               /* Success */
+               ret = 0;
+       }
+
+       DBG("Relayd rotate pending completed successfully");
+
+error:
+       return ret;
+
+}
index f94a8e227aa339618fe9268bc1a7730f59d968a8..7b2553d57a703fdc64779f397728d0f01585411f 100644 (file)
@@ -56,5 +56,7 @@ int relayd_rotate_stream(struct lttcomm_relayd_sock *sock, uint64_t stream_id,
                const char *new_pathname, uint64_t new_chunk_id, uint64_t seq_num);
 int relayd_rotate_rename(struct lttcomm_relayd_sock *sock,
                const char *current_path, const char *new_path);
+int relayd_rotate_pending(struct lttcomm_relayd_sock *sock,
+               uint64_t chunk_id);
 
 #endif /* _RELAYD_H */
index 921ff182a87cdf18abb9aa18de2bf0ac235651a4..f6895ddcef0e2fbb376fa47b0e394584c51c9973 100644 (file)
@@ -219,4 +219,8 @@ struct lttcomm_relayd_rotate_rename {
        char new_path[LTTNG_PATH_MAX];
 } LTTNG_PACKED;
 
+struct lttcomm_relayd_rotate_pending {
+       uint64_t chunk_id;
+} LTTNG_PACKED;
+
 #endif /* _RELAYD_COMM */
index 5e045be455af7e97fdc234ba807298b5786d2e0e..404318bdaf55a348f6d6902de24aa24e4e827d31 100644 (file)
@@ -130,6 +130,8 @@ enum lttcomm_relayd_command {
        RELAYD_ROTATE_STREAM                = 18,
        /* Rename a chunk after the rotation is completed (2.11+) */
        RELAYD_ROTATE_RENAME                = 19,
+       /* Check if a chunk has data pending (2.11+) */
+       RELAYD_ROTATE_PENDING               = 20,
 };
 
 /*
@@ -556,10 +558,14 @@ struct lttcomm_consumer_msg {
                        char new_path[PATH_MAX];
                        uint64_t relayd_id; /* Relayd id if apply. */
                        uint64_t session_id;
-                       uint32_t create; /* Create new_path before move. */
                        uint32_t uid;
                        uint32_t gid;
                } LTTNG_PACKED rotate_rename;
+               struct {
+                       uint64_t relayd_id;
+                       uint64_t session_id;
+                       uint64_t chunk_id;
+               } LTTNG_PACKED rotate_pending_relay;
        } u;
 } LTTNG_PACKED;
 
index 2a02568b0dd74b328743fa36ccdc7559e3885cd4..0c022ade7e9eaa60798ceffebd450270a5799f5a 100644 (file)
@@ -1991,6 +1991,28 @@ int lttng_ustconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                        goto end_nosignal;
                }
 
+       }
+       case LTTNG_CONSUMER_ROTATE_PENDING_RELAY:
+       {
+               DBG("Consumer rotate pending on relay for session %" PRIu64,
+                               msg.u.rotate_pending_relay.session_id);
+               ret = lttng_consumer_rotate_pending_relay(
+                               msg.u.rotate_pending_relay.session_id,
+                               msg.u.rotate_pending_relay.relayd_id,
+                               msg.u.rotate_pending_relay.chunk_id);
+               if (ret < 0) {
+                       ERR("Rotate pending relay failed");
+                       ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
+               }
+
+               health_code_update();
+
+               ret = consumer_send_status_msg(sock, ret_code);
+               if (ret < 0) {
+                       /* Somehow, the session daemon is not responding anymore. */
+                       goto end_nosignal;
+               }
+
        }
        default:
                break;
This page took 0.044422 seconds and 5 git commands to generate.