<div dir="ltr"><div>(Adding the list back in - I meant to reply-all before...)</div><div><br></div><div>Simon,</div><div><br>Yes, the obj solution should work just fine - I was wondering about that parameter and the approach makes sense to me.  Thanks!</div><div><br></div><div>Rocky</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 30, 2020 at 2:38 PM Simon Marchi <<a href="mailto:simark@simark.ca">simark@simark.ca</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2020-03-30 4:24 p.m., Rocky Dunlap wrote:<br>
> Simon,<br>
> <br>
> In my case, after the graph completes, I was trying to access the sink instances in order to collect some statistics collected inside the instance during the graph run.  I guess then the question is how are the graph components supposed to communicate with the outside world in general, such as filling in some Python data structures with info from a trace for post-processing or further analysis in Python?  Or is the expectation that sink components will retain no state at all after the graph completes?<br>
> <br>
> Rocky<br>
<br>
Hi Rocky,<br>
<br>
Was it your intention to not do a reply-all?  I think this would be good info for all to read.  If not,<br>
please do a reply-all and I'll replay again what I wrote below on the list.<br>
<br>
Of course the sinks are expected to produce some result outside of their own little internal state.  For<br>
sinks that produce some trace files, they'll typically write on the filsystem (like sink.ctf.fs).<br>
<br>
But if you want to send some results to another Python object/data structure, the `obj` parameter of<br>
`add_component` is pretty much meant for that.  You can pass in a reference to a Python object, and<br>
the component receives it in its `__init__`.  We thought that this could be useful, for example, if<br>
the sink needs to receive a connection handle to a database, for example.  That handle can be created<br>
outside of the sink and passed it when instantiating the component.  Think of it like some void* user<br>
data in C.<br>
<br>
In your case, you could create whatever object you need to collect your statistics/results, and pass<br>
a reference to it.<br>
<br>
Here's an example in the tests:<br>
<br>
<a href="https://github.com/efficios/babeltrace/blob/8b305066676fc7aa433e8eb668f9de8802008025/tests/bindings/python/bt2/test_graph.py#L106-L120" rel="noreferrer" target="_blank">https://github.com/efficios/babeltrace/blob/8b305066676fc7aa433e8eb668f9de8802008025/tests/bindings/python/bt2/test_graph.py#L106-L120</a><br>
<br>
Does that help?<br>
<br>
Simon<br>
</blockquote></div></div>