Move stream file rotation functions to utils
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index 9d75d3f09cfc9ada6f30503a6c7ddfe306366809..bc3ddc930cf1cb8a10d0cd03b9150a4385c15bed 100644 (file)
@@ -35,6 +35,7 @@
 #include <common/sessiond-comm/relayd.h>
 #include <common/compat/fcntl.h>
 #include <common/relayd/relayd.h>
+#include <common/utils.h>
 
 #include "kernel-consumer.h"
 
@@ -128,11 +129,13 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                        goto end_nosignal;
                }
 
-               DBG("consumer_add_channel %d", msg.u.channel.channel_key);
+               DBG("consumer_add_channel %" PRIu64, msg.u.channel.channel_key);
                new_channel = consumer_allocate_channel(msg.u.channel.channel_key,
                                msg.u.channel.session_id, msg.u.channel.pathname,
                                msg.u.channel.name, msg.u.channel.uid, msg.u.channel.gid,
-                               msg.u.channel.relayd_id, msg.u.channel.output);
+                               msg.u.channel.relayd_id, msg.u.channel.output,
+                               msg.u.channel.tracefile_size,
+                               msg.u.channel.tracefile_count);
                if (new_channel == NULL) {
                        lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_OUTFD_ERROR);
                        goto end_nosignal;
@@ -153,12 +156,12 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                if (ctx->on_recv_channel != NULL) {
                        ret = ctx->on_recv_channel(new_channel);
                        if (ret == 0) {
-                               consumer_add_channel(new_channel);
+                               consumer_add_channel(new_channel, ctx);
                        } else if (ret < 0) {
                                goto end_nosignal;
                        }
                } else {
-                       consumer_add_channel(new_channel);
+                       consumer_add_channel(new_channel, ctx);
                }
                goto end_nosignal;
        }
@@ -180,7 +183,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                         * We could not find the channel. Can happen if cpu hotplug
                         * happens while tearing down.
                         */
-                       ERR("Unable to find channel key %d", msg.u.stream.channel_key);
+                       ERR("Unable to find channel key %" PRIu64, msg.u.stream.channel_key);
                        ret_code = LTTNG_ERR_KERN_CHAN_NOT_FOUND;
                }
 
@@ -265,8 +268,8 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
                                consumer_del_stream(new_stream, NULL);
                                goto end_nosignal;
                        }
-               } else if (new_stream->net_seq_idx != -1) {
-                       ERR("Network sequence index %d unknown. Not adding stream.",
+               } else if (new_stream->net_seq_idx != (uint64_t) -1ULL) {
+                       ERR("Network sequence index %" PRIu64 " unknown. Not adding stream.",
                                        new_stream->net_seq_idx);
                        consumer_del_stream(new_stream, NULL);
                        goto end_nosignal;
@@ -464,8 +467,8 @@ ssize_t lttng_kconsumer_read_subbuffer(struct lttng_consumer_stream *stream,
                 * network streaming or the full padding (len) size when we are _not_
                 * streaming.
                 */
-               if ((ret != subbuf_size && stream->net_seq_idx != -1) ||
-                               (ret != len && stream->net_seq_idx == -1)) {
+               if ((ret != subbuf_size && stream->net_seq_idx != (uint64_t) -1ULL) ||
+                               (ret != len && stream->net_seq_idx == (uint64_t) -1ULL)) {
                        /*
                         * Display the error but continue processing to try to release the
                         * subbuffer
@@ -501,26 +504,19 @@ end:
 int lttng_kconsumer_on_recv_stream(struct lttng_consumer_stream *stream)
 {
        int ret;
-       char full_path[PATH_MAX];
 
        assert(stream);
 
-       ret = snprintf(full_path, sizeof(full_path), "%s/%s",
-                       stream->chan->pathname, stream->name);
-       if (ret < 0) {
-               PERROR("snprintf on_recv_stream");
-               goto error;
-       }
-
-       /* Opening the tracefile in write mode */
-       if (stream->net_seq_idx == -1) {
-               ret = run_as_open(full_path, O_WRONLY | O_CREAT | O_TRUNC,
-                               S_IRWXU|S_IRWXG|S_IRWXO, stream->uid, stream->gid);
+       /* Don't create anything if this is set for streaming. */
+       if (stream->net_seq_idx == (uint64_t) -1ULL) {
+               ret = utils_create_stream_file(stream->chan->pathname, stream->name,
+                               stream->chan->tracefile_size, stream->tracefile_count_current,
+                               stream->uid, stream->gid);
                if (ret < 0) {
-                       PERROR("open kernel stream path %s", full_path);
                        goto error;
                }
                stream->out_fd = ret;
+               stream->tracefile_size_current = 0;
        }
 
        if (stream->output == LTTNG_EVENT_MMAP) {
This page took 0.024491 seconds and 4 git commands to generate.