Bug #1384
Updated by Erica Bugden over 1 year ago
Hello! I triggered an internal assertion while trying to, presumably incorrectly, query the lttng-live component class. h1. Software * lttng tools: @lttng (LTTng Trace Control) 2.14.0-pre - O-Beer - v2.12.0-rc1-1528-g5983bb6d3@ * babeltrace2: @Babeltrace 2.1.0-rc1 "Codename TBD" [v1.2.0-3704-gdbea6be2]@ (configured with plugins, python bindings support) h1. Procedure * Start root session daemon: @$sudo lttng-sessiond --daemonize@ * Create live session: @$lttng create my-session --live@ * Enable events: @$lttng enable-event --kernel sched-switch,sched_process_fork@ * Start (Start tracing? I can't remember if I remembered to start tracing before running the script, but I believe I did @$lttng start@ start@) * Run python script: @python3 lttng-live.py@ lttng-live-py@ (see below) ** Assertion h1. Python script Note: The script is noisy as some code/comments are irrelevant/incorrect/inconsistent. (It's originally based on the query example in the Python bindings documentation.) <pre> import bt2 import sys # Get the `source.ctf.fs` component class from the `ctf` plugin. # `source.ctf.lttng-live` component class instead # (list plugins/components with $babeltrace2 list-plugins) comp_cls = bt2.find_plugin('ctf').source_component_classes['lttng-live'] # The `babeltrace.support-info` query operation expects a `type` # parameter (set to `directory` here) and an `input` parameter (the # actual path or string to check, in this case the first command-line # argument). # # See `babeltrace2-query-babeltrace.support-info(7)`. params = { 'url': 'net://localhost/host/luna/my-session' } ''' params = { 'type': 'string', 'input': sys.argv[1], } ''' # Create a query executor. # # This is the environment in which query operations happens. The # queried component class has access to this executor, for example to # retrieve the query operation's logging level. query_exec = bt2.QueryExecutor(comp_cls, 'sessions', 'inputs=net://localhost/host/luna/my-session') ''' query_exec = bt2.QueryExecutor(comp_cls, 'babeltrace.support-info', params) ''' # Query the component class through the query executor. # # This method returns the result. result = query_exec.query() # Print the result. print(result) # Try to iterate on the trace. ''' for msg in bt2.TraceCollectionMessageIterator('net://localhost/host/luna/my-session'): if type(msg) is bt2._EventMessageConst: print(msg.event.name) ''' </pre> If I remember correctly, *the script line change that triggered the assertion was expressing the query parameters directly as a string* (rather than a dictionary). As in this: <pre> query_exec = bt2.QueryExecutor(comp_cls, 'sessions', 'inputs=net://localhost/host/luna/my-session') </pre> instead of this: <pre> params = { 'url': 'net://localhost/host/luna/my-session' } query_exec = bt2.QueryExecutor(comp_cls, 'sessions', params) </pre> h1. Output <pre> erica@luna:~$ python3 lttng-live.py (╯°□°)╯︵ ┻━┻ param-validation.c:196: validate_map_value(): Assertion `bt_value_get_type(map) == BT_VALUE_TYPE_MAP` failed. Aborted (core dumped) </pre>