Implement snapshot commands in lttng-sessiond
[lttng-tools.git] / src / bin / lttng-sessiond / kernel-consumer.c
index 3368da6c1ba8a5d6e2c89ac09d0679793fc04867..044b1a81f58f19540a527370beadade74a6f297c 100644 (file)
@@ -54,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");
@@ -94,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();
 
@@ -113,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];
@@ -134,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");
@@ -174,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();
 
@@ -190,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();
 
@@ -320,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.024973 seconds and 4 git commands to generate.