/*
- * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
+ * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2 only,
- * as published by the Free Software Foundation.
+ * SPDX-License-Identifier: GPL-2.0-only
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#define _LGPL_SOURCE
#include <common/common.h>
#include <common/defaults.h>
#include <common/trace-chunk.h>
+#include <common/macros.h>
#include "consumer.h"
#include "trace-kernel.h"
lks->metadata = NULL;
CDS_INIT_LIST_HEAD(&lks->channel_list.head);
- lks->tracker_list_pid = lttng_tracker_list_create();
- if (!lks->tracker_list_pid) {
+ lks->tracker_pid = process_attr_tracker_create();
+ if (!lks->tracker_pid) {
goto error;
}
- lks->tracker_list_vpid = lttng_tracker_list_create();
- if (!lks->tracker_list_vpid) {
+ lks->tracker_vpid = process_attr_tracker_create();
+ if (!lks->tracker_vpid) {
goto error;
}
- lks->tracker_list_uid = lttng_tracker_list_create();
- if (!lks->tracker_list_uid) {
+ lks->tracker_uid = process_attr_tracker_create();
+ if (!lks->tracker_uid) {
goto error;
}
- lks->tracker_list_vuid = lttng_tracker_list_create();
- if (!lks->tracker_list_vuid) {
+ lks->tracker_vuid = process_attr_tracker_create();
+ if (!lks->tracker_vuid) {
goto error;
}
- lks->tracker_list_gid = lttng_tracker_list_create();
- if (!lks->tracker_list_gid) {
+ lks->tracker_gid = process_attr_tracker_create();
+ if (!lks->tracker_gid) {
goto error;
}
- lks->tracker_list_vgid = lttng_tracker_list_create();
- if (!lks->tracker_list_vgid) {
+ lks->tracker_vgid = process_attr_tracker_create();
+ if (!lks->tracker_vgid) {
goto error;
}
lks->consumer = consumer_create_output(CONSUMER_DST_LOCAL);
return lks;
error:
- lttng_tracker_list_destroy(lks->tracker_list_pid);
- lttng_tracker_list_destroy(lks->tracker_list_vpid);
- lttng_tracker_list_destroy(lks->tracker_list_uid);
- lttng_tracker_list_destroy(lks->tracker_list_vuid);
- lttng_tracker_list_destroy(lks->tracker_list_gid);
- lttng_tracker_list_destroy(lks->tracker_list_vgid);
+ process_attr_tracker_destroy(lks->tracker_pid);
+ process_attr_tracker_destroy(lks->tracker_vpid);
+ process_attr_tracker_destroy(lks->tracker_uid);
+ process_attr_tracker_destroy(lks->tracker_vuid);
+ process_attr_tracker_destroy(lks->tracker_gid);
+ process_attr_tracker_destroy(lks->tracker_vgid);
free(lks);
alloc_error:
*/
struct ltt_kernel_metadata *trace_kernel_create_metadata(void)
{
+ int ret;
struct ltt_kernel_metadata *lkm;
struct lttng_channel *chan;
goto error;
}
+ ret = lttng_strncpy(
+ chan->name, DEFAULT_METADATA_NAME, sizeof(chan->name));
+ if (ret) {
+ ERR("Failed to initialize metadata channel name to `%s`",
+ DEFAULT_METADATA_NAME);
+ goto error;
+ }
+
/* Set default attributes */
- chan->attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
+ chan->attr.overwrite = DEFAULT_METADATA_OVERWRITE;
chan->attr.subbuf_size = default_get_metadata_subbuf_size();
chan->attr.num_subbuf = DEFAULT_METADATA_SUBBUF_NUM;
- chan->attr.switch_timer_interval = DEFAULT_KERNEL_CHANNEL_SWITCH_TIMER;
- chan->attr.read_timer_interval = DEFAULT_KERNEL_CHANNEL_READ_TIMER;
- chan->attr.output = DEFAULT_KERNEL_CHANNEL_OUTPUT;
+ chan->attr.switch_timer_interval = DEFAULT_METADATA_SWITCH_TIMER;
+ chan->attr.read_timer_interval = DEFAULT_METADATA_READ_TIMER;;
+
+
+ /*
+ * The metadata channel of kernel sessions must use the "mmap"
+ * back-end since the consumer daemon accumulates complete
+ * metadata units before sending them to the relay daemon in
+ * live mode. The consumer daemon also needs to extract the contents
+ * of the metadata cache when computing a rotation position.
+ *
+ * In both cases, it is not possible to rely on the splice
+ * back-end as the consumer daemon may need to accumulate more
+ * content than can be backed by the ring buffer's underlying
+ * pages.
+ */
+ chan->attr.output = LTTNG_EVENT_MMAP;
+ chan->attr.tracefile_size = 0;
+ chan->attr.tracefile_count = 0;
+ chan->attr.live_timer_interval = 0;
/* Init metadata */
lkm->fd = -1;
/* Wipe consumer output object */
consumer_output_put(session->consumer);
- lttng_tracker_list_destroy(session->tracker_list_pid);
- lttng_tracker_list_destroy(session->tracker_list_vpid);
- lttng_tracker_list_destroy(session->tracker_list_uid);
- lttng_tracker_list_destroy(session->tracker_list_vuid);
- lttng_tracker_list_destroy(session->tracker_list_gid);
- lttng_tracker_list_destroy(session->tracker_list_vgid);
+ process_attr_tracker_destroy(session->tracker_pid);
+ process_attr_tracker_destroy(session->tracker_vpid);
+ process_attr_tracker_destroy(session->tracker_uid);
+ process_attr_tracker_destroy(session->tracker_vuid);
+ process_attr_tracker_destroy(session->tracker_gid);
+ process_attr_tracker_destroy(session->tracker_vgid);
free(session);
}