IRC logs for #buildstream for Monday, 2018-09-17

*** tristan has joined #buildstream06:56
*** ChanServ sets mode: +o tristan06:56
*** iker has joined #buildstream07:00
*** bochecha has joined #buildstream07:33
gitlab-br-botbuildstream: merge request (tristan/contributing-guide->master: Update contributing guide) #801 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/80107:42
*** toscalix has joined #buildstream07:45
tristanadds68, I created !801 above ^^^ which replaces your CONTRIBUTING.rst commit, only change is the symbolic link07:50
tristanif it passes, I'll close your other MR07:50
*** finn has joined #buildstream07:56
*** tiagogomes has quit IRC08:01
*** tiagogomes has joined #buildstream08:02
gitlab-br-botbuildstream: merge request (tristan/contributing-guide->master: Update contributing guide) #801 changed state ("merged"): https://gitlab.com/BuildStream/buildstream/merge_requests/80108:09
*** rdale has joined #buildstream08:17
gitlab-br-botbuildstream: issue #602 ("Cannot mount disk image in sandbox") changed state ("closed") https://gitlab.com/BuildStream/buildstream/issues/60208:32
*** tpollard has joined #buildstream08:59
*** tiagogomes has quit IRC09:01
*** lachlan has joined #buildstream09:07
*** jonathanmaw has joined #buildstream09:23
laurencei poked around on the website this morning - some of the contents are really quite good, nice work folks09:25
Nexuswe have a website?09:26
Nexuswoo, buildstream.build is up \o/09:27
gitlab-br-botbuildstream: merge request (adamjones/contribution-guide->master: Update contribution guide) #796 changed state ("closed"): https://gitlab.com/BuildStream/buildstream/merge_requests/79609:27
tristanjuergbi, Related to this comment: https://gitlab.com/BuildStream/buildstream/merge_requests/797/diffs#note_101771156, I think we want to restructure this ArtifactCache <--> CasCache relationship09:31
tristanjuergbi, Do I understand correctly that a CasCache is more than just an ArtifactCache, and that an ArtifactCache is only one use case for a CasCache ?09:32
*** lachlan has quit IRC09:35
toscalixNexus: we still have two key pages unfinished. I would prefer to finish them and then make a little noise09:38
*** tiagogomes has joined #buildstream09:46
*** alatiera_ has joined #buildstream09:52
Kinnisontristan: Thanks for your comment on 797, I'm afraid I don't have the deeper understanding of what's going on there, so perhaps I should abandon the MR and let someone else tackle it who has more context?09:55
* Kinnison is only a very very lightweight dabbler09:57
Kinnisontristan: though a gut feeling I have is that if setup_remotes() should be called only once, it should probably gain a check and a BUG if it is called > 1 time :-)09:59
* Kinnison isn't sure if that fits with the style of code in BuildStream though :-)10:00
juergbitristan: I think something in that direction would indeed make sense. will try to take a look10:01
tristanKinnison, re your last, it does; and the way to do that is simply with `assert` :)10:06
tristanKinnison, any assertion triggers a BUG message with it's stack trace10:06
Kinnisontristan: aha, then perhaps I should add that in my MR and see if it splodes :-)10:07
KinnisonBut if juergbi is going to look at rearranging Artifactcache to encapsulate a CASCache rather than the current structure, I should perhaps leave things to him10:07
* tristan looks back at 79710:07
tristanKinnison, The problem I have with 797, is that I don't know why people instantiated a CasCache in the first place (or why they called it cascache instead of `artifacts`, as we call it everywhere else)10:08
KinnisonFair, I know so little about everything that I didn't even think of that :-)10:08
tristanKinnison, I have a hunch that I am right that a Cas should be a delegate and separate from ArtifactCache10:08
tristanSo when I asked the question "why", I am rather wondering, what are you guys doing with this remote execution stuff ? how do *you* expect the architecture to work ?10:09
tristanMaybe instantiating another one was intentional for some reason10:09
*** iker has quit IRC10:10
*** iker has joined #buildstream10:10
tristanFrom what I understand, there will also be a SourceCache, which is used for caching the results of staging sources and providing those to a buildgrid10:10
tristanAnd a SourceCache is not an ArtifactCache, but they both probably use an underlying CAS10:10
tristanMaybe it's the same CAS, maybe it's not10:10
KinnisonI fear mablanch or jmac needs to answer that unless juergbi knows10:12
tristanjuergbi, jmac, I will have to put together an overall architectural document soon; I think it would be good if we could sit down together and I can listen to what exactly the architecture is that you propose for all of this to fit together10:12
juergbiyes, I think it makes sense to separate the relatively low level CAS and the code that uses it for various purpose10:13
juergbis10:13
tristanI hope that we are not driving this through trial and error in implementation :)10:13
tristanI think also, we *might* want multiple CAS handles in the application, while they might share the same local store, they might have different remotes10:14
tristanBut I'm really unsure of that, I need to sit down and understand the intentions of how a BuildGrid is supposed to work10:15
tristanI.e. it makes sense to have a local CAS store for everything the client stores, but if everything is executing remote, it might also not make sense to ever store artifacts locally, but only serve up the sources10:16
tristanIf the end goal is to push the results to a remote artifact cache, that is of course not the same network as a build grid10:16
* tiagogomes wonders if not calling pull_tree() on the SandboxRemove is part of the plan for the rearranging10:16
tristanetc10:16
juergbitristan: why are you saying that the remote artifact cache is of course not the same network as a build grid? while various combinations are possible, it typically makes sense to use the same CAS for both purposes10:20
juergbior maybe I misunderstood you10:20
tristanjuergbi, It is possible I'm sure10:21
tristanjuergbi, That doesnt mean it makes sense that it is forced right ?10:21
juergbiright, but your 'of course' sounds like the split would be the typical case10:21
tristanAs, we already have allowances for multiple artifact caches, even if one of them is; it might not be the only one that is needed to push to / pull from for a given project10:21
tristanI sort of expect that the split is the typical case yes10:22
tiagogomesScripts and other unprocessed files would be both in the source cache and artifact cache. So there is an advantage of both being in the same CAS for deduplication purposes10:22
tristanjuergbi, it might or might not be typical, my expectation would have been you have your store in one place, and you might spin up a build farm at times10:22
juergbioverall most efficient solution would be single CAS infrastructure, afaict10:22
tristanthe build farm being rather more ephemeral than the store10:22
juergbiyou can certainly do that but the build farm would hopefully use the same store10:23
juergbinot providing its own10:23
tristanjuergbi, Ok but it's rather unrelated; I suppose the artchitecture still does not require that10:23
juergbiyes, agreed10:23
tristanSo anyway, what I'm expressing here is that I don't have a clear picture of how these components are intended to interact. In this specific case, I would hazard that one approach is to have a CAS handle which is not related to anything local at all10:24
paulsher1oodany chance we could migrate this community discussion to freenode?10:24
tristanjuergbi, The BuildStream client running on your machine, might inform the shared CAS on a build grid which is close to the workers, that it must upload the artifacts to a specific artifact cache server10:25
juergbithat's not supported by the protocol10:25
tristanjuergbi, In any case, there must be an intention before an implementation :)10:25
juergbiif you want to use multiple CAS, you have to push everything via client10:25
jmacThe intention from my side is that there is one CAS10:26
tristanjuergbi, So does the client need to be *on the grid* and store the CAS ?10:26
juergbithere must be a CAS server that is accessible by both the client and the grid10:26
tristanOr can I run BuildStream and execute everything on a remote grid ?10:26
juergbiother than that, the client can be anywhere10:27
juergbithe client uploads whatever is needed for execution to that CAS10:27
jmacOne CAS, locally, that has remotes defined10:27
juergbithe grid uses the same CAS to execute the build and uploads the output again to the same CAS10:27
tristanBut if the project says that there are multiple artifact servers to push to, and the user wants to run the build on a grid, the user will have to download everything from the grid on their own connection, and push it to the artifact servers themself10:28
juergbiyes10:28
juergbihence I don't think it's a very reasonable thing to do10:28
tristanSo that seems a bit suboptimal10:28
jmacProjects defining multiple push remotes isn't part of my plan at the moment10:28
juergbitristan: you'd want a protocol that supports remote-to-remote transfers?10:29
tristanjmac, However it is rather already a part of BuildStream afaict10:29
juergbialso seems a bit odd to have that client controlled10:29
tristanjuergbi, I am currently thinking, on the surface... "The project defines it's artifact cache(s) as usual"... "The user might have a build grid at their disposal"10:30
tristanjuergbi, that's my basic expectation which leads me to that angle10:30
tristanThe user might have permission to use the resources of a given build grid, to build any project they want10:30
juergbiit's far from an ideal overall setup10:31
tristanI.e. that is a choice/privilege of a user, not the project10:31
tristanIs it ?10:31
tristanjuergbi, Perhaps it's just a simple protocol from a BuildStream client to a BuildGrid server, which does everything on it's grid where everything is close, on behalf of the calling user, if they are authenticated ?10:32
tristanWhere the user never downloads any sources or artifacts onto their own computer ?10:32
juergbiremote source download is something that we have been thinking a bit about but not something planned out yet10:33
juergbihowever, it's mostly separate from the conversation we're having, imo10:33
tristanjuergbi, Ok so - What I want to make sure is that the implementation is design driven, and the design is not implementation driven10:34
tristanI don't have a clear picture here how joe blow user is going to use their own pet project and build it on a grid they have access to10:34
juergbithat is mainly the case but we don't have any plans for such remote-remote transfers10:35
juergbia configuration seems to be missing to mark a CAS remote as being the one to use for remote execution10:36
juergbiright now the regular push setting is used, afaict10:36
tristanThat is one point I was mentioning above yes, it seems that you might want different remotes for different purposes10:37
juergbiwith multiple push remotes the current logic doesn't make sense, although it will still work10:37
tristanWhich led me to, perhaps you might want a CAS handle without any local storage at all10:37
juergbithat's not on the plan10:37
tristanmultiple push remotes I think is certainly on the menu, we already do this at least in the case of junctions10:38
juergbiit could be discussed but I don't think we should try to change everything in one go10:38
tristanIt's also strongly requested, and makes sense, that we push to the toplevel project even for subprojects10:38
tristanI.e. the owner of a project should not have to trust the artifact servers of the projects they depend on, in order to be reliable to store their own artifacts10:39
juergbithe per-(sub)project config is indeed a bit a problematic point. should discuss this in general10:39
tristanThat has to be considered in design yes10:39
juergbiit's also an issue without remote exec, but remote exec makes it more pressing10:40
*** mohan43u has joined #buildstream10:41
tristanjuergbi, jmac; ok so my goal here is just to put together a clear architectural document of what everything should look like (not necessarily what it *is*), this will likely take some time and iterations10:47
tristanjuergbi, jmac, Do you think we can schedule a video chat later this week and you both can explain to me (A) What user stories you have considered  (B) How the intended architecture addresses those10:48
tristanThen we can move forward and I can use that input for the architecture, or I can furiously be upset about my favorite use cases not being supported :)10:48
tristanAlthough the latter is mostly just for dramatic effect10:48
jmacNo, I don't think so; I don't have those user stories10:49
jmacI can schedule a video chat, of course10:49
*** lachlan has joined #buildstream10:50
jmacNor do I think I have a clear written architecture other than the REAPI10:52
tristanOk so we need to make sure those are worked out10:56
tristanThe user story for the first iteration might be "You have to setup a build grid somewhere, and then you ssh into the build grid network and run BuildStream there"10:57
tristanI mean, we should be thinking first, how are users suppose to use it; then architecture for that - in those cases where the protocol is not sufficient, we need to update those protocols to do what we intend10:57
tristanjmac, I want to end up with a clear story of which component is responsible for doing what in the end picture, so that we can share that knowledge and everyone can code towards the same goals10:58
jmacMy only informal user 'story' at the moment is from a user who wants us to implement the REAPI10:58
jmactristan: Naturally.10:59
tristanright, it's a bit scary if at this point we don't have that :)10:59
gitlab-br-botbuildstream: merge request (willsalmon/outOfSourecBuild->master: WIP: out of source builds) #776 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/77610:59
jmactristan: It's a fairly familiar situation: You want things done properly, other people want features quickly, and I have to mediate between them11:01
juergbitristan: sure, we can have a chat this week. the current user story is that a remote execution user uses a single push CAS which is the same as what buildgrid uses11:08
juergbimore complex configurations are possible, but we don't have user stories / plans for those at the moment11:09
*** jonathanmaw_ has joined #buildstream11:10
*** jonathanmaw has quit IRC11:11
juergbi'ssh into buildgrid network' should not be the typical case. depending on the location / bandwidth of the client, doing things via ssh could be faster, of course, but I don't think we want to recommend this in general11:12
*** lachlan has quit IRC11:17
tristanjuergbi, Agreed; I very much like the idea that the user can run bst on their own machine, build and checkout the results, deploy an image to the rig sitting beside them, smoketest the results, etc; and that having access to a grid is just extra compute power11:19
tristanover ssh is annoying for this - anyway it's fine if there are limitations in an initial implementation :)11:19
juergbithe main limitation in the initial implementation is that some things still have to go through the client, requiring bandwidth, e.g. source fetching. i.e., the initial version is helpful to alleviate a local CPU bottleneck but it still requires network bandwidth11:22
juergbiin the future we can hopefully improve this aspect further11:22
juergbihandling of multiple independent CAS networks in an efficient way is to me lower priority than that11:23
tristanYes, and sorry I have not had time myself to get involved in the remote execution discussions in the last months since GUADEC - for now I'm mostly lagging behind and want to paint a clear picture :)11:23
juergbithat's definitely understandable :)11:23
*** lachlan has joined #buildstream11:33
*** solid_black has joined #buildstream11:51
gitlab-br-botbuildstream: issue #500 ("While caching build artifact:  "Cannot extract [path to socket file] into staging-area. Unsupported type."") changed state ("closed") https://gitlab.com/BuildStream/buildstream/issues/50011:55
gitlab-br-botbuildstream: merge request (willsalmon/outOfSourecBuild->master: WIP: out of source builds) #776 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/77611:57
KinnisonWow, there was a lot of discussion while I was elsewhere :-)12:03
Kinnisontristan, juergbi: For now, should I pause/abandon !797?12:04
tristanKinnison, I think we can at least go ahead with using the shared ArtifactCache instance, and not re-initializing the remotes12:16
tristanKinnison, I made some additional comments which I don't think need to be considered as blocking the patch from landing12:17
Kinnisontristan: Okay, I'll look at it later, thank you for taking the time12:17
* Kinnison really appreciates it12:17
tristanKinnison, Only if jmac or juergbi have a reason to want a separate CasCache instance would I consider dropping it12:17
tristanBut that didn't seem to happen12:17
KinnisonHeh12:18
tristanI will work on getting a better understanding on "how it is supposed to work" in the immediate future12:18
tristanjuergbi, Have a moment to brainstorm something with me ?12:24
tristanI have just written up a proposal, but now I'm not sure anymore if I want to send it ;-)12:25
tristanheh12:25
tristanAnyone is welcome to brainstorm for that matter, of course12:25
tristanSo the problem is that; as mcatanzaro raised in his talk at GUADEC, BuildStream is unusable for developing applications; plain and simple, it's because of launch time of `bst shell`12:26
KinnisonWhat makes the launch of bst shell slow?12:26
KinnisonHas it been profiled?12:26
tristanWhen reviewing what we had done to make BuildStream better for developing Flatpaks, Alex also raised that he wondered why we run the integration commands before the build instead of after; like flatpak-builder does12:27
tristanThe biggest bottleneck to launching a shell is clearly running the integration commands12:27
tristanSo, my proposal ran along the lines of caching the integrations post build, perhaps optionally12:27
* Kinnison suggests that would be good, and that actually jmac's work in the RE arena moves us a little toward that12:28
tristanAnd only integrating on-demand when starting a build (launching a shell being pretty equal to starting a build)12:28
Kinnisonsince RE allows caching of actions, and integration commands are actions, so we have intermediate integrated things cached (almost) by side-effect12:28
tristanSo if two elements share the same set of dependencies, and the second element starts after the first has already completed, the second element does not need to integrate12:28
Kinnisonindeed12:28
Kinnisonthat'd be excellent IMO12:28
tristanHowever it also means potentially more integrations overall12:29
KinnisonWhy would it be more overall?12:29
tristanSome that are unused12:29
tristanBecause it is fairly rare that multiple elements share exactly the same set of build dependencies12:29
KinnisonSo I'd suggest we make the keys which hold integrations to be weaker than those holding artifacts12:29
Kinnisondon't integrations run at various points during sandbox construction?  Or is it only immediately before a build?12:29
tristanSo we don't really know if running the same set of integration commands produces the same output, if run against a differing set of dependencies12:30
tristanAlways immediately before a build; actually this is an implementation detail of various plugins (complicating the implementation a bit more)12:30
KinnisonAaah12:30
tristanClearly, BuildElements would benefit from this12:30
* Kinnison thought integrations were run as built elements were staged into the sandbox12:30
* Kinnison misunderstood12:30
WSalmonskullman, juergbi , etc, whats the best way to force the chroot sandbox? esp. in tests. can i just add a --addopts argument?12:31
* Kinnison would have to ponder further, do you have a brainstorm/proposal draft written up which I could read tristan?12:31
tristanSo, for a developer, they might be more forgiving that a build finishes with integration commands, but annoyed that it costs integration commands when they want a shell to launch12:31
tristansec12:32
skullmanWSalmon: BST_FORCE_BACKEND=unix python3 setup.py test --addopts -x\ --integration12:32
WSalmonskullman, Many Thanks!12:32
tristangitlab slooowwwwww12:33
WSalmonthat did it, test fails, woop.... thanks skullman12:34
tristanKinnison, https://gitlab.com/BuildStream/buildstream/snippets/175460112:35
* Kinnison takes a look12:36
tristanKinnison, that is my half baked proposal12:36
tristanSo, there is another approach I was thinking of a while back, and I wonder if it, or a combination of both might be smarter12:36
tristanThat is https://gitlab.com/BuildStream/buildstream/issues/46412:37
Kinnisontristan: would it be sensible to integrate only the top level elements named in the build invocation?12:37
tristanIt basically says that "We integrate for certain purposes" like integrating for a build, vs integrating for the purpose of running, vs integrating for the purpose of creating a bootable image12:37
Kinnisontristan: So only doing that post-build integration for those elements named12:37
tristanKinnison, Well, I'm rather worried that that specific element is also the one which the developer is working on in their edit/compile/test, but also no12:38
persiaNote that performing integration post-build will be wasted for some integration commands (like regeneratng ld.so cache).12:38
tristanKinnison, things need to be integrated before running consecutive builds; for instance `ldconfig` is an integration command12:38
KinnisonTrue12:38
tristanpersia, Right, that's why we need to integrate on demand pre-build *anyways*, unless a cached integration is found12:39
KinnisonI suppose the number of leaf elements ought not outweigh the number of intermediate elements, so always post-build integrating ought to be valuable12:39
tristanSo, that means in the edit/compile/test loop, we still run them, which is still bad12:39
tristanThen I got to thinking, what if we were to reuse the integration of the element's dependencies at build time ?12:40
tristanStill it has problems, but only on a subset of applications12:40
KinnisonCan we do some kind of analysis of whether or not the dependency chains tend to be simple element -> simple element -> simple element or if it tends to be element -> {elements...} -> ...12:40
persiatristan: Also, maybe we need more words,  I can think of several cases where post-build is fine, but others where it needs to wait until the target environment is ready.  Using two words for this might be better than trying to eithr duplicate effort or determine type in advance.12:40
Kinnisoni.e. do we tend to get linear chains12:40
tristanE.g., a UI application which installs icons, doesnt get their icons included in the icon cache12:40
tristanKinnison, With gnome-build-meta and freedesktop-sdk as a sample, I normally build with 4 builders enabled on my laptop12:41
tristanit is rare that I have only one build going on12:41
Kinnisontristan: that implies either a very wide dependency set, or else a number of linear chains12:41
tristanit happens maybe near the end of a webkit build, or near the end of an llvm build12:41
KinnisonBasically a post-build integration only helps if you want to shell into *that* element, or if there are elements which depend exactly on the just-built element and its build-dependencies, and no more.12:42
tristanSo; I got to thinking that; maybe an element could advertize whether or not it "Contributes to an integration"12:42
persiaKinnison: While I've not built many systems with BuildStream, depdendency maps from other software collections suggest that it is often single-threaded until some base is available, than widely parallel until approaching completion, with the remaining few linear chains being completed at the end of a build.12:42
tristanKinnison, Think of this for instance... a C library contributes to the integration of ld.so.cache, while a font contributes to an fc-cache integration12:42
KinnisonIt's very hard to know if element A's files contribute to the result of element B's integration commands, unless you have a way to know if the files were accessed (or even enumerated)12:43
KinnisonNot least it requires knowledge backward through the tree (or forward, depending on your viewpoint)12:43
tristanYes, I don't see how that could be automated, but it *could* potentially be annotated12:43
tristanSo we could potentially paint the fc-cache integration with a domain name "fonts"12:44
KinnisonIf integrations could list sensitivities then that might help12:44
persiaKinnison: a post-build integration may also coincidentally help if the integration detail doesn't depend on other parts of the system (or depends in a compatible way: e.g. determine whether to include some stanza in a config file only if some optional dependency is on the system: not including the stanza continues to work for every possible system without the optional dependency)12:44
tristanAnd later paint elements which contribute to it with "fonts"12:44
Kinnisontristan: Effectively sensitivity lists.  A bit like dpkg triggers in Debian's infrastructure?12:44
persiaPlease, not annotation.12:44
persiaEverything interesting that can be done with annocation can be automated better.12:44
tristanpersia, I'm not sure how, how could we possibly know ?12:45
Kinnisontristan: So an ldconfig integration lists the dirs relevant to it, and then any element whose outputs include stuff in those dirs is automatically noted as contributing on that integration12:45
persiatristan: Instrumentation12:45
Kinnisontristan: Ditto fc-cache for font directories12:45
tristanpersia, yes but more specifically12:45
Kinnisontristan: and any integration not listing a sensitivity set is a WARNING and assumes /12:45
tristanOk well, maybe as a starting point, we could have a glob pattern with an integration command set12:45
tristanI.e. "I need to run whenever .foo files are installed into /usr/share/foo"12:46
KinnisonYeah a list of globs could be a good start12:46
Kinnisonldconfig would say something like "/**/*.so*"12:46
Kinnisonas a very wide-ranging glob12:46
Kinnisonor could be more carefully limited to the lib dirs by a more savvy element author12:47
tristanOk, that is sort of where I was heading, minus the useful instrumentation idea you add here, after writing my proposal and sort of debunking it myself :)12:47
Kinnison:-D12:47
Kinnisonbrainstorming is always useful12:47
persiaMy imaginary element author finds this too frustrating to debug to be worth doing and spends most of their days deleting entries, as many linux desktop users do with pulseaudio12:47
tristanThis will still involve caching, and at what level is unclear12:48
persiaPerhaps we drop "integration commands" entirely, and instead take deeper advantage of BuildStream's pipelining model?12:48
tristanI think this also probably needs the option of annotations, only to be used for special cases; there I am not completely sure12:48
persiaSuch than an "integration" just processes some element into some integrated element, and we can cache that normally?12:48
Kinnisonpersia: an element author who is frustrated just skips the annotation and bst can't optimise for them12:48
Kinnisonintegration implies element+others12:49
Kinnisonyou don't integrate a single element in isolation12:49
tristanRight, you do not - and imposing this structure on project authors is also yuck12:49
persiaKinnison: If the automation can do automation user-invisibly, then the user has no lever to tweak.  If you give a user a lever, they will either try different positions, or try to remove the lever.12:49
persiaOur current implementation of "integration" implies that one builds a sandbox and runs some code to put the sandbox in a new state.12:50
Kinnisonpersia: So automation can only do it post-hoc and can't safely transfer that knowledge from build to build12:50
persiaI don't really understand how this is functionally different than "build".12:50
tristanpersia, I think that already the idea of a "list of globs which accompany an integration command set" is effectively a lever, right ?12:50
Kinnisonpersia: integrations affect the sandbox as a whole, rather than producing new content in isolation12:50
persiaKinnison: There's no reason automation can't cache, but reverse construction of globs requires levels of meta-computation not usually considered easily available.12:51
persiatristan: Yes.12:51
Kinnisonpersia: right but automation caching can't know at what point decisions were made12:51
tristanRight, an integration is a filesystem permutation which is sensitive to what is inside the filesystem tree12:51
Kinnisonpersia: If something readdir()s /lib that doesn't mean that it only cares about /lib, it might notice a special trigger filename in there to read the entirety of /bin for example12:51
tristanIt can do unpredictable things, including even removing files12:51
persiaFirstly, we have other tooling that notices changes to the sandbox as a whole, and calls that "new content".12:52
Kinnisonpersia: this means it's nearly impossible (in the turing completeness sense) to understand what happened purely by looking at what IO was done12:52
persiaSecondly, who cares when something happened, as long as we capture input, output, and results over a period of time?12:52
persiaAnd Thirdly, are we assuming we have no means to notice reads or writes that makes this complex?  Remember, automation is good at overwhelming amounts of detail in ways humans are not.12:53
tristanpersia, Ok so; practically speaking; a compose element does this12:53
persiatristan: Yes.  That is where I was going with that idea.12:53
tristanpersia, however introducing a compose element between each build is strange, and plausibly costly12:53
persiaCan it be made less expensive if we assume it always happens?12:54
persiae.g. keep the sandbox around for an automatic second modification?12:54
tristancurrently it's rather costly; it only *might* be almost free if virtual filesystem and on demand staging is as awesome is... well really damn awesome12:54
Kinnisontristan: I need to prep for meetings right now.  Good luck with your brainstorming, and I'll look over !797 when I'm done either later today or first thing tomorrow.12:54
tristanpersia, Right, in that case it is by design "not another element"12:54
tristanpersia, which is pretty much what we have12:54
persiaFair, and runs into the "does this result actually help?" problem.12:55
tristanpersia, or rather, we do it before hand, but one element one sandbox one artifact in general is the design; you are moving it back to a side effect12:55
persiaI just think globs are nearly impossible for automation to generate, and don't trust users to use them responsibly.12:56
tristanI'm not entirely clear at what can be cached and when12:56
tristanpersia, BuildStream *will not* grow it's own internal understanding of integration commands, that must be provided to BuildStream in some form12:56
tristanpersia, however note that the globs we're talking about, are defined once12:57
persiaI think "what can be cached and when" depends on the contents of both the integration commands and the filesystems they run against.12:57
persiaI remember a discussion about build avoidance, wherein there was some tracking of what  files in a filesystem were used when generating output.12:57
persiaI imagined that a similar technique could be used for integration avoidance.12:57
persiaBoth share the property that they need to understand when a new file will start being used for build/integration.12:58
*** tristan has quit IRC13:00
*** tristan has joined #buildstream13:09
*** ChanServ sets mode: +o tristan13:09
tristanoops13:10
tristan<tristan> persia, I.e. if your system uses a C library and has a C runtime, then in the declaration of your C library producing element, you will define an `ldconfig` integration command, which needs to be run when files are added in `/lib/`, `/usr/lib`, etc13:10
tristan<tristan> persia, That build avoidance stuff afair is tied tightly to the not strictly deterministic approach of supporting incremental builds13:10
tristan<tristan> persia, i.e. rather an optimization for a second class citizen type of build13:10
* tristan sees those missing from the log, so must not have made it to the channel13:10
tristanStill it's hard to see what can be cached, you cannot cache the removal of a file, and you cannot realistically combine integrations on top of staged artifacts13:11
tristanSo, maybe the best you can do is assume as a rule, that staging an artifact does not overwrite the result of an integration command13:12
tristanThen you could cache integrations of sets of elements, and only stage the remaining artifacts which did not require any additional integration on top of that13:12
tristanLooking messy here13:12
*** solid_black has quit IRC13:18
*** tristan has quit IRC13:20
*** ikerperez has joined #buildstream13:28
*** iker has quit IRC13:29
*** finn_ has joined #buildstream13:30
*** finn has quit IRC13:32
*** tristan has joined #buildstream13:36
*** ChanServ sets mode: +o tristan13:37
persiaThanks for the repost.  Yes.  Very messy indeed.  I don't like annotations, but if they actually speed up things fast enough, they may be useful.13:44
persiaOn the other hand, if we can just cache the results of integration run at shell time, so only the first run is a bit slow, that might achieve most of the benefits that are expected with annotations, without the complexity.13:45
*** ikerperez has quit IRC14:16
*** iker has joined #buildstream14:17
*** abderrahim has quit IRC14:45
*** abderrahim has joined #buildstream14:46
*** alatiera_ has quit IRC14:52
*** alatiera_ has joined #buildstream14:55
*** finn_ has quit IRC15:00
gitlab-br-botbuildstream: issue #657 ("Setup our own x86_64 runners") changed state ("opened") https://gitlab.com/BuildStream/buildstream/issues/65715:02
juergbiNexus: fyi: https://github.com/projectatomic/bubblewrap/commits/wip/WSL15:11
*** finn_ has joined #buildstream15:13
Nexusjuergbi: thanks, i found that a while ago i think, afaicr the only thing it doesn't have is FUSE15:13
juergbiright, it doesn't help with the FUSE issue15:13
Nexusyeah :/ i think it'll be a while before that gets put in by Mike Rosoft15:15
gitlab-br-botbuildstream: merge request (willsalmon/outOfSourecBuild->master: WIP: out of source builds) #776 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/77615:44
*** iker has quit IRC15:55
*** toscalix has quit IRC15:56
*** iker has joined #buildstream15:56
*** iker has quit IRC16:01
gitlab-br-botbuildstream: merge request (richardmaw/fix-chroot-sandbox-devices->master: fix chroot sandbox devices) #781 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/78116:25
tpollardfor anyone hacking on bst master whilst consuming freedesktop elements this might be of use https://gitlab.com/freedesktop-sdk/freedesktop-sdk/issues/38416:44
*** dtf has quit IRC16:54
*** finn_ has quit IRC17:11
gitlab-br-botbuildstream: merge request (jonathan/pickle-yaml->master: WIP: Add a cache of parsed and provenanced yaml) #787 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/78717:12
*** jonathanmaw_ has quit IRC17:30
*** lachlan has quit IRC17:53
*** finn has joined #buildstream17:57
*** cs-shadow has joined #buildstream18:03
*** xjuan has joined #buildstream18:19
*** tristan has quit IRC18:20
*** xjuan has quit IRC18:27
*** xjuan has joined #buildstream18:31
*** toscalix has joined #buildstream18:47
*** tristan has joined #buildstream18:48
*** xjuan has quit IRC19:07
*** lachlan has joined #buildstream19:12
*** rdale has quit IRC19:16
*** lachlan has quit IRC19:19
*** finn has joined #buildstream19:19
*** xjuan has joined #buildstream20:05
gitlab-br-botbuildstream: issue #658 ("Conditionals not supported in element overrides") changed state ("opened") https://gitlab.com/BuildStream/buildstream/issues/65820:34
*** alatiera__ has joined #buildstream20:59
*** alatiera_ has quit IRC21:01
*** alatiera_ has joined #buildstream21:02
*** alatiera__ has quit IRC21:03
*** alatiera__ has joined #buildstream21:05
*** alatiera_ has quit IRC21:06
*** tristan has quit IRC21:14
*** bochecha has quit IRC21:23
*** alatiera_ has joined #buildstream21:27
*** alatiera__ has quit IRC21:28
*** alatiera__ has joined #buildstream21:35
*** alatiera_ has quit IRC21:37
*** alatiera_ has joined #buildstream21:49
*** alatiera__ has quit IRC21:50
*** alatiera__ has joined #buildstream21:52
*** alatiera_ has quit IRC21:54
*** alatiera_ has joined #buildstream21:57
*** alatiera__ has quit IRC21:58
*** alatiera__ has joined #buildstream21:59
*** alatiera_ has quit IRC22:01
*** alatiera_ has joined #buildstream22:15
*** alatiera__ has quit IRC22:17
*** alatiera_ has quit IRC22:19

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