*/
#include <glib.h>
-#include <stdbool.h>
#include <stdio.h>
#include <babeltrace2/babeltrace.h>
-#define BT_COMP_LOG_SELF_COMP (fs_sink->self_comp)
-#define BT_LOG_OUTPUT_LEVEL (fs_sink->log_level)
-#define BT_LOG_TAG "PLUGIN/SINK.CTF.FS"
-#include "logging/comp-logging.h"
-
#include "common/assert.h"
+#include "cpp-common/vendor/fmt/format.h"
#include "ctfser/ctfser.h"
#include "plugins/common/param-validation/param-validation.h"
#include "fs-sink-stream.hpp"
#include "fs-sink-trace.hpp"
#include "fs-sink.hpp"
-#include "translate-ctf-ir-to-tsdl.hpp"
#include "translate-trace-ir-to-ctf-ir.hpp"
static const char * const in_port_name = "in";
ret = g_mkdir_with_parents(fs_sink->output_dir_path->str, 0755);
if (ret) {
- BT_COMP_LOGE_APPEND_CAUSE_ERRNO(fs_sink->self_comp,
- "Cannot create directories for output directory",
- ": output-dir-path=\"%s\"", fs_sink->output_dir_path->str);
+ BT_CPPLOGE_ERRNO_APPEND_CAUSE_SPEC(
+ fs_sink->logger, "Cannot create directories for output directory",
+ ": output-dir-path=\"{}\"", fs_sink->output_dir_path->str);
status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
goto end;
}
bt_param_validation_validate(params, fs_sink_params_descr, &validation_error);
if (validation_status == BT_PARAM_VALIDATION_STATUS_VALIDATION_ERROR) {
status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "%s", validation_error);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "{}", validation_error);
goto end;
} else if (validation_status == BT_PARAM_VALIDATION_STATUS_MEMORY_ERROR) {
status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
}
BT_MESSAGE_ITERATOR_PUT_REF_AND_RESET(fs_sink->upstream_iter);
- g_free(fs_sink);
+ delete fs_sink;
end:
return;
bt_self_component_sink_configuration *,
const bt_value *params, void *)
{
- bt_component_class_initialize_method_status status;
- bt_self_component_add_port_status add_port_status;
- struct fs_sink_comp *fs_sink = NULL;
- bt_self_component *self_comp = bt_self_component_sink_as_self_component(self_comp_sink);
- bt_logging_level log_level =
- bt_component_get_logging_level(bt_self_component_as_component(self_comp));
-
- fs_sink = g_new0(struct fs_sink_comp, 1);
- if (!fs_sink) {
- BT_COMP_LOG_CUR_LVL(BT_LOG_ERROR, log_level, self_comp,
- "Failed to allocate one CTF FS sink structure.");
- BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_COMPONENT(
- self_comp, "Failed to allocate one CTF FS sink structure.");
- status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
- goto end;
- }
-
- fs_sink->log_level = log_level;
- fs_sink->self_comp = self_comp;
- fs_sink->output_dir_path = g_string_new(NULL);
- status = configure_component(fs_sink, params);
- if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
- /* configure_component() logs errors */
- goto end;
- }
+ try {
+ bt_component_class_initialize_method_status status;
+ bt_self_component_add_port_status add_port_status;
+ struct fs_sink_comp *fs_sink = NULL;
+ bt_self_component *self_comp = bt_self_component_sink_as_self_component(self_comp_sink);
+
+ fs_sink = new fs_sink_comp {bt2::SelfSinkComponent {self_comp_sink}};
+ fs_sink->output_dir_path = g_string_new(NULL);
+ status = configure_component(fs_sink, params);
+ if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
+ /* configure_component() logs errors */
+ goto end;
+ }
- if (fs_sink->assume_single_trace &&
- g_file_test(fs_sink->output_dir_path->str, G_FILE_TEST_EXISTS)) {
- BT_COMP_LOGE_APPEND_CAUSE(self_comp,
- "Single trace mode, but output path exists: output-path=\"%s\"",
- fs_sink->output_dir_path->str);
- status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
- goto end;
- }
+ if (fs_sink->assume_single_trace &&
+ g_file_test(fs_sink->output_dir_path->str, G_FILE_TEST_EXISTS)) {
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger, "Single trace mode, but output path exists: output-path=\"{}\"",
+ fs_sink->output_dir_path->str);
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
+ goto end;
+ }
- status = ensure_output_dir_exists(fs_sink);
- if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
- /* ensure_output_dir_exists() logs errors */
- goto end;
- }
+ status = ensure_output_dir_exists(fs_sink);
+ if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
+ /* ensure_output_dir_exists() logs errors */
+ goto end;
+ }
- fs_sink->traces = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL,
- (GDestroyNotify) fs_sink_trace_destroy);
- if (!fs_sink->traces) {
- BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Failed to allocate one GHashTable.");
- status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
- goto end;
- }
+ fs_sink->traces = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL,
+ (GDestroyNotify) fs_sink_trace_destroy);
+ if (!fs_sink->traces) {
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to allocate one GHashTable.");
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
+ goto end;
+ }
- add_port_status =
- bt_self_component_sink_add_input_port(self_comp_sink, in_port_name, NULL, NULL);
- if (add_port_status != BT_SELF_COMPONENT_ADD_PORT_STATUS_OK) {
- status = (bt_component_class_initialize_method_status) add_port_status;
- BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Failed to add input port.");
- goto end;
- }
+ add_port_status =
+ bt_self_component_sink_add_input_port(self_comp_sink, in_port_name, NULL, NULL);
+ if (add_port_status != BT_SELF_COMPONENT_ADD_PORT_STATUS_OK) {
+ status = (bt_component_class_initialize_method_status) add_port_status;
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to add input port.");
+ goto end;
+ }
- bt_self_component_set_data(self_comp, fs_sink);
+ bt_self_component_set_data(self_comp, fs_sink);
end:
- if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
- destroy_fs_sink_comp(fs_sink);
- }
+ if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
+ destroy_fs_sink_comp(fs_sink);
+ }
- return status;
+ return status;
+ } catch (const std::bad_alloc&) {
+ return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
+ } catch (const bt2::Error&) {
+ return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
+ }
}
static inline struct fs_sink_stream *borrow_stream(struct fs_sink_comp *fs_sink,
trace = (fs_sink_trace *) g_hash_table_lookup(fs_sink->traces, ir_trace);
if (G_UNLIKELY(!trace)) {
if (fs_sink->assume_single_trace && g_hash_table_size(fs_sink->traces) > 0) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Single trace mode, but getting more than one trace: "
- "stream-name=\"%s\"",
- bt_stream_get_name(ir_stream));
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger,
+ "Single trace mode, but getting more than one trace: "
+ "stream-name=\"{}\"",
+ bt2c::maybeNull(bt_stream_get_name(ir_stream)));
goto end;
}
static inline bt_component_class_sink_consume_method_status
handle_event_msg(struct fs_sink_comp *fs_sink, const bt_message *msg)
{
- int ret;
- bt_component_class_sink_consume_method_status status =
- BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_OK;
- const bt_event *ir_event = bt_message_event_borrow_event_const(msg);
- const bt_stream *ir_stream = bt_event_borrow_stream_const(ir_event);
- struct fs_sink_stream *stream;
- struct fs_sink_ctf_event_class *ec = NULL;
- const bt_clock_snapshot *cs = NULL;
-
- stream = borrow_stream(fs_sink, ir_stream);
- if (G_UNLIKELY(!stream)) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to borrow stream.");
- status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
- goto end;
- }
+ try {
+ int ret;
+ bt_component_class_sink_consume_method_status status =
+ BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_OK;
+ const bt_event *ir_event = bt_message_event_borrow_event_const(msg);
+ const bt_stream *ir_stream = bt_event_borrow_stream_const(ir_event);
+ struct fs_sink_stream *stream;
+ struct fs_sink_ctf_event_class *ec = NULL;
+ const bt_clock_snapshot *cs = NULL;
+
+ stream = borrow_stream(fs_sink, ir_stream);
+ if (G_UNLIKELY(!stream)) {
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to borrow stream.");
+ status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
+ goto end;
+ }
- ret = try_translate_event_class_trace_ir_to_ctf_ir(fs_sink, stream->sc,
- bt_event_borrow_class_const(ir_event), &ec);
- if (ret) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to translate event class to CTF IR.");
- status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
- goto end;
- }
+ ret = try_translate_event_class_trace_ir_to_ctf_ir(
+ fs_sink, stream->sc, bt_event_borrow_class_const(ir_event), &ec);
+ if (ret) {
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger,
+ "Failed to translate event class to CTF IR.");
+ status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
+ goto end;
+ }
- BT_ASSERT_DBG(ec);
+ BT_ASSERT_DBG(ec);
- if (stream->sc->default_clock_class) {
- cs = bt_message_event_borrow_default_clock_snapshot_const(msg);
- }
+ if (stream->sc->default_clock_class) {
+ cs = bt_message_event_borrow_default_clock_snapshot_const(msg);
+ }
- /*
+ /*
* If this event's stream does not support packets, then we
* lazily create artificial packets.
*
* comes the time to write a new event and the packet's content
* size is >= 4 MiB), except the last one which can be smaller.
*/
- if (G_UNLIKELY(!stream->sc->has_packets)) {
- if (stream->packet_state.is_open &&
- bt_ctfser_get_offset_in_current_packet_bits(&stream->ctfser) / 8 >= 4 * 1024 * 1024) {
- /*
+ if (G_UNLIKELY(!stream->sc->has_packets)) {
+ if (stream->packet_state.is_open &&
+ bt_ctfser_get_offset_in_current_packet_bits(&stream->ctfser) / 8 >=
+ 4 * 1024 * 1024) {
+ /*
* Stream's current packet is larger than 4 MiB:
* close it. A new packet will be opened just
* below.
*/
- ret = fs_sink_stream_close_packet(stream, NULL);
- if (ret) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to close packet.");
- status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
- goto end;
+ ret = fs_sink_stream_close_packet(stream, NULL);
+ if (ret) {
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to close packet.");
+ status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
+ goto end;
+ }
}
- }
- if (!stream->packet_state.is_open) {
- /* Stream's packet is not currently opened: open it */
- ret = fs_sink_stream_open_packet(stream, NULL, NULL);
- if (ret) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to open packet.");
- status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
- goto end;
+ if (!stream->packet_state.is_open) {
+ /* Stream's packet is not currently opened: open it */
+ ret = fs_sink_stream_open_packet(stream, NULL, NULL);
+ if (ret) {
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to open packet.");
+ status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
+ goto end;
+ }
}
}
- }
- BT_ASSERT_DBG(stream->packet_state.is_open);
- ret = fs_sink_stream_write_event(stream, cs, ir_event, ec);
- if (G_UNLIKELY(ret)) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to write event.");
- status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
- goto end;
- }
+ BT_ASSERT_DBG(stream->packet_state.is_open);
+ ret = fs_sink_stream_write_event(stream, cs, ir_event, ec);
+ if (G_UNLIKELY(ret)) {
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to write event.");
+ status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
+ goto end;
+ }
end:
- return status;
+ return status;
+ } catch (const std::bad_alloc&) {
+ return BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_MEMORY_ERROR;
+ } catch (const bt2::Error&) {
+ return BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
+ }
}
static inline bt_component_class_sink_consume_method_status
stream = borrow_stream(fs_sink, ir_stream);
if (G_UNLIKELY(!stream)) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to borrow stream.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to borrow stream.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
}
if (stream->discarded_events_state.beginning_cs != expected_cs) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Incompatible discarded events message: "
- "unexpected beginning time: "
- "beginning-cs-val=%" PRIu64 ", "
- "expected-beginning-cs-val=%" PRIu64 ", "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- stream->discarded_events_state.beginning_cs, expected_cs,
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger,
+ "Incompatible discarded events message: "
+ "unexpected beginning time: "
+ "beginning-cs-val={}, "
+ "expected-beginning-cs-val={}, "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ stream->discarded_events_state.beginning_cs, expected_cs,
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
* this case.
*/
if (stream->prev_packet_state.end_cs == UINT64_C(-1)) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Incompatible discarded packets message "
- "occurring before the stream's first packet: "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger,
+ "Incompatible discarded packets message "
+ "occurring before the stream's first packet: "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
if (stream->discarded_packets_state.beginning_cs != stream->prev_packet_state.end_cs) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Incompatible discarded packets message: "
- "unexpected beginning time: "
- "beginning-cs-val=%" PRIu64 ", "
- "expected-beginning-cs-val=%" PRIu64 ", "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- stream->discarded_packets_state.beginning_cs,
- stream->prev_packet_state.end_cs, bt_stream_get_id(ir_stream),
- bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger,
+ "Incompatible discarded packets message: "
+ "unexpected beginning time: "
+ "beginning-cs-val={}, "
+ "expected-beginning-cs-val={}, "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ stream->discarded_packets_state.beginning_cs, stream->prev_packet_state.end_cs,
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
expected_end_cs = bt_clock_snapshot_get_value(cs);
if (stream->discarded_packets_state.end_cs != expected_end_cs) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Incompatible discarded packets message: "
- "unexpected end time: "
- "end-cs-val=%" PRIu64 ", "
- "expected-end-cs-val=%" PRIu64 ", "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- stream->discarded_packets_state.end_cs, expected_end_cs,
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger,
+ "Incompatible discarded packets message: "
+ "unexpected end time: "
+ "end-cs-val={}, "
+ "expected-end-cs-val={}, "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ stream->discarded_packets_state.end_cs, expected_end_cs,
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
ret = fs_sink_stream_open_packet(stream, cs, ir_packet);
if (ret) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to open packet.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to open packet.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
stream = borrow_stream(fs_sink, ir_stream);
if (G_UNLIKELY(!stream)) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to borrow stream.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to borrow stream.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
expected_cs = bt_clock_snapshot_get_value(cs);
if (stream->discarded_events_state.end_cs != expected_cs) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Incompatible discarded events message: "
- "unexpected end time: "
- "end-cs-val=%" PRIu64 ", "
- "expected-end-cs-val=%" PRIu64 ", "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- stream->discarded_events_state.end_cs, expected_cs,
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger,
+ "Incompatible discarded events message: "
+ "unexpected end time: "
+ "end-cs-val={}, "
+ "expected-end-cs-val={}, "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ stream->discarded_events_state.end_cs, expected_cs, bt_stream_get_id(ir_stream),
+ bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
ret = fs_sink_stream_close_packet(stream, cs);
if (ret) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to close packet.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to close packet.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
BT_ASSERT(!bt_stream_class_supports_discarded_packets(ir_sc));
if (!fs_sink->ignore_discarded_events && bt_stream_class_supports_discarded_events(ir_sc)) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Unsupported stream: "
- "stream does not support packets, "
- "but supports discarded events: "
- "stream-addr=%p, "
- "stream-id=%" PRIu64 ", "
- "stream-name=\"%s\"",
- ir_stream, bt_stream_get_id(ir_stream),
- bt_stream_get_name(ir_stream));
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger,
+ "Unsupported stream: "
+ "stream does not support packets, "
+ "but supports discarded events: "
+ "stream-addr={}, "
+ "stream-id={}, "
+ "stream-name=\"{}\"",
+ fmt::ptr(ir_stream), bt_stream_get_id(ir_stream),
+ bt2c::maybeNull(bt_stream_get_name(ir_stream)));
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
if (!fs_sink->ignore_discarded_events &&
bt_stream_class_discarded_events_have_default_clock_snapshots(ir_sc) &&
!packets_have_beginning_end_cs) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Unsupported stream: discarded events have "
- "default clock snapshots, but packets have no "
- "beginning and/or end default clock snapshots: "
- "stream-addr=%p, "
- "stream-id=%" PRIu64 ", "
- "stream-name=\"%s\"",
- ir_stream, bt_stream_get_id(ir_stream),
- bt_stream_get_name(ir_stream));
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger,
+ "Unsupported stream: discarded events have "
+ "default clock snapshots, but packets have no "
+ "beginning and/or end default clock snapshots: "
+ "stream-addr={}, "
+ "stream-id={}, "
+ "stream-name=\"{}\"",
+ fmt::ptr(ir_stream), bt_stream_get_id(ir_stream),
+ bt2c::maybeNull(bt_stream_get_name(ir_stream)));
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
if (!fs_sink->ignore_discarded_packets &&
bt_stream_class_discarded_packets_have_default_clock_snapshots(ir_sc) &&
!packets_have_beginning_end_cs) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Unsupported stream: discarded packets have "
- "default clock snapshots, but packets have no "
- "beginning and/or end default clock snapshots: "
- "stream-addr=%p, "
- "stream-id=%" PRIu64 ", "
- "stream-name=\"%s\"",
- ir_stream, bt_stream_get_id(ir_stream),
- bt_stream_get_name(ir_stream));
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger,
+ "Unsupported stream: discarded packets have "
+ "default clock snapshots, but packets have no "
+ "beginning and/or end default clock snapshots: "
+ "stream-addr={}, "
+ "stream-id={}, "
+ "stream-name=\"{}\"",
+ fmt::ptr(ir_stream), bt_stream_get_id(ir_stream),
+ bt2c::maybeNull(bt_stream_get_name(ir_stream)));
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
stream = borrow_stream(fs_sink, ir_stream);
if (!stream) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to borrow stream.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to borrow stream.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
- BT_COMP_LOGI("Created new, empty stream file: "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGI_SPEC(fs_sink->logger,
+ "Created new, empty stream file: "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
end:
return status;
stream = borrow_stream(fs_sink, ir_stream);
if (!stream) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to borrow stream.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to borrow stream.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
int ret = fs_sink_stream_close_packet(stream, NULL);
if (ret) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to close packet.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to close packet.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
}
- BT_COMP_LOGI("Closing stream file: "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGI_SPEC(fs_sink->logger,
+ "Closing stream file: "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
/*
* This destroys the stream object and frees all its resources,
stream = borrow_stream(fs_sink, ir_stream);
if (!stream) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to borrow stream.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to borrow stream.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
if (fs_sink->ignore_discarded_events) {
- BT_COMP_LOGI("Ignoring discarded events message: "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGI_SPEC(fs_sink->logger,
+ "Ignoring discarded events message: "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
goto end;
}
if (stream->discarded_events_state.in_range) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Unsupported contiguous discarded events message: "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger,
+ "Unsupported contiguous discarded events message: "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
* time.
*/
if (stream->packet_state.is_open && stream->sc->discarded_events_has_ts) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Unsupported discarded events message with "
- "default clock snapshots occurring within a packet: "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger,
+ "Unsupported discarded events message with "
+ "default clock snapshots occurring within a packet: "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
stream = borrow_stream(fs_sink, ir_stream);
if (!stream) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to borrow stream.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to borrow stream.");
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
if (fs_sink->ignore_discarded_packets) {
- BT_COMP_LOGI("Ignoring discarded packets message: "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGI_SPEC(fs_sink->logger,
+ "Ignoring discarded packets message: "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
goto end;
}
if (stream->discarded_packets_state.in_range) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Unsupported contiguous discarded packets message: "
- "stream-id=%" PRIu64 ", stream-name=\"%s\", "
- "trace-name=\"%s\", path=\"%s/%s\"",
- bt_stream_get_id(ir_stream), bt_stream_get_name(ir_stream),
- bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream)),
- stream->trace->path->str, stream->file_name->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ fs_sink->logger,
+ "Unsupported contiguous discarded packets message: "
+ "stream-id={}, stream-name=\"{}\", "
+ "trace-name=\"{}\", path=\"{}/{}\"",
+ bt_stream_get_id(ir_stream), bt2c::maybeNull(bt_stream_get_name(ir_stream)),
+ bt2c::maybeNull(bt_trace_get_name(bt_stream_borrow_trace_const(ir_stream))),
+ stream->trace->path->str, stream->file_name->str);
status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR;
goto end;
}
next_status = bt_message_iterator_next(fs_sink->upstream_iter, &msgs, &msg_count);
if (next_status < 0) {
status = (bt_component_class_sink_consume_method_status) next_status;
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Failed to get next message from upstream iterator.");
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger,
+ "Failed to get next message from upstream iterator.");
goto end;
}
break;
case BT_MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY:
/* Ignore */
- BT_COMP_LOGD_STR("Ignoring message iterator inactivity message.");
+ BT_CPPLOGD_SPEC(fs_sink->logger, "Ignoring message iterator inactivity message.");
break;
case BT_MESSAGE_TYPE_STREAM_BEGINNING:
status = handle_stream_beginning_msg(fs_sink, msg);
BT_MESSAGE_PUT_REF_AND_RESET(msgs[i]);
if (status != BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_OK) {
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp,
- "Failed to handle message: "
- "generated CTF traces could be incomplete: "
- "output-dir-path=\"%s\"",
- fs_sink->output_dir_path->str);
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger,
+ "Failed to handle message: "
+ "generated CTF traces could be incomplete: "
+ "output-dir-path=\"{}\"",
+ fs_sink->output_dir_path->str);
goto error;
}
}
bt_component_class_sink_graph_is_configured_method_status
ctf_fs_sink_graph_is_configured(bt_self_component_sink *self_comp)
{
- bt_component_class_sink_graph_is_configured_method_status status;
- bt_message_iterator_create_from_sink_component_status msg_iter_status;
- fs_sink_comp *fs_sink = (fs_sink_comp *) bt_self_component_get_data(
- bt_self_component_sink_as_self_component(self_comp));
-
- msg_iter_status = bt_message_iterator_create_from_sink_component(
- self_comp, bt_self_component_sink_borrow_input_port_by_name(self_comp, in_port_name),
- &fs_sink->upstream_iter);
- if (msg_iter_status != BT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK) {
- status = (bt_component_class_sink_graph_is_configured_method_status) msg_iter_status;
- BT_COMP_LOGE_APPEND_CAUSE(fs_sink->self_comp, "Failed to create upstream iterator.");
- goto end;
- }
+ try {
+ bt_component_class_sink_graph_is_configured_method_status status;
+ bt_message_iterator_create_from_sink_component_status msg_iter_status;
+ fs_sink_comp *fs_sink = (fs_sink_comp *) bt_self_component_get_data(
+ bt_self_component_sink_as_self_component(self_comp));
+
+ msg_iter_status = bt_message_iterator_create_from_sink_component(
+ self_comp, bt_self_component_sink_borrow_input_port_by_name(self_comp, in_port_name),
+ &fs_sink->upstream_iter);
+ if (msg_iter_status != BT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK) {
+ status = (bt_component_class_sink_graph_is_configured_method_status) msg_iter_status;
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(fs_sink->logger, "Failed to create upstream iterator.");
+ goto end;
+ }
- status = BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_OK;
+ status = BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_OK;
end:
- return status;
+ return status;
+ } catch (const std::bad_alloc&) {
+ return BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_MEMORY_ERROR;
+ } catch (const bt2c::Error&) {
+ return BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_ERROR;
+ }
}
void ctf_fs_sink_finalize(bt_self_component_sink *self_comp)