From f4e38e70bf6dc1ff8c9226d9c8eedaf26fa19f09 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Sat, 15 Jun 2019 00:42:10 -0400 Subject: [PATCH] lib: pass log level to bt_query_executor_query() This new parameter indicates the log level to use during the query execution. The project's component classes are changed to receive this log level, but they do not use it. This work is reserved for a future patch. The CLI passes its default log level (main `--log-level` option) to bt_query_executor_query(). Python bindings are adapted accordingly. Signed-off-by: Philippe Proulx Change-Id: I929d545a1df2f4d6d083f6c536f6fcf26aa972bd Reviewed-on: https://review.lttng.org/c/babeltrace/+/1461 Tested-by: jenkins Reviewed-by: Francis Deslauriers --- .../babeltrace2/graph/component-class-filter.h | 5 ++++- .../babeltrace2/graph/component-class-sink.h | 4 ++++ .../babeltrace2/graph/component-class-source.h | 4 ++++ include/babeltrace2/graph/query-executor.h | 5 ++++- src/bindings/python/bt2/bt2/component.py | 4 ++-- .../python/bt2/bt2/native_bt_component_class.i | 17 ++++++++++++----- .../python/bt2/bt2/native_bt_query_exec.i | 2 +- src/bindings/python/bt2/bt2/query_executor.py | 8 ++++++-- src/cli/babeltrace2.c | 16 ++++++++-------- src/lib/graph/query-executor.c | 12 ++++++++---- src/plugins/ctf/fs-src/fs.c | 1 + src/plugins/ctf/fs-src/fs.h | 1 + src/plugins/ctf/lttng-live/lttng-live.c | 1 + src/plugins/ctf/lttng-live/lttng-live.h | 1 + .../bindings/python/bt2/test_component_class.py | 12 ++++++------ .../bindings/python/bt2/test_query_executor.py | 14 +++++++------- tests/lib/test-plugin-plugins/sfs.c | 1 + tests/lib/test_plugin.c | 2 +- 18 files changed, 72 insertions(+), 38 deletions(-) diff --git a/include/babeltrace2/graph/component-class-filter.h b/include/babeltrace2/graph/component-class-filter.h index 74d92ab9..e516a288 100644 --- a/include/babeltrace2/graph/component-class-filter.h +++ b/include/babeltrace2/graph/component-class-filter.h @@ -47,6 +47,9 @@ */ #include +/* For bt_logging_level */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -98,7 +101,7 @@ typedef bt_query_status bt_self_component_class_filter *comp_class, const bt_query_executor *query_executor, const char *object, const bt_value *params, - const bt_value **result); + bt_logging_level logging_level, const bt_value **result); typedef bt_self_component_status (*bt_component_class_filter_accept_input_port_connection_method)( diff --git a/include/babeltrace2/graph/component-class-sink.h b/include/babeltrace2/graph/component-class-sink.h index 4a16a834..6cee6726 100644 --- a/include/babeltrace2/graph/component-class-sink.h +++ b/include/babeltrace2/graph/component-class-sink.h @@ -43,6 +43,9 @@ */ #include +/* For bt_logging_level */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -59,6 +62,7 @@ typedef bt_query_status bt_self_component_class_sink *comp_class, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level logging_level, const bt_value **result); typedef bt_self_component_status diff --git a/include/babeltrace2/graph/component-class-source.h b/include/babeltrace2/graph/component-class-source.h index fc53971f..6536426a 100644 --- a/include/babeltrace2/graph/component-class-source.h +++ b/include/babeltrace2/graph/component-class-source.h @@ -47,6 +47,9 @@ */ #include +/* For bt_logging_level */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -97,6 +100,7 @@ typedef bt_query_status (*bt_component_class_source_query_method)( bt_self_component_class_source *comp_class, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level logging_level, const bt_value **result); typedef bt_self_component_status diff --git a/include/babeltrace2/graph/query-executor.h b/include/babeltrace2/graph/query-executor.h index bc5e5b86..fe5c4789 100644 --- a/include/babeltrace2/graph/query-executor.h +++ b/include/babeltrace2/graph/query-executor.h @@ -29,6 +29,9 @@ /* For bt_query_executor, bt_component_class, bt_value */ #include +/* For bt_logging_level */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -41,7 +44,7 @@ bt_query_executor_status bt_query_executor_query( bt_query_executor *query_executor, const bt_component_class *component_class, const char *object, const bt_value *params, - const bt_value **result); + bt_logging_level logging_level, const bt_value **result); extern bt_query_executor_status bt_query_executor_cancel( diff --git a/src/bindings/python/bt2/bt2/component.py b/src/bindings/python/bt2/bt2/component.py index 13c51bf8..90704262 100644 --- a/src/bindings/python/bt2/bt2/component.py +++ b/src/bindings/python/bt2/bt2/component.py @@ -524,7 +524,7 @@ class _UserComponentType(type): def addr(cls): return int(cls._cc_ptr) - def _query_from_native(cls, query_exec_ptr, obj, params_ptr): + def _query_from_native(cls, query_exec_ptr, obj, params_ptr, log_level): # this can raise, in which case the native call to # bt_component_class_query() returns NULL if params_ptr is not None: @@ -536,7 +536,7 @@ class _UserComponentType(type): query_exec_ptr) # this can raise, but the native side checks the exception - results = cls._query(query_exec, obj, params) + results = cls._query(query_exec, obj, params, log_level) # this can raise, but the native side checks the exception results = bt2.create_value(results) diff --git a/src/bindings/python/bt2/bt2/native_bt_component_class.i b/src/bindings/python/bt2/bt2/native_bt_component_class.i index 1dfa0110..522990a2 100644 --- a/src/bindings/python/bt2/bt2/native_bt_component_class.i +++ b/src/bindings/python/bt2/bt2/native_bt_component_class.i @@ -122,6 +122,7 @@ typedef bt_query_status (*bt_component_class_source_query_method)( bt_self_component_class_source *comp_class, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result); typedef bt_self_component_status @@ -260,6 +261,7 @@ typedef bt_query_status bt_self_component_class_filter *comp_class, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result); typedef bt_self_component_status @@ -385,6 +387,7 @@ typedef bt_query_status bt_self_component_class_sink *comp_class, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result); typedef bt_self_component_status @@ -1223,6 +1226,7 @@ bt_py3_component_class_query( const bt_component_class *component_class, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result) { PyObject *py_cls = NULL; @@ -1261,8 +1265,8 @@ bt_py3_component_class_query( } py_results_addr = PyObject_CallMethod(py_cls, - "_query_from_native", "(OOO)", py_query_exec_ptr, - py_object, py_params_ptr); + "_query_from_native", "(OOOi)", py_query_exec_ptr, + py_object, py_params_ptr, (int) log_level); if (!py_results_addr) { BT_LOGE("Failed to call Python class's _query_from_native() method: " @@ -1299,11 +1303,12 @@ bt_py3_component_class_source_query( bt_self_component_class_source *self_component_class_source, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result) { const bt_component_class_source *component_class_source = bt_self_component_class_source_as_component_class_source(self_component_class_source); const bt_component_class *component_class = bt_component_class_source_as_component_class_const(component_class_source); - return bt_py3_component_class_query(component_class, query_executor, object, params, result); + return bt_py3_component_class_query(component_class, query_executor, object, params, log_level, result); } static bt_query_status @@ -1311,11 +1316,12 @@ bt_py3_component_class_filter_query( bt_self_component_class_filter *self_component_class_filter, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result) { const bt_component_class_filter *component_class_filter = bt_self_component_class_filter_as_component_class_filter(self_component_class_filter); const bt_component_class *component_class = bt_component_class_filter_as_component_class_const(component_class_filter); - return bt_py3_component_class_query(component_class, query_executor, object, params, result); + return bt_py3_component_class_query(component_class, query_executor, object, params, log_level, result); } static bt_query_status @@ -1323,11 +1329,12 @@ bt_py3_component_class_sink_query( bt_self_component_class_sink *self_component_class_sink, const bt_query_executor *query_executor, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result) { const bt_component_class_sink *component_class_sink = bt_self_component_class_sink_as_component_class_sink(self_component_class_sink); const bt_component_class *component_class = bt_component_class_sink_as_component_class_const(component_class_sink); - return bt_py3_component_class_query(component_class, query_executor, object, params, result); + return bt_py3_component_class_query(component_class, query_executor, object, params, log_level, result); } static bt_self_message_iterator_status diff --git a/src/bindings/python/bt2/bt2/native_bt_query_exec.i b/src/bindings/python/bt2/bt2/native_bt_query_exec.i index af78efaf..932bae8d 100644 --- a/src/bindings/python/bt2/bt2/native_bt_query_exec.i +++ b/src/bindings/python/bt2/bt2/native_bt_query_exec.i @@ -55,7 +55,7 @@ bt_query_executor_status bt_query_executor_query( bt_query_executor *query_executor, const bt_component_class *component_class, const char *object, const bt_value *params, - const bt_value **OUT); + bt_logging_level logging_level, const bt_value **OUT); extern bt_query_executor_status bt_query_executor_cancel( diff --git a/src/bindings/python/bt2/bt2/query_executor.py b/src/bindings/python/bt2/bt2/query_executor.py index a87713ff..072410fb 100644 --- a/src/bindings/python/bt2/bt2/query_executor.py +++ b/src/bindings/python/bt2/bt2/query_executor.py @@ -22,6 +22,7 @@ from bt2 import native_bt, object, utils import bt2.component +import bt2.logging import bt2 @@ -59,7 +60,8 @@ class QueryExecutor(object._SharedObject): assert(is_canceled >= 0) return is_canceled > 0 - def query(self, component_class, object, params=None): + def query(self, component_class, object, params=None, + logging_level=bt2.logging.LoggingLevel.NONE): if self.is_canceled: raise bt2.QueryExecutorCanceled @@ -84,10 +86,12 @@ class QueryExecutor(object._SharedObject): params = bt2.create_value(params) params_ptr = params._ptr + utils._check_log_level(logging_level) cc_ptr = component_class._component_class_ptr() status, result_ptr = native_bt.query_executor_query(self._ptr, cc_ptr, - object, params_ptr) + object, params_ptr, + logging_level) self._handle_status(status, 'cannot query component class') assert(result_ptr) return bt2.value._create_from_ptr(result_ptr) diff --git a/src/cli/babeltrace2.c b/src/cli/babeltrace2.c index 9aa52a87..9a631c92 100644 --- a/src/cli/babeltrace2.c +++ b/src/cli/babeltrace2.c @@ -167,9 +167,9 @@ void destroy_the_query_executor(void) } static -int query(const bt_component_class *comp_cls, const char *obj, - const bt_value *params, const bt_value **user_result, - const char **fail_reason) +int query(struct bt_config *cfg, const bt_component_class *comp_cls, + const char *obj, const bt_value *params, + const bt_value **user_result, const char **fail_reason) { const bt_value *result = NULL; bt_query_executor_status status; @@ -195,7 +195,7 @@ int query(const bt_component_class *comp_cls, const char *obj, while (true) { status = bt_query_executor_query(the_query_executor, - comp_cls, obj, params, &result); + comp_cls, obj, params, cfg->log_level, &result); switch (status) { case BT_QUERY_EXECUTOR_STATUS_OK: goto ok; @@ -964,7 +964,7 @@ int cmd_query(struct bt_config *cfg) goto end; } - ret = query(comp_cls, cfg->cmd_data.query.object->str, + ret = query(cfg, comp_cls, cfg->cmd_data.query.object->str, cfg->cmd_data.query.cfg_component->params, &results, &fail_reason); if (ret) { @@ -1260,7 +1260,7 @@ int cmd_print_lttng_live_sessions(struct bt_config *cfg) goto error; } - ret = query(comp_cls, "sessions", params, + ret = query(cfg, comp_cls, "sessions", params, &results, &fail_reason); if (ret) { goto failed; @@ -1414,7 +1414,7 @@ int cmd_print_ctf_metadata(struct bt_config *cfg) goto end; } - ret = query(comp_cls, "metadata-info", + ret = query(cfg, comp_cls, "metadata-info", params, &results, &fail_reason); if (ret) { goto failed; @@ -2173,7 +2173,7 @@ int set_stream_intersections(struct cmd_run_ctx *ctx, const bt_component_class *comp_cls = bt_component_class_source_as_component_class_const(src_comp_cls); - ret = query(comp_cls, "trace-info", + ret = query(ctx->cfg, comp_cls, "trace-info", cfg_comp->params, &query_result, &fail_reason); if (ret) { diff --git a/src/lib/graph/query-executor.c b/src/lib/graph/query-executor.c index 1a51df92..597804e6 100644 --- a/src/lib/graph/query-executor.c +++ b/src/lib/graph/query-executor.c @@ -24,6 +24,7 @@ #include "lib/lib-logging.h" #include "common/assert.h" +#include "common/common.h" #include "lib/assert-pre.h" #include #include @@ -69,10 +70,11 @@ enum bt_query_executor_status bt_query_executor_query( struct bt_query_executor *query_exec, const struct bt_component_class *comp_cls, const char *object, const struct bt_value *params, + bt_logging_level log_level, const struct bt_value **user_result) { typedef enum bt_query_status (*method_t)(void *, const void *, - const void *, const void *, const void *); + const void *, const void *, bt_logging_level, const void *); enum bt_query_status status; enum bt_query_executor_status exec_status; @@ -123,11 +125,13 @@ enum bt_query_executor_status bt_query_executor_query( } BT_LIB_LOGD("Calling user's query method: " - "query-exec-addr=%p, %![cc-]+C, object=\"%s\", %![params-]+v", - query_exec, comp_cls, object, params); + "query-exec-addr=%p, %![cc-]+C, object=\"%s\", %![params-]+v, " + "log-level=%s", + query_exec, comp_cls, object, params, + bt_common_logging_level_string(log_level)); *user_result = NULL; status = method((void *) comp_cls, query_exec, object, params, - user_result); + log_level, user_result); BT_LIB_LOGD("User method returned: status=%s, %![res-]+v", bt_query_status_string(status), *user_result); BT_ASSERT_PRE(status != BT_QUERY_STATUS_OK || *user_result, diff --git a/src/plugins/ctf/fs-src/fs.c b/src/plugins/ctf/fs-src/fs.c index 4530248d..dc94e95b 100644 --- a/src/plugins/ctf/fs-src/fs.c +++ b/src/plugins/ctf/fs-src/fs.c @@ -1946,6 +1946,7 @@ bt_query_status ctf_fs_query( bt_self_component_class_source *comp_class, const bt_query_executor *query_exec, const char *object, const bt_value *params, + __attribute__((unused)) bt_logging_level log_level, const bt_value **result) { bt_query_status status = BT_QUERY_STATUS_OK; diff --git a/src/plugins/ctf/fs-src/fs.h b/src/plugins/ctf/fs-src/fs.h index e034b416..7ab98adc 100644 --- a/src/plugins/ctf/fs-src/fs.h +++ b/src/plugins/ctf/fs-src/fs.h @@ -197,6 +197,7 @@ bt_query_status ctf_fs_query( bt_self_component_class_source *comp_class, const bt_query_executor *query_exec, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result); BT_HIDDEN diff --git a/src/plugins/ctf/lttng-live/lttng-live.c b/src/plugins/ctf/lttng-live/lttng-live.c index c44217b6..65febbe3 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.c +++ b/src/plugins/ctf/lttng-live/lttng-live.c @@ -1444,6 +1444,7 @@ BT_HIDDEN bt_query_status lttng_live_query(bt_self_component_class_source *comp_class, const bt_query_executor *query_exec, const char *object, const bt_value *params, + __attribute__((unused)) bt_logging_level log_level, const bt_value **result) { bt_query_status status = BT_QUERY_STATUS_OK; diff --git a/src/plugins/ctf/lttng-live/lttng-live.h b/src/plugins/ctf/lttng-live/lttng-live.h index 1ae7e0f3..dc49bfb3 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.h +++ b/src/plugins/ctf/lttng-live/lttng-live.h @@ -248,6 +248,7 @@ bt_query_status lttng_live_query( bt_self_component_class_source *comp_class, const bt_query_executor *query_exec, const char *object, const bt_value *params, + bt_logging_level log_level, const bt_value **result); void lttng_live_component_finalize(bt_self_component_source *component); diff --git a/tests/bindings/python/bt2/test_component_class.py b/tests/bindings/python/bt2/test_component_class.py index f7f5627d..c2b2acd6 100644 --- a/tests/bindings/python/bt2/test_component_class.py +++ b/tests/bindings/python/bt2/test_component_class.py @@ -175,7 +175,7 @@ class UserComponentClassTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): raise ValueError with self.assertRaises(bt2.Error): @@ -187,7 +187,7 @@ class UserComponentClassTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): return ... with self.assertRaises(bt2.Error): @@ -199,7 +199,7 @@ class UserComponentClassTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): nonlocal query_params query_params = params return None @@ -217,7 +217,7 @@ class UserComponentClassTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): nonlocal query_params query_params = params return 17.5 @@ -235,7 +235,7 @@ class UserComponentClassTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): nonlocal query_params query_params = params return { @@ -282,7 +282,7 @@ class GenericComponentClassTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): return [obj, params, 23] self._py_comp_cls = MySink diff --git a/tests/bindings/python/bt2/test_query_executor.py b/tests/bindings/python/bt2/test_query_executor.py index e4294be2..4fc0f863 100644 --- a/tests/bindings/python/bt2/test_query_executor.py +++ b/tests/bindings/python/bt2/test_query_executor.py @@ -11,7 +11,7 @@ class QueryExecutorTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): nonlocal query_params query_params = params return { @@ -44,7 +44,7 @@ class QueryExecutorTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): nonlocal query_params query_params = params @@ -59,7 +59,7 @@ class QueryExecutorTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): raise ValueError with self.assertRaises(bt2.Error): @@ -71,7 +71,7 @@ class QueryExecutorTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): raise bt2.InvalidQueryObject with self.assertRaises(bt2.InvalidQueryObject): @@ -83,7 +83,7 @@ class QueryExecutorTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): raise bt2.InvalidQueryParams with self.assertRaises(bt2.InvalidQueryParams): @@ -95,7 +95,7 @@ class QueryExecutorTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): raise bt2.TryAgain with self.assertRaises(bt2.TryAgain): @@ -113,7 +113,7 @@ class QueryExecutorTestCase(unittest.TestCase): pass @classmethod - def _query(cls, query_exec, obj, params): + def _query(cls, query_exec, obj, params, log_level): raise bt2.TryAgain query_exec = bt2.QueryExecutor() diff --git a/tests/lib/test-plugin-plugins/sfs.c b/tests/lib/test-plugin-plugins/sfs.c index 4431abc0..d9ef11ff 100644 --- a/tests/lib/test-plugin-plugins/sfs.c +++ b/tests/lib/test-plugin-plugins/sfs.c @@ -57,6 +57,7 @@ static bt_query_status flt_query_method( bt_self_component_class_filter *component_class, const bt_query_executor *query_exec, const char *object, const bt_value *params, + __attribute__((unused)) bt_logging_level log_level, const bt_value **result) { bt_value *res = bt_value_array_create(); diff --git a/tests/lib/test_plugin.c b/tests/lib/test_plugin.c index bd96bd0b..a22d2b27 100644 --- a/tests/lib/test_plugin.c +++ b/tests/lib/test_plugin.c @@ -177,7 +177,7 @@ static void test_sfs(const char *plugin_dir) BT_ASSERT(params); ret = bt_query_executor_query(query_exec, bt_component_class_filter_as_component_class_const(filter_comp_class), - "get-something", params, &results); + "get-something", params, BT_LOGGING_LEVEL_NONE, &results); ok(ret == 0 && results, "bt_query_executor_query() succeeds"); BT_ASSERT(bt_value_is_array(results) && bt_value_array_get_size(results) == 2); object = bt_value_array_borrow_element_by_index_const(results, 0); -- 2.34.1