[lttng-dev] [RFC babeltrace 0/2] fs-src: add metadata-src parameter

Philippe Proulx eeppeliteloop at gmail.com
Tue May 1 11:00:23 EDT 2018


Try a few `babeltrace` commands and add the --run-args option. The output
is the arguments that would be pass to the `babeltrace run` command. You'll
find documentation for --key and --value in `babeltrace-run(1)`.

Phil

On Tue, May 1, 2018 at 10:51 AM, Alexander Aring <aring at mojatatu.com> wrote:
> Hi,
>
> On Mon, Apr 30, 2018 at 07:11:30PM -0400, Philippe Proulx wrote:
>> On Mon, Apr 30, 2018 at 5:31 PM, Alexander Aring <aring at mojatatu.com> wrote:
>> > Hi,
>> >
>> > my use-case is just... we have several application with the same metadata
>> > file. Currently I build a wrapper around babeltrace to run something like:
>> >
>> > find $(TRACE_DIR}/* -maxdepth 1 -type d -exec cp ${PATH_TO_MY_APP_DATA}/ctf/metadata '{}' \;
>> >
>> > which is terrible... so I try this here somehow.
>> > As you see it has no support for fs-query and I didn't figured out yet
>> > for what fs-query is for.
>> >
>> > Also I was struggle some hours how to tell popt the right argument string,
>> > it need to be:
>> >
>> > --metadata-src=\"/usr/share/$APP_DIR/ctf\"
>> >
>> > with the ugly escape things... I saw there is a complex INI parser system
>> > behind (never saw such complex option parser in an open source project).
>>
>> A note about this: there are two ways to add component initialization
>> parameters with `babeltrace run`: with
>>
>>     --params 'key1="the value", key2=23, key3=simple_string'
>>
>> and, for string parameters, with:
>>
>>     --key key1 --value 'the value'
>>
>> The --params option parses what you call a "complex INI" format. It's
>> not so complex in reality and well-explained in the man page.
>
> When I have a string I need to use --key key1 --value 'the value'
> otherwise key/value pairs?
>
> I remember I saw the key value args somewhere... it seeems not be part
> of babeltrace convert. I tried --params, and as the manpage said [0]:
>
> Important
>         Like in the example above, make sure to single-quote the whole
>         argument when you run this command from a shell.
>
> This did libpopt to parse something, but still get some "cannot create
> components" error. I need to debug this more to figure out the "why".
> So put everything in single quotes are important... yes this will tell
> the shell to handle it as a full arg, I agree. And also there is a big
> IMPORTANT in --help. :-)
>
> I saw that source.ctf.fs had it's own implicit argument "--clock-offset"
> which seemed to work for me and I tried the same with --metadata-src.
> Seems to be a shortcut for --key key1 --value 'the value'.
>
> According to the key value arg options:
>
> It's somewhat misleading that you have args (--FOO) which need to be in a
> special order e.g. --key and then --value (where value is a must after key).
> Does libpopt have such feature? Anyway I would use --params always as it
> accept key/value pairs as optarg.
>
>>
>> The job of `babeltrace convert` (the default command) is only to create
>> a valid `babeltrace run` command line and run it. In your first patch,
>
> I see that's why I see something when I just type my command. Then
> source and sink will be connected by a magic way?
>
>> you use append_implicit_component_param(): this one appends a key/value
>> pair to the --params option's argument of a given implicit component.
>> It's simply appending `,KEY=VAL` to the current INI-style parameter
>> string for that component, which is why you need to pass the double
>> quotes above, because the effective string to append is exactly:
>>
>>     ,metadata-src="/usr/share/app-dir-expansion/ctf"
>>
>> What you want to do is have this instead:
>>
>>     --key metadata-src --value /usr/share/app-dir-expansion/ctf
>>
>
> I am not sure how to pass these --key --value arguments. Manpage of
> source.ctf.fs [0] doesn't say anything about these parameters.
>
>> (where `app-dir-expansion` is the expansion of $APP_DIR). You can use
>> append_implicit_component_extra_param() for this. This is what we use
>> for complex string values like for --begin, --end, --debug-info-dir,
>> etc. Then you could use:
>>
>>     --metadata-src="/usr/share/$APP_DIR/ctf"
>>
>> so that popt returns `/usr/share/app-dir-expansion/ctf`.
>>
>
> When I implemented it and I try to run it. I get a confused parser error:
>
> Command line error: Expecting value:
>
>     metadata-src=/foobar/ctf
>
> ---
>
> arg was:  --metadata-src="/foobar/ctf"
>
> and maybe that's the reason why I don't like libpopt now. :-)
>
> It's actually means babeltrace can not have "implicit shortcut args"
> e.g. "--clock-offset" with a string value (as popt string type)?
>
> Thanks for the answer and so fast...! :-)
>
> - Alex
>
> [0] http://man7.org/linux/man-pages/man1/babeltrace-convert.1.html


More information about the lttng-dev mailing list