Implement snapshot commands in lttng-sessiond
[lttng-tools.git] / src / bin / lttng-sessiond / kernel-consumer.c
index 837afdc8333faf71de79dfe56bbff31ae44a236a..044b1a81f58f19540a527370beadade74a6f297c 100644 (file)
@@ -26,6 +26,7 @@
 #include <common/defaults.h>
 
 #include "consumer.h"
+#include "health.h"
 #include "kernel-consumer.h"
 
 /*
@@ -53,7 +54,7 @@ int kernel_consumer_add_channel(struct consumer_socket *sock,
        /* Get the right path name destination */
        if (consumer->type == CONSUMER_DST_LOCAL) {
                /* Set application path to the destination path */
-               ret = snprintf(tmp_path, sizeof(tmp_path), "%s/%s",
+               ret = snprintf(tmp_path, sizeof(tmp_path), "%s%s",
                                consumer->dst.trace_path, consumer->subdir);
                if (ret < 0) {
                        PERROR("snprintf metadata path");
@@ -93,7 +94,9 @@ int kernel_consumer_add_channel(struct consumer_socket *sock,
                        channel->channel->name,
                        channel->stream_count,
                        channel->channel->attr.output,
-                       CONSUMER_CHANNEL_TYPE_DATA);
+                       CONSUMER_CHANNEL_TYPE_DATA,
+                       channel->channel->attr.tracefile_size,
+                       channel->channel->attr.tracefile_count);
 
        health_code_update();
 
@@ -112,7 +115,7 @@ error:
  * Sending metadata to the consumer with command ADD_CHANNEL and ADD_STREAM.
  */
 int kernel_consumer_add_metadata(struct consumer_socket *sock,
-               struct ltt_kernel_session *session)
+               struct ltt_kernel_session *session, int no_monitor)
 {
        int ret;
        char tmp_path[PATH_MAX];
@@ -133,7 +136,7 @@ int kernel_consumer_add_metadata(struct consumer_socket *sock,
        /* Get the right path name destination */
        if (consumer->type == CONSUMER_DST_LOCAL) {
                /* Set application path to the destination path */
-               ret = snprintf(tmp_path, sizeof(tmp_path), "%s/%s",
+               ret = snprintf(tmp_path, sizeof(tmp_path), "%s%s",
                                consumer->dst.trace_path, consumer->subdir);
                if (ret < 0) {
                        PERROR("snprintf metadata path");
@@ -173,7 +176,8 @@ int kernel_consumer_add_metadata(struct consumer_socket *sock,
                        DEFAULT_METADATA_NAME,
                        1,
                        DEFAULT_KERNEL_CHANNEL_OUTPUT,
-                       CONSUMER_CHANNEL_TYPE_METADATA);
+                       CONSUMER_CHANNEL_TYPE_METADATA,
+                       0, 0);
 
        health_code_update();
 
@@ -189,7 +193,15 @@ int kernel_consumer_add_metadata(struct consumer_socket *sock,
                        LTTNG_CONSUMER_ADD_STREAM,
                        session->metadata->fd,
                        session->metadata_stream_fd,
-                       0);     /* CPU: 0 for metadata. */
+                       0); /* CPU: 0 for metadata. */
+
+       /*
+        * Set the no monitor flag. If set to 1, it indicates the consumer to NOT
+        * monitor the stream but rather add it to a special list in the associated
+        * channel. This is used to handle ephemeral stream used by the snapshot
+        * command or store streams for the flight recorder mode.
+        */
+       lkm.u.stream.no_monitor = no_monitor;
 
        health_code_update();
 
@@ -319,7 +331,7 @@ int kernel_consumer_send_session(struct consumer_socket *sock,
        DBG("Sending session stream to kernel consumer");
 
        if (session->metadata_stream_fd >= 0) {
-               ret = kernel_consumer_add_metadata(sock, session);
+               ret = kernel_consumer_add_metadata(sock, session, 0);
                if (ret < 0) {
                        goto error;
                }
This page took 0.024646 seconds and 4 git commands to generate.