IRC logs for #buildstream for Tuesday, 2017-11-21

*** mcatanzaro has quit IRC01:10
*** tristan has joined #buildstream05:24
*** jude has joined #buildstream08:02
*** bethw has joined #buildstream08:31
gitlab-br-botpush on buildstream@132-loading-external-plugins-works-without-explicit-requirement-in-project-conf (by Jonathan Maw): 20 commits (last: main.py: Fix app initialization) https://gitlab.com/BuildStream/buildstream/commit/4c73b85dbf6e84c710dc55bc756b02c7952ba76409:30
gitlab-br-botbuildstream: merge request (132-loading-external-plugins-works-without-explicit-requirement-in-project-conf->master: WIP: Resolve "Loading external plugins works without explicit requirement in project.conf") #125 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/12509:30
*** ssam2 has joined #buildstream09:47
*** valentind has joined #buildstream09:49
*** tpollard has joined #buildstream09:50
tristanssam2, just wanted to let you know that now we have Element.compute_manifest(), which should unblock your https://gitlab.com/BuildStream/buildstream/merge_requests/14009:54
ssam2excellent09:56
*** ssam2 has quit IRC09:57
*** ssam2 has joined #buildstream09:57
tristantlater, if I press the rebase button on your branch, am I going to see if it works with coverage pinned at 4.2 ?10:11
tristanis that a good idea ?10:11
*** bethw has quit IRC10:17
*** bethw has joined #buildstream10:36
tlatertristan: I think so10:38
* tlater will try that10:38
tristanthanks !10:38
tristanjuergbi, so I have been thinking a bit about logging in conjunction with recursive pipelines; maybe you noticed the chatter here in IRC some days back10:38
juergbiabout enabling logging early on?10:39
tristanjuergbi, I suppose that your branch at least partially changes things in that regard, as it needs that extra pre-step to fully load a pipeline10:39
tristanyeah10:39
juergbiimproving logging is still on my todo10:39
tristanIt's probably going to help Angelos's project for benchmarking, and will also clean some things up10:39
tristanalright... do you think it's something that can be postponed or does it need to land with the main recursive pipelines branch ?10:40
tristanjuergbi, I've been thinking about this a bit... and it would be nice to remove all that "ticker" code in favor of proper logging, but today it struck me... maybe all of our status logging should be going to stderr ?10:41
juergbii think something in this aspect will have to land with the main branch10:41
tristanOk10:41
gitlab-br-botbuildstream: Tristan Maat created branch tracking-changes10:41
juergbibut it could be a minimal approach with improvements coming later on10:41
tristanSo good to raise this now I think10:41
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11910:41
tristanjuergbi, mostly I wanted to just share some ideas in case you were going to address that stuff "anyway"10:41
juergbiyes, ta10:42
tristanjuergbi, one of the reasons we have the tickers (obnoxious things really) separate is for `bst show`10:42
juergbifor the curses-like UI part, stderr may not make sense10:42
tristanand that's the reason it goes to stderr while everything else goes to stdout10:42
tristanAh10:43
tristanSo needs some thought maybe - indeed some terminals might not like ANSI control codes happening on stderr ?10:43
juergbias long as stdout and stderr are connected to the same terminal, i don't expect any real issues10:44
tristanMy thoughts were, if it is simpler; do all logging on stderr - and only a few things in stdout10:44
juergbibut it would be a bit odd to use both10:44
tristani.e. reserving stdout for things which programs / scripts may want to consume10:44
juergbii'll give it some thought10:44
tristanSo I think we have like `bst workspace list` which prints some yaml10:44
tristanthat should go to stdout, and of course... the `bst show` content should too10:45
juergbias we only use the curses-like UI when we're connected to a terminal (where stdout and stderr are anyway the same), it may not be an issue to mix10:45
tristanbut now that we have some complex stuff to print ahead of the `bst show` result, we would want that stuff going to stderr10:45
tristanand only deliver the formatted, desired output to stdout10:45
juergbiyes, that definitely makes sense10:45
tristanthat approach should also let us safely kill those "tickers", which take up a lot of lines of code10:46
jonathanmaw\o/ jubilation! cmake-test didn't segfault!10:46
tristanonly for the sake of loading separately (initially so that `bst show` output would be parseable)10:46
tristanjonathanmaw, :)10:46
tristanjonathanmaw, yeah, its coming together, things are unblocking now that we side step that coverage bug10:47
juergbitristan: i.e., you'd just inline logging instead of going via tickers?10:47
gitlab-br-botbuildstream: merge request (132-loading-external-plugins-works-without-explicit-requirement-in-project-conf->master: Resolve "Loading external plugins works without explicit requirement in project.conf") #125 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/12510:47
tristanjuergbi, yes, we'd use the regular messaging stuff for that, enable the logging earlier; it would mean the summary will be printed after some initial loading logs; but that seems reasonable10:48
tristanjuergbi, also we'd want to do the loading with the "silent_nested" timed_activity() approach (silencing every message that is not in the 'unconditional' mask)10:48
tristanjuergbi, because at that stage, we interrogate caches and get a ton of annoying `git cat-file` host commands that we wouldnt want showing up in the master log10:49
juergbiok, sounds reasonable. will take a look10:49
juergbiyes, we don't want to print all of that10:49
tristannote that it also means that eventually we can parse the logs directly to make benchmarking results10:49
tristanwhich will be very cool :)10:49
tristantime the loads etc, maybe with an option to print finer grained timers and format the log lines in a convenient way for a benchmarking program to parse10:50
tristananyway, that's future stuff; but standardizing on logging opens the door for it :D10:50
tlaterjonathanmaw: \o/10:53
tristanand we haz fedora instructions now: http://buildstream.gitlab.io/buildstream/install.html#fedora ^_^10:57
* tlater frowns at gitlab only running one pipeline at a time10:58
tristanIt all depends on the day and direction of the wind10:58
tlatertristan: You told me I should have a look at this issue a couple of weeks ago, but I somehow never set up a MR for it: https://gitlab.com/BuildStream/buildstream/issues/14211:02
tlaterIirc I had a quick discussion with ssam2 about what you meant with a 'stack' of provenances11:02
tristantlater, myeah ... I need a refresher :-/11:03
* tlater isn't sure how to summarize, needs a refresher too11:04
tristantlater, so first step is: https://gitlab.com/BuildStream/buildstream/blob/master/buildstream/_options/optionpool.py#L22811:04
tristantlater, see how _yaml.composite() is in that try block ?11:05
tristantlater, that is a problem11:05
tlaterYup, but if we move it we can sometimes not get provenance11:06
tristantlater, that basically means that if we get an error from _yaml.composite() which prints provenance; we prepend a second provenance about the self.evaluate() conditional to it11:06
tristantlater, that is the other half of the problem11:06
tristantlater, _yaml.composite() has to *guarantee* that it will print provenance in it's LoadError()s11:06
tristantlater, the "provenance stack" idea... is to basically keep track of provenances while _yaml.composite() recurses11:07
tristanso that there is always a provenance for _yaml.composite() to print11:07
tristanat the entry point of it... there is always a provenance, because the passed node is _always_ a dict (or a "Mapping" more precisely) which has a provenance11:08
tlaterHm, wouldn't this be slightly less accurate than it was before?11:09
tristanNo, why ?11:10
tlaterRight, I didn't really read into where the parent is getting the provenance from11:10
tristanWe are currently printing the provenance of the option conditional statement when "anything" is problematic inside of a resulting composition11:11
tristanthis is incorrect11:11
*** valentind has quit IRC11:17
gitlab-br-botbuildstream: merge request (invoking_page_changes->master: Separated :show-nested: into individual calls) #157 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/15711:22
gitlab-br-botpush on buildstream@sam/canonical-push-urls (by Sam Thursfield): 4 commits (last: Check connectivity to remote cache on `bst push`) https://gitlab.com/BuildStream/buildstream/commit/1b6625f48d55224913f5a97ac1b31ad6ff4de3b011:24
gitlab-br-botbuildstream: merge request (sam/canonical-push-urls->master: WIP: Canonical push/pull URLs (no backwards compatibility)) #158 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/15811:25
gitlab-br-botbuildstream: merge request (sam/canonical-push-urls->master: WIP: Canonical push/pull URLs (no backwards compatibility)) #158 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/15811:26
gitlab-br-botpush on buildstream@tracking-changes (by Tristan Maat): 6 commits (last: Issue #113: Split tracking and saving in `bst build`) https://gitlab.com/BuildStream/buildstream/commit/f40aea65a397a56af3c7223fc0845d1704ec9b1111:47
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11911:47
tristannexus, so https://gitlab.com/BuildStream/buildstream/merge_requests/157 looks like a start, is that the right approach to documenting the UX ?11:49
tristannexus, are you planning to fill in some docs related to each command ? or add a separate doc which links to those ?11:49
tristannexus, also; please WIP prefix that; when I see a merge request without the WIP, it cries out to me: "I am a complete work and I am very ready to be reviewed and land on master !"11:50
gitlab-br-botbuildstream: merge request (invoking_page_changes->master: WIP: Separated :show-nested: into individual calls) #157 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/15711:51
tristan:)11:51
nexustristan: I was considering having the docs point to each of those commands as needed. That way it's useful for understanding exactly what you're doing when you run commands11:52
tristannexus, sounds like a better, human oriented approach I agree11:52
tristannexus, i.e. start out with "I want to build a project, what do I do ?" and... "When I've finished building the project, what can I do with it ? How can I get the output ?"11:53
tristanAnd move on to "Now I want to modify code and test the result", and "How can I modify this module and test it against something which depends on it ?"11:54
tristanthat kind of thing is sorely needed11:54
tristanthen, we'll want to link to this kind of docs from https://wiki.gnome.org/Newcomers/BuildSystemComponentBst11:54
tristannexus, also; try building GNOME on your machine, and ask questions about anything you want to understand :D11:56
nexusThat would make it fairly effective as a starter tutorial. I'd like for it to have enough of an explaination that from start to finish, you can look into what each thing you're doing actually does, so you can follow what's happening. As someone entirely new to this, i got utterly lost in the process11:56
nexuswill do11:57
* tlater 's branch also succeeds without a segfault now :)12:05
* tlater updates his issue on pycoverage12:05
nexus\o/12:11
nexus# Args:12:13
nexus 54 #     context (Context): The BuildStream context12:13
nexuswut does this mean?12:13
nexuswhat is "The BuildStream context"?12:13
tristannexus, in the source code ?12:14
tristannexus, do you need to know that ?12:14
tristanI mean, I can tell you; but I dont see how it is at all relevant to the UX12:14
nexustristan: i'm looking at another ticket that bethw gave me12:14
tristanonly needed for writing code12:14
tristanAh12:14
tristannexus, Ok so, the Context is the "invocation context" really12:15
nexusinvocation context?12:15
tristanit is mostly comprised of settings which are loaded from a collection of A.) The default configuration options.. B.) The user provided config file.. and C.) The command line options12:15
tristanWhere C overrides B overrides A12:15
tristannexus, it is also the central handle where logging is performed, and the frontend listens to it for messages propagated towards the user12:16
tristanso yeah, it's the context in which buildstream is invoked12:16
tristanthe invocation context12:16
nexusthanks :)12:17
gitlab-br-botpush on buildstream@tracking-changes (by Tristan Maat): 14 commits (last: Handle removed files from integration in compose plugin) https://gitlab.com/BuildStream/buildstream/commit/cecbbec7ae5a9e6f9021bb087427c41cdb2bd63312:34
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11912:34
tristantlater, many comments made; I'm not sure anymore that this is landing this week.12:51
tlaterAlright, I'll start working through them... Want to discuss any of them before you're gone?12:54
tristantlater, changing the whole philosophy of `bst build --track` to run two separate sessions is my main problem12:55
tristanI dont expect it to be easy12:55
tristanSo I'm sure it's going to take you some time12:55
tristanAlso, thorough test cases please for the wide variety of possibilities that are now opened with single/multiple --track and single/multiple --track-except options given12:56
tlaterYup, that makes sense. Do you think the `--track` option is alright as its defined here, i.e. when it can be specified multiple times and tracks each element recursively?12:57
tristanYes12:58
tristanSeems sane, although, it's annoying that you need to specify a target all the time12:58
tristanwhen probably the --track target is the target itself12:59
tristanbut meh, that doesnt matter immensely I guess12:59
tristanI suppose it can easily be improved after with a `--track-all` or `--track-targets` switch which automatically considers all of the build targets given, as recursive track targets13:00
*** bethw has quit IRC13:03
*** cs_shadow has quit IRC13:10
tlaterHm, would it be enough to run the tracking queue in the scheduler first and then call scheduler.run again afterwards with a different plan?13:12
tlaterOr does everything *have* to be done in the same invocation of scheduler.run?13:12
* tlater doesn't see anything that would keep the scheduler from being used like that13:13
jonathanmawtristan: do you have time to review https://gitlab.com/BuildStream/buildstream/merge_requests/125 ?13:13
*** bochecha has quit IRC13:15
*** bochecha has joined #buildstream13:15
* tlater realizes that's no different from what he did before13:16
tristantlater, all in the same scheduler, that was the point of doing it together in the first place, I spend almost a week making it work very nicely, I hold it dear13:17
tristani.e. when an element is tracked and fetched, it's ready to be built, building it starts before tracking all elements finish13:17
tristanthats the beauty of these scheduler queues13:17
tlaterOh, right, I didn't realize that13:18
tlaterYeah, I understand then, that's definitely wrong13:18
tristantlater, a side effect is that we *need* to start taking element state more seriously13:18
tristanas discussed here: https://gitlab.com/BuildStream/buildstream/merge_requests/126#note_4782515013:18
tristanwe already have some suboptimal things happening, and actually workspaced builds already have a bug13:19
tristanwell, not really sorry, they only have a bug in the incremental build branch13:19
tristanbut; they *do* have a bug whereas, their cache key is recalculated twice, once before and once after the build13:19
*** brejoc has joined #buildstream13:19
*** brejoc has left #buildstream13:20
tristan(although at least currently, the bug doesnt have bad side effects)13:20
* tristan was happy to see brejoc appear after so long !13:20
*** bochecha has quit IRC13:20
tristanoh well :-/13:20
tristanjonathanmaw, I took a look and made some comments13:20
*** bochecha has joined #buildstream13:20
jonathanmawta tristan13:20
tristanjonathanmaw, can I infer from that branch that using an external plugin must refer to it's "package name" or smth ?13:21
tristanIf so, is a "package name" even a thing ?13:21
tristanI.e. `kind: foo:bar`13:21
tristanI'm not sure if I'm reading that right, or if it's only in the guts of the tests and internal APIs which do that13:21
tristanjonathanmaw, that's the part I still feel iffy about13:22
ssam2i had to do "kind: buildstream-external:x86image" to use the x86image plugin13:22
jonathanmawtristan: yeah, it would check whether it finds a match for "foo:bar"13:22
tristanSo how do package names work ? Is that documented ?13:22
jonathanmawand like ssam2 said, when referring to external plugins, they're prefixed with the python package13:22
tristanHopefully they are not something that assumes "all plugins come from pip" right ?13:22
tristanOh crap13:22
tristanOk so, if we're going to have a "package name", it should be something we define13:23
tristanthere is no such thing as a "python package" as far as I'm aware13:23
tristanonly that pip provides the first discovery mechanism of a directory of plugins we can load from13:23
tristanif that implies python wants to have a "package name", it's not really any of our business13:23
ssam2a "python package" is any directory that contains a __init__.py file, to use Python's own terminology13:24
tristanIf we're going to have package names; if those are useful, then we need to be the ones defining them13:24
tristanssam2, there is no requirement for having an __init__.py in a directory of buildstream plugins13:24
tristanwe have one, and it's purely because not having it causes the docs to break13:24
*** bochecha has quit IRC13:25
ssam2it's needed for Python to consider it "a package". which is needed for you to be able to `import` it13:25
tristanIt is not13:25
*** bochecha has joined #buildstream13:25
tristanssam2, It is absolutely not needed for our loader (pluginsbase) to load plugins13:25
ssam2that's probably doing some trickery13:26
tristanour definition of a plugin has always been a file, _not_ a directory13:26
ssam2which is fine, i'm just pointing out that "python package" has a specific meaning to Python itself13:26
tristanYes, and I'm pointing out that if we're going to use a "name", we have to define and control what that name is13:26
ssam2sure. we could use the name of the directory that contains the file; that's what Python uses to control the name of "Python packages"13:28
*** bochecha has quit IRC13:35
*** bochecha has joined #buildstream13:35
tristanSorry I had to run out13:41
tristanssam2, jonathanmaw, I dont know what we have to do really, or if we need this package name at all, and where it can be defined13:42
ssam2supplying some kind of package name seems like a good idea13:42
tristanto clarify; the "right way" IMO for plugins to be installed, is for buildstream to install a pkg-config file13:42
tristanand for the pkg-config file to specify a build-time prefix resolved directory via a variable name13:42
ssam2otherwise, 3 separate individuals could publish repos containing 'vm-image' plugins, and maybe your project depends on other plugins from 2 of those repos13:42
ssam2which 'vm-image' plugin does buildstream use, in that instance?13:43
tristanwhich can be introspected by modules which want to install plugins13:43
tristani.e. "buildstream informs the module where it should install plugins"13:43
tristanthat is the sane thing; the pip thing is the ugly workaround we're living with "right now"13:43
tristanbecuase yuck, setuptools13:43
tristanAlso, I should mention that the *very first test case* I added to buildstream, was to ensure that separate projects have separate plugin namespaces13:44
tristanin anticipation of recursive pipelines13:44
ssam2that sounds like a good setup. I still think we'd want some kind of namespacing within /usr/share/buildstream/plugins13:44
tristanI.e. its totally possible for two separate projects to pull in a *different* plugin named "foo"13:44
tristanSo, maybe the project needs to declare which version of "foo" it wants, and the elements still need only refer to it as "foo"13:45
ssam2ah, that could make sense13:45
tristanNamespacing is fine, agreed it's useful, and maybe that's what the project could specify13:45
tristanBut it needs to be under our control13:45
tristani.e. what defines the name, etc13:45
tristanmaybe /usr/lib/buildstream/plugins has an index13:46
tristanwhich plugin installation can update with paths to where their plugins are installed, possibly even at what version13:46
tristanThat is all stuff we dont want to "solve right now"13:46
tristanbut the API is13:46
* tristan had to take a phone call, sorry for seeming to "storm out" or anything, was an inopportune moment13:47
tlatertristan: It's so that pip can find the directory it wants to load the file from - this is only required for pip plugins13:49
tristanI think that two plugins of the same name need not be supported in the *same project*13:51
tristanAlso, we want to veer away from parsing/deconstructing things that are represented in yaml, we do it for the aliases yes13:51
tristanSo if we wanted that, we could specify that `kind` could be a dictionary13:52
tristanbut still, probably not needed13:52
tristanWe can be doing this from project.conf13:52
jonathanmawok, if I understand this discussion correctly, we want to make as much plugin loading config happen in project.conf as possible, so the value of "kind" is just the element's name13:52
jonathanmawwhile current loading specifies plugins from pip with "$dist:$plugin_name", we should make the "$dist" value be defined as a source of plugins in project.conf13:53
tristanYes that is a good way forward, we probably want to really consider project.conf well13:54
tristanAnd we also probably want to consider locally loaded plugins; I'm not aware of any projects using that at the moment and it's acceptable to break at this time13:54
tristanIn which case; we probably want to remove the plugin-path attributes from the toplevel of project.conf and consider local plugins as a "separate plugin discovery method"13:55
tristanI.e. we probably want to be explicit about everything regarding a plugin, in project.conf13:56
tristana plugin is assumed if it's core buildstream13:56
tristanif a plugin needs to be discovered, it needs to specify the discovery method, and any further information required by that method13:56
tristanI.e. for a local plugin, it's discovered with a project relative path13:56
tristanfor a pip plugin, it's discovered with a pip "package name"13:57
tristanthat project declaration probably wants to be consistent and not provide different ways of specifying plugin sources13:57
tristanFurther, another question in the project.conf format is redundancy; what happens if I want to load 5 plugins from the same external non-core source ?13:58
tristanSo, maybe we need the format for this to group by sources; list the discovery method, any data needed by that discovery method, and a list of element/source names which are to be discovered by that method13:59
tristancurrently it looks like we have only: http://buildstream.gitlab.io/buildstream/projectconf.html#plugin-paths14:00
tristanand http://buildstream.gitlab.io/buildstream/projectconf.html#versioning14:01
tristanIt's debatable if we want plugin versioning to fall into the scope of `plugins:`, I think we probably should though14:01
jonathanmawtristan: ok, based off this, I've put together some suggested ways of formatting the data in project.conf: https://pastebin.com/LHscPegy14:08
jonathanmawI think the third one most closely matches what you want if we're replacing required-versions14:09
tristanI just did a draft too14:10
tristanhttps://bpaste.net/show/a86c0e26893914:10
*** bethw has joined #buildstream14:10
* tristan looks at jonathanmaw's draft14:10
tristanjonathanmaw, your last looks very similar to my draft14:12
tristanalthough a little bit different, my draft differs mostly only inasmuch as it is a little more verbose and explicit14:12
tristanAlso, I took the liberty of merging the versioning, and declaring the "core" plugin origin14:13
tristanThis makes version requirements of core buildstream plugins appear in the same way as external plugin version requirements14:13
tristanwhich I think is a good thing14:13
tristanjonathanmaw, I still like mine better :)14:14
tristanheh14:14
jonathanmawtristan: yeah, my third variation doesn't consider versioning for core elements14:15
tristanThere are few reasons though, for instance your draft uses a plugin specific attribute as a key in a dictionary14:15
tristanthat is not extremely clear14:15
tristanAlso, besides not being clear; it's totally plausible that a given plugin origin requires *more than one* origin specific attribute14:15
tristanwhich would immediately throw the parser into disarray14:16
jonathanmawtristan: also, do we want to use the ordering for how these origins are listed in the yaml as a way of specifying loading order?14:16
tristannot loading order no, but perhaps priority14:16
*** bochecha has joined #buildstream14:17
tristanjonathanmaw, I think we need not care about this right away though; currently I believe the practice is to error out if more than one plugin of the same name is reachable by the same project14:17
jonathanmawtristan: i.e. if the last one also provided a "git" source, it'd choose that one over any of the others?14:17
tristanjonathanmaw, however, it's a good point that in the future, we could use this to prioritize14:17
jonathanmawtristan: ok14:17
jonathanmawtristan: It'd give developers a way to prioritise their special sauce git source over buildstream's standard one, but I think since they could accomplish the same by removing it from their list of plugins in core, it's not a very high-priority task to consider.14:18
tristanthis of course leaves the base project format version declaration out of the picture14:19
tristanjonathanmaw, note that I wrote CAN in that section where I wrote MUST in the other sections14:19
jonathanmawyep14:19
tristanjonathanmaw, I dont think one MUST declare every plugin that they use from core14:19
tristanright14:19
tristanSo yes its a good point you make14:20
tristanjonathanmaw, that it can be useful, although I dont want that functionality to block the release14:20
tristani.e. for right now, I believe we raise a LoadError() if there is any name collision, and yes there is a shortcoming when one wants to "override the git source"14:21
tristanbut making that possible in the future does not break API14:21
tristanWhile inspecting warts... I wonder, will variable namespacing become an issue: https://gitlab.com/BuildStream/buildstream/blob/master/buildstream/data/projectconfig.yaml#L6 ?14:25
tristanI've been thinking, ever since implementing the strip-commands to break them down into separate macros14:25
tristanWhat is our strategy for effecting changes to the default project.conf ?14:26
tristanWhile retaining compatibility with all projects ?14:26
tristannot an easy question14:26
tristanI suppose that it's API, and that anything introduced as global variables in default project.conf *must* always be used in the predicted way, and can never change14:27
tristanOr, can be enhanced, but at least the same names must be used to achieve the same things14:27
tristanAlso, during stable iterations of BuildStream, changes to default variable values can *never* be made14:27
tristanBecause we've already concluded that artifact cache key is expected to remain stable at least for a single stable release cycle14:28
tristananyone care to throw some fuel on this fire ?14:28
tristan;-P14:28
tristanI should not that: the change I made to `strip-binaries` was a "compatible" change (it added new variables, but `strip-commands` still serves the same purpose), however it *did* change artifact keys14:30
tristanI guess moral of that story: https://gitlab.com/BuildStream/buildstream/blob/master/buildstream/data/projectconfig.yaml#L6 <-- if there is anything less than ideal that anyone thinks needs to be changed: "NOW is the time"14:32
*** tristan has quit IRC14:36
*** tristan has joined #buildstream14:42
tristannexus, the documentation link at https://wiki.gnome.org/Projects/BuildStream/ is the only documentation there currently is; and probably will be, I dont mind to break that down into separate links15:25
tristanbut what I dont want, is to have various different docs floating around the project15:26
gitlab-br-botpush on buildstream@tracking-changes (by Tristan Maat): 1 commit (last: _pipeline.py: Merge the track queue into the scheduler run) https://gitlab.com/BuildStream/buildstream/commit/2695b7dd68c9fc91cad29b963211e7126c0acaa815:26
*** mcatanzaro has joined #buildstream15:26
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11915:26
tristanfrom years of maintaining FOSS projects, it's been my experience that if you allow various tutorials and disparate wiki pages documenting a project, they will inevitably go out of date15:26
tristannexus, which is why I would prefer to keep all the docs maintained in one place as much as possible15:27
tristanso, if a part of the docs is a reference manual for authoring projects, and another part of the docs is a user manual for using BuildStream, that is fine; most importantly they are both a part of the buildstream git repo and maintaining them is in lock step with the code15:28
*** ssam2 has quit IRC15:30
*** ssam2 has joined #buildstream15:32
gitlab-br-botpush on buildstream@tracking-changes (by Tristan Maat): 1 commit (last: _pipeline.py: Merge the track queue into the scheduler run) https://gitlab.com/BuildStream/buildstream/commit/dc6c3c03c0a3310651117bdd6ff0c82d548826d515:54
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11915:54
ssam2i'm finding it really slow working with the converted GNOME modulesets15:56
ssam2like 3 minutes to run ldconfig for each build, another 3 minutes to run update-mime-database ...15:56
ssam2and many minutes to check out the files for (as an example) gnome-font-viewer15:56
ssam2top and iotop show pretty low CPU and IO utilization15:57
tristanssam2, that is odd, I experience long times but not that long15:58
tristanless than a minute for integration, but with decent SSD15:58
tristanthe base may have been growing, though15:59
ssam2this is with a fairly average HDD15:59
tristanssam2, I've been noticing slowness too, I'm not sure if it's "increased" or not16:00
ssam2so far it's checked out 2GB in about 6 minutes ... about 5MB/sec16:01
ssam2i would expect better when copying files from one place in the same partition to another...16:02
ssam2i think it must be something other than simply a slow disk16:02
tristanssam2, one thing is the fuse layer is applied only during integration commands16:04
tristanand it's currently not multithreaded16:04
tristanbut, I'm not sure just how much overhead that should be adding16:04
ssam2i'd expect bst to be high up in 'top' if that was the blocker, too16:04
tristanespecially that programs which run integration commands are typically not multithreaded16:05
gitlab-br-botpush on buildstream@tracking-changes (by Tristan Maat): 1 commit (last: _pipeline.py: Merge the track queue into the scheduler run) https://gitlab.com/BuildStream/buildstream/commit/d803da90550ba00ac444c89e3b30c4c4b8f6174516:09
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11916:09
gitlab-br-botpush on buildstream@tracking-changes (by Tristan Maat): 1 commit (last: _pipeline.py: Merge the track queue into the scheduler run) https://gitlab.com/BuildStream/buildstream/commit/6ecb76625ef700e4a1ce692b769827d5a0313d6e16:17
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11916:18
ssam2took 29 minutes to checkout gnome-font-viewer.bst in the end! that can only be a bug16:50
ssam23.1G in the checkout dir16:50
ssam2ok, update-mime-database is slow because fsync16:58
ssam2if I set PKGSYSTEM_ENABLE_FSYNC=0 in the environment it goes from 30 secs in my chroot to less than 1 second16:58
tlaterDoes the order in which we track elements matter?17:00
tlaterHmm, it probably does considering things like base-system take a long time to track.17:02
ssam2well, you could have a small base and then a huge application on top, either17:05
ssam2if we track from the base dependency upwards, we can start building sooner17:05
ssam2in general17:06
* tlater asks because he considered using a set() for track dependencies for a minute17:08
* tlater will just have to do without the neat set operations17:09
ssam2probably better to stick with list; unless it's cheap to resort again after17:10
tlaterI don't think it's very easy to resort after, unfortunately17:11
ssam2update-mime-database still slow when I disable fsync as part of the buildstream build :-(17:14
tristantlater, the order does matter yes17:19
tristantlater, you want the first tracked element to be the first one that is ready to build; you cannot know how long it will take to track the "base system" or whatever is at the bottom17:20
tristanbut you certainly want to unblock other tasks as soon as possible17:21
tristantlater, in any case; there is only one order17:21
tristanwhen track & build are combined, it's one scheduler17:21
tristanand build order should be used17:21
tlaterAs in, feed the tracking "pipeline" through plan?17:22
tlaterSo that we get the elements depth-sorted?17:22
tristanthere is no tracking pipeline vs build pipeline, it's one run through the scheduler17:23
tristanand should be depth sorted yeah17:23
tlatertristan: Yes, but we need to split it regardless, because some elements won't be 'tracked', only pulled/fetched/built - I'm doing it in one run of the scheduler now though ;)17:23
tristantlater, previously I suppose this was less complicated; we simply assume --all and then sort it17:23
tlaterI just need to make sure things are done in the correct order now.17:24
tristanAha17:24
tristantlater, so what changes here is that something needs to inform the TrackQueue whether to skip an element that is not selected for tracking or not17:24
tristanOr, just place elements that are not selected for tracking on the subsequent queue I suppose17:25
tlaterYeah, I went with the latter17:25
tristanyeah; that *seems* better17:26
tristananyway I wouldnt whine about that detail17:26
tlaterHm, if we mandate tracked elements are part of the build pipeline it is very easy to sort.17:26
tristanit does strike me though, that if we ever place a queue in *advance* of the TrackQueue, this will get more complex, while a direct "feed all elements through" approach would be simpler17:26
tlaterI suppose we can always cross that bridge if we get there? It doesn't seem too likely that we'll get another queue before that, does it?17:27
tristanyeah, I guess pull queue can only come after track queue17:27
tristananyway17:28
tristanbecause we need to track before we can know the cache key of what we want to check is pullable or not17:28
tristan(with non strict in play, and automated builders, `bst build --track` *will* produce a lot of cache keys that can be pulled and dont need building)17:29
tlaterThose don't have to be tracked though, do they? Would a warning if we aren't tracking anything suffice?17:30
tlater`bst build --track` doesn't feel like it should be used to track anything not related to the actual build.17:31
gitlab-br-botpush on buildstream@tracking-changes (by Tristan Maat): 1 commit (last: _pipeline.py: Merge the track queue into the scheduler run) https://gitlab.com/BuildStream/buildstream/commit/ec55d8d7af943336516e738a6f1c1fd5a0b4475817:32
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11917:32
*** valentind has joined #buildstream17:40
*** jude has quit IRC17:46
gitlab-br-botbuildstream: issue #159 (""BuildStream on your host" docs not accurate") changed state ("opened") https://gitlab.com/BuildStream/buildstream/issues/15917:47
gitlab-br-botpush on buildstream@tracking-changes (by Tristan Maat): 1 commit (last: _pipeline.py: Merge the track queue into the scheduler run) https://gitlab.com/BuildStream/buildstream/commit/d65bb3c91e0c655cb830f80084517a0b7366c40818:05
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11918:06
gitlab-br-botbuildstream: merge request (tracking-changes->master: Tracking changes) #119 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/11918:08
*** jonathanmaw has quit IRC18:09
*** ssam2 has quit IRC18:21
tristantlater, was on a phone call...18:25
tristantlater, what I mean is this...18:25
tristantlater, if you run `bst build --track` and you get a new revision for a source on an element18:25
tristantlater, after tracking, the cache key is calculated18:25
tristantlater, then, that element moves on to the PullQueue18:25
tristanWith the new cache key nice and ready...18:26
tristanit's *very* possible that that freshly tracked element *need not be built*18:26
tristanbecause it can now be pulled instead from an artifact share18:26
tristan(if it already exists)18:26
tristanAnd the chances of that, are much higher when not in strict mode18:26
tlaterRight18:26
tlaterPulling != fetching, sorry, confused them18:27
tristanAnything that is tracked *must also be fetched*18:27
tristanwell, unless it can be pulled18:27
tristanthe fact that currently tracking fetches as a side effect is an implementation detail of most/all Source implementations18:28
tristanbut that should eventually be improved18:28
tristantlater, the rationale behind this is that: It *should* be very cheap to ask remote linux.git "what is the latest commit sha for master"18:28
*** bethw has quit IRC18:29
tristanand after that in fetch(), it should be much cheaper to download *only the tree needed for that commit* than to fetch the entire history of linux.git18:29
tristantlater, currently it's implemented cheap and easy, but the design allows for this to be optimized18:29
* tlater understands, yeah, it is a bit stupid that we need to download the entirety of base-system - although for that particular case I wonder if there even is a better solution18:29
tristanfor ostree sources I believe it's already more optimized than this18:30
tristanwe really only download the refs we want; I *think*18:30
tristanwe just happen to be asking for larger payloads with ostree18:30
tlaterWishful thinking on my end then...18:31
tristanwell, at least I know that it's happened to me before that we had a "ref" object present, but not the actual file objects backing it18:31
tristanit probably can be better optimized than it is18:31
tristanbut we do have checks in place to ensure the backing object is there when checking ostree source consistency18:32
tristanhas_ref() or such18:32
tlaterThere's one more detail I want to quiz you on, but /me will leave you alone for tonight, it must be like 4 am over there at this point18:32
tristanpulling a base system anyway, is akin to installing an entire OS18:32
tristanit's about 3:30am yeah :)18:33
*** cs_shadow has joined #buildstream19:02
*** jude has joined #buildstream19:12
*** jude has quit IRC19:21
*** bochecha has quit IRC20:52
*** bochecha has joined #buildstream20:52
*** bochecha has quit IRC20:53
*** bochecha has joined #buildstream20:53
*** bochecha has joined #buildstream20:55
*** bochecha has joined #buildstream20:56
*** bochecha has quit IRC20:57
*** bochecha has joined #buildstream20:57
*** bochecha has joined #buildstream20:59
*** bochecha has joined #buildstream20:59
*** bochecha has joined #buildstream21:01
*** bochecha has joined #buildstream21:02
*** bochecha has joined #buildstream21:03
*** bochecha has joined #buildstream21:05
*** bochecha has joined #buildstream21:06
*** bochecha has joined #buildstream21:07
*** bochecha has joined #buildstream21:08
*** bochecha has quit IRC21:09
*** bochecha has joined #buildstream21:11
*** bochecha has joined #buildstream21:12
*** bochecha has joined #buildstream21:12
*** bochecha has quit IRC21:13
*** bochecha has joined #buildstream21:13
*** bochecha has joined #buildstream21:15
*** bochecha has quit IRC21:15
*** bochecha has joined #buildstream21:16
*** bochecha has joined #buildstream21:17
*** bochecha has joined #buildstream21:18
*** bochecha has quit IRC21:19
*** cs_shadow has quit IRC22:10
*** tristan has quit IRC22:44
*** mcatanzaro has quit IRC23:12

Generated by irclog2html.py 2.15.3 by Marius Gedminas - find it at mg.pov.lt!