In my experience writing a Python plugin, it is really helpful to see
when it fails to load, with a traceback of the failure. We currently
output this failure at the "info" level, which is not shown by default.
Even if I set the log level to info, that failure is lost in a sea of
messages.
So, even if fail_on_load_error is false, a plugin that fails to load
is a bit suspicious and is warn-worthy, in my opinion.
Change-Id: I82844aaa62d33dc0ad1059d515ae1581356f4fe9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1706
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
status = BT_FUNC_STATUS_LOADING_ERROR;
goto end;
} else {
status = BT_FUNC_STATUS_LOADING_ERROR;
goto end;
} else {
"Ignoring unknown plugin descriptor attribute: "
"plugin-path=\"%s\", plugin-name=\"%s\", "
"attr-type-name=\"%s\", attr-type-id=%d",
"Ignoring unknown plugin descriptor attribute: "
"plugin-path=\"%s\", plugin-name=\"%s\", "
"attr-type-name=\"%s\", attr-type-id=%d",
status = BT_FUNC_STATUS_LOADING_ERROR;
goto end;
} else {
status = BT_FUNC_STATUS_LOADING_ERROR;
goto end;
} else {
"Ignoring unknown component class descriptor attribute: "
"plugin-path=\"%s\", "
"plugin-name=\"%s\", "
"Ignoring unknown component class descriptor attribute: "
"plugin-path=\"%s\", "
"plugin-name=\"%s\", "
status = init_status;
goto end;
} else {
status = init_status;
goto end;
} else {
"User's plugin initialization function failed: "
"status=%s",
bt_common_func_status_string(init_status));
"User's plugin initialization function failed: "
"status=%s",
bt_common_func_status_string(init_status));
status = BT_FUNC_STATUS_LOADING_ERROR;
goto end;
} else {
status = BT_FUNC_STATUS_LOADING_ERROR;
goto end;
} else {
"Ignoring unknown component class type: "
"plugin-path=\"%s\", plugin-name=\"%s\", "
"comp-class-name=\"%s\", comp-class-type=%d",
"Ignoring unknown component class type: "
"plugin-path=\"%s\", plugin-name=\"%s\", "
"comp-class-name=\"%s\", comp-class-type=%d",
status = BT_FUNC_STATUS_LOADING_ERROR;
goto error;
} else {
status = BT_FUNC_STATUS_LOADING_ERROR;
goto error;
} else {
"Unknown ABI major version: abi-major=%d",
descriptor->major);
continue;
"Unknown ABI major version: abi-major=%d",
descriptor->major);
continue;
"__bt_get_end_section_plugin_descriptors");
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"__bt_get_end_section_plugin_descriptors");
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot resolve plugin symbol: path=\"%s\", "
"symbol=\"%s\"", path,
"__bt_get_end_section_plugin_descriptors");
"Cannot resolve plugin symbol: path=\"%s\", "
"symbol=\"%s\"", path,
"__bt_get_end_section_plugin_descriptors");
attrs_begin, attrs_end);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
attrs_begin, attrs_end);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Found section start or end symbol, but not both: "
"path=\"%s\", symbol-start=\"%s\", "
"symbol-end=\"%s\", symbol-start-addr=%p, "
"Found section start or end symbol, but not both: "
"path=\"%s\", symbol-start=\"%s\", "
"symbol-end=\"%s\", symbol-start-addr=%p, "
cc_descriptors_begin, cc_descriptors_end);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
cc_descriptors_begin, cc_descriptors_end);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Found section start or end symbol, but not both: "
"path=\"%s\", symbol-start=\"%s\", "
"symbol-end=\"%s\", symbol-start-addr=%p, "
"Found section start or end symbol, but not both: "
"path=\"%s\", symbol-start=\"%s\", "
"symbol-end=\"%s\", symbol-start-addr=%p, "
cc_descr_attrs_begin, cc_descr_attrs_end);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
cc_descr_attrs_begin, cc_descr_attrs_end);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Found section start or end symbol, but not both: "
"path=\"%s\", symbol-start=\"%s\", "
"symbol-end=\"%s\", symbol-start-addr=%p, "
"Found section start or end symbol, but not both: "
"path=\"%s\", symbol-start=\"%s\", "
"symbol-end=\"%s\", symbol-start-addr=%p, "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot find `name` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot find `name` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot find `author` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot find `author` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot find `description` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot find `description` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot find `license` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot find `license` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot find `version` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot find `version` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot find `comp_class_addrs` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot find `comp_class_addrs` attribute in Python plugin info object: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot decode Python plugin name string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot decode Python plugin name string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Plugin name is not a string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Plugin name is not a string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot decode Python plugin author string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot decode Python plugin author string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot decode Python plugin description string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot decode Python plugin description string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot decode Python plugin license string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot decode Python plugin license string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Invalid Python plugin version format: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Invalid Python plugin version format: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot decode Python plugin version's extra string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
"Cannot decode Python plugin version's extra string: "
"py-plugin-info-addr=%p", plugin_info);
status = BT_FUNC_STATUS_NOT_FOUND;
plugin_info, i);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
plugin_info, i);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Component class address is not an integer in Python plugin info object: "
"py-plugin-info-addr=%p, index=%zu",
plugin_info, i);
"Component class address is not an integer in Python plugin info object: "
"py-plugin-info-addr=%p, index=%zu",
plugin_info, i);
"Cannot load Python plugin: path=\"%s\"", path);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot load Python plugin: path=\"%s\"", path);
status = BT_FUNC_STATUS_LOADING_ERROR;
} else {
"Cannot load Python plugin: path=\"%s\"", path);
status = BT_FUNC_STATUS_NOT_FOUND;
}
"Cannot load Python plugin: path=\"%s\"", path);
status = BT_FUNC_STATUS_NOT_FOUND;
}
error:
BT_ASSERT(status != BT_FUNC_STATUS_OK);
error:
BT_ASSERT(status != BT_FUNC_STATUS_OK);
- log_python_traceback(fail_on_load_error ? BT_LOG_WARNING : BT_LOG_INFO);
+ log_python_traceback(BT_LOG_WARNING);
pyerr_clear();
BT_OBJECT_PUT_REF_AND_RESET(*plugin_set_out);
pyerr_clear();
BT_OBJECT_PUT_REF_AND_RESET(*plugin_set_out);