lib: remove bt_query_executor_interrupt, add bt_query_executor_borrow_default_interrupter
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 17 Dec 2019 19:11:36 +0000 (14:11 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 20 Jan 2020 20:15:24 +0000 (15:15 -0500)
It is currently possible to interrupt a running quer executor with
bt_query_executor_interrupt.  It is however not possible to reset the
default interrupter that this function sets and resume the query
execution.

Rather than add a new query executor function to reset the default query
executor interrupter, introduce a new function,
bt_query_executor_borrow_default_interrupter, to borrow that default
interrupter.  All the bt_interrupter API is therefore accessible with
this default interrupter.

This patch removes the bt_query_executor_interrupt function, since it's
no longer needed.

Change-Id: I877dfbf22e36233750a71220fc5ab0297f8c0c28
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2709
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
include/babeltrace2/graph/query-executor.h
src/bindings/python/bt2/bt2/query_executor.py
src/lib/graph/query-executor.c
tests/bindings/python/bt2/test_query_executor.py

index 6097519f7b32b87d60351652e45047c5c6a45706..c393e6ec7668c9a08d408f8aaf6972c3e40401a9 100644 (file)
@@ -65,7 +65,8 @@ extern bt_query_executor_add_interrupter_status
 bt_query_executor_add_interrupter(bt_query_executor *query_executor,
                const bt_interrupter *interrupter);
 
-extern void bt_query_executor_interrupt(bt_query_executor *query_executor);
+extern bt_interrupter *bt_query_executor_borrow_default_interrupter(
+               bt_query_executor *query_executor);
 
 typedef enum bt_query_executor_set_logging_level_status {
        BT_QUERY_EXECUTOR_SET_LOGGING_LEVEL_STATUS_OK   = __BT_FUNC_STATUS_OK,
index 2f82d16b4d3baba67281c2e1d5b6830cedbf8e02..57c325890e80d0548065152dd3f0033a5b7dbd89 100644 (file)
@@ -104,8 +104,10 @@ class QueryExecutor(object._SharedObject, _QueryExecutorCommon):
         utils._check_type(interrupter, bt2_interrupter.Interrupter)
         native_bt.query_executor_add_interrupter(self._ptr, interrupter._ptr)
 
-    def interrupt(self):
-        native_bt.query_executor_interrupt(self._ptr)
+    @property
+    def default_interrupter(self):
+        ptr = native_bt.query_executor_borrow_default_interrupter(self._ptr)
+        return bt2_interrupter.Interrupter._create_from_ptr_and_get_ref(ptr)
 
     def _set_logging_level(self, log_level):
         utils._check_log_level(log_level)
index 9a78d790a8233263917dc693515db8c0f39cd197..bc6f542a6226429a87184ab9113fb07d4084b031 100644 (file)
@@ -277,12 +277,11 @@ bt_bool bt_query_executor_is_interrupted(const struct bt_query_executor *query_e
                query_exec->interrupters);
 }
 
-void bt_query_executor_interrupt(struct bt_query_executor *query_exec)
+struct bt_interrupter *bt_query_executor_borrow_default_interrupter(
+               struct bt_query_executor *query_exec)
 {
        BT_ASSERT_PRE_NON_NULL(query_exec, "Query executor");
-       bt_interrupter_set(query_exec->default_interrupter);
-       BT_LIB_LOGI("Interrupted query executor: query-exec-addr=%p",
-               query_exec);
+       return query_exec->default_interrupter;
 }
 
 enum bt_query_executor_set_logging_level_status
index 000de069a44c3f94dc54b93ae0a89cea5412ec15..a22f5d7db4df349a2d71cd66a33c9bb87f606ce5 100644 (file)
@@ -22,6 +22,15 @@ import re
 
 
 class QueryExecutorTestCase(unittest.TestCase):
+    def test_default_interrupter(self):
+        class MySink(bt2._UserSinkComponent):
+            def _user_consume(self):
+                pass
+
+        query_exec = bt2.QueryExecutor(MySink, 'obj')
+        interrupter = query_exec.default_interrupter
+        self.assertIs(type(interrupter), bt2.Interrupter)
+
     def test_query(self):
         class MySink(bt2._UserSinkComponent):
             def _user_consume(self):
@@ -262,7 +271,7 @@ class QueryExecutorTestCase(unittest.TestCase):
             @classmethod
             def _user_query(cls, priv_query_exec, obj, params, method_obj):
                 test_self.assertFalse(query_exec.is_interrupted)
-                query_exec.interrupt()
+                query_exec.default_interrupter.set()
                 test_self.assertTrue(query_exec.is_interrupted)
 
         test_self = self
This page took 0.028143 seconds and 4 git commands to generate.