lib: pass log level to bt_query_executor_query()
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Sat, 15 Jun 2019 04:42:10 +0000 (00:42 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 20 Jun 2019 18:01:16 +0000 (14:01 -0400)
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 <eeppeliteloop@gmail.com>
Change-Id: I929d545a1df2f4d6d083f6c536f6fcf26aa972bd
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1461
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
18 files changed:
include/babeltrace2/graph/component-class-filter.h
include/babeltrace2/graph/component-class-sink.h
include/babeltrace2/graph/component-class-source.h
include/babeltrace2/graph/query-executor.h
src/bindings/python/bt2/bt2/component.py
src/bindings/python/bt2/bt2/native_bt_component_class.i
src/bindings/python/bt2/bt2/native_bt_query_exec.i
src/bindings/python/bt2/bt2/query_executor.py
src/cli/babeltrace2.c
src/lib/graph/query-executor.c
src/plugins/ctf/fs-src/fs.c
src/plugins/ctf/fs-src/fs.h
src/plugins/ctf/lttng-live/lttng-live.c
src/plugins/ctf/lttng-live/lttng-live.h
tests/bindings/python/bt2/test_component_class.py
tests/bindings/python/bt2/test_query_executor.py
tests/lib/test-plugin-plugins/sfs.c
tests/lib/test_plugin.c

index 74d92ab95c7fd0458a70b9429e1b6cc5d83bfb4f..e516a28882b157ae1aa485d37751e7f9f13b7e66 100644 (file)
@@ -47,6 +47,9 @@
  */
 #include <babeltrace2/types.h>
 
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
 #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)(
index 4a16a834057a544fc4caf80cb91f2468bbb88862..6cee6726a8aeb4d990f315875c92f2c8be9bf44a 100644 (file)
@@ -43,6 +43,9 @@
  */
 #include <babeltrace2/types.h>
 
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
 #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
index fc53971f24c3ecde07eac8ea1d7df2fa7975dd85..6536426a00180e3f7fa72f9056a28cd969050b45 100644 (file)
@@ -47,6 +47,9 @@
  */
 #include <babeltrace2/types.h>
 
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
 #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
index bc5e5b86929b94658a7b0e5901c11d5e8a71714b..fe5c4789013c769b2d17ce49309f3cd603dade98 100644 (file)
@@ -29,6 +29,9 @@
 /* For bt_query_executor, bt_component_class, bt_value */
 #include <babeltrace2/types.h>
 
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
 #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(
index 13c51bf8badfbe66e5ec0290fe6efab2ae02bbc4..90704262cc627ebfe15ff090b1ef28e67f3fc1c7 100644 (file)
@@ -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)
index 1dfa0110886fa05a225e1d018155d11b67829142..522990a29da8aefc83ae92c9417047acaf4ef98a 100644 (file)
@@ -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
index af78efaf1f5c0ad52b9ea3168cc2e036a2c6697f..932bae8dc7cb0e45e79630b0c9464cf07147799c 100644 (file)
@@ -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(
index a87713ff1c8a4f2c540fb35fabd81592cd910692..072410fbbd481c4cc2122de971228b27c96355e0 100644 (file)
@@ -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)
index 9aa52a873ed165abcd71c432edfc353b803f7d78..9a631c92b71230e3b84f15f660fd0f7e224d3afa 100644 (file)
@@ -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) {
index 1a51df9223192daedb2be18d109d0db71004561c..597804e6cab4bd918243017066763887fa6be814 100644 (file)
@@ -24,6 +24,7 @@
 #include "lib/lib-logging.h"
 
 #include "common/assert.h"
+#include "common/common.h"
 #include "lib/assert-pre.h"
 #include <babeltrace2/graph/query-executor-const.h>
 #include <babeltrace2/graph/query-executor.h>
@@ -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,
index 4530248d52745be8276b7b5b581713d011e64489..dc94e95b5547486b2d7f4850106d200e9276b1e3 100644 (file)
@@ -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;
index e034b41625f21855411bc20e58ec35e6b99a587e..7ab98adc4e2f328979885a62d6bd11572b97dc47 100644 (file)
@@ -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
index c44217b6e1eece453571cacdd94f5ed68e90cd59..65febbe3f6191d6b6de79bf07d9c79aeffb8ea14 100644 (file)
@@ -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;
index 1ae7e0f3d77695e61e6d817461f6dceaa3589d32..dc49bfb3e5af9213ade919d7baf07e5ff6f3d19f 100644 (file)
@@ -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);
index f7f5627d2d0edfe0114afef00a547ab830bb14a4..c2b2acd614c25ae9b15af5a14cdc60684a90e508 100644 (file)
@@ -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
index e4294be2097c4e3c23d8577aab0dd06b08ae01f6..4fc0f863760f13f372bea9454f6c251611d87f6e 100644 (file)
@@ -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()
index 4431abc0a87b09b9919225241b3b5b4be6b6b2fb..d9ef11ff5fd44ac4f7aa0f2bfc51fc0808c4e389 100644 (file)
@@ -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();
index bd96bd0b195de21fe37ace5c435853fff63a31bf..a22d2b27017f433c9c2d88d7578faef08ec90513 100644 (file)
@@ -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);
This page took 0.036598 seconds and 4 git commands to generate.