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>
bt_query_executor_add_interrupter(bt_query_executor *query_executor,
const bt_interrupter *interrupter);
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,
typedef enum bt_query_executor_set_logging_level_status {
BT_QUERY_EXECUTOR_SET_LOGGING_LEVEL_STATUS_OK = __BT_FUNC_STATUS_OK,
utils._check_type(interrupter, bt2_interrupter.Interrupter)
native_bt.query_executor_add_interrupter(self._ptr, interrupter._ptr)
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)
def _set_logging_level(self, log_level):
utils._check_log_level(log_level)
query_exec->interrupters);
}
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_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
}
enum bt_query_executor_set_logging_level_status
class QueryExecutorTestCase(unittest.TestCase):
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):
def test_query(self):
class MySink(bt2._UserSinkComponent):
def _user_consume(self):
@classmethod
def _user_query(cls, priv_query_exec, obj, params, method_obj):
test_self.assertFalse(query_exec.is_interrupted)
@classmethod
def _user_query(cls, priv_query_exec, obj, params, method_obj):
test_self.assertFalse(query_exec.is_interrupted)
+ query_exec.default_interrupter.set()
test_self.assertTrue(query_exec.is_interrupted)
test_self = self
test_self.assertTrue(query_exec.is_interrupted)
test_self = self