IRC logs for #buildstream for Tuesday, 2018-04-10

*** bethw has joined #buildstream00:04
*** bethw has quit IRC00:49
gitlab-br-botbuildstream: merge request (reset-all-workspaces->master: Add option to reset multiple workspaces) #374 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37401:13
*** Prince781 has joined #buildstream02:40
*** Prince781 has quit IRC04:07
*** tristan has quit IRC05:06
*** tristan has joined #buildstream05:35
gitlab-br-botbuildstream: issue #352 ("Race condition: Incorrect saving of "running files" in workspaces.yml local state file") changed state ("opened") https://gitlab.com/BuildStream/buildstream/issues/35207:13
tristantlater, juergbi ^^^^ issue 352, oops.07:13
juergbiah, crap, yes, that should definitely be in the main process07:16
tristanjuergbi, I'm also looking at extending the workspaces.yml for https://gitlab.com/BuildStream/buildstream/issues/34607:17
tristanwhich needs something similar07:17
juergbiyet another case of complexity due to missing separation between pristine workspace sources and build directory07:18
juergbiI really don't want to keep that long term07:18
tristanthe running files thing ?07:18
juergbiyes07:18
tristanYeah I can't say I really understand completely what it's for07:18
juergbiit's needed with the current way we handle workspaces07:18
tristanI noticed the commit says we can remove it once we have failed build artifacts07:18
juergbiyes, if we also create artifacts for failed workspace builds where we record the dependencies, we don't need the running files07:19
juergbibut we'd still have to record the failed builds07:20
tristanSo my case fwiw, is that basically: The plugin decides where to stage it's sources in the sandbox; a natural choice is `self.get_variable('build-root')` but that is not the law afaics07:20
juergbihm, isn't this recorded in the sandbox instance?07:21
tristanSo, now that workspaces are mounted, `bst shell --build --sysroot /path/to/bst/created/sandbox` ... doesnt know how to retrieve that information07:22
juergbiah, after the fact07:22
tristanI.e. the same thing that happens when we give the user the opportunity to debug interactively07:22
tristanSo, I think recording that in workspace.yml would be a good solution07:23
tristanWhile looking at how I might serialize that, I stumbled on #352 :)07:23
tristanSo in any case, whether it is running files, or a failure or something, there is still data we'll want to record for whatever running files is for07:23
juergbiif we allow specifying the sysroot, the path could theoretically have changed07:24
tristanCould it ?07:24
tristanjuergbi, that path is a sandbox relative path07:24
tristanit could have changed with code changes to the plugin07:25
tristanwhich is plausible but rather an outlier07:25
juergbithe element could have switched kind07:26
juergbiunlikely, though07:26
tristanheh quite07:27
tristanIt could be re-inforced with better error checking for that, if we eventually need that07:27
tristanBut in *any* case, I think it's clear that we need to send back information about workspaces to the main process for serialization-upon-task-completion07:28
tristanWhich could be handled by the Queues at .done() time07:28
tristanMaybe we can leverage the already existing Workspace._to_dict() stuff07:28
tristanfor that07:28
tristanjust send the whole workspace serialized back over the wire, replace it inline and save07:29
juergbiyes, probably makes more sense than inventing another interface for that07:31
tristanAlso has the advantage of "just working transparently" for whatever changes might be made to a workspace in a task07:32
tristanno matter how workspace metadata evolves07:32
*** toscalix has joined #buildstream07:35
*** noisecell has joined #buildstream07:48
*** noisecell has quit IRC07:59
*** noisecell has joined #buildstream08:03
*** noisecell has quit IRC08:03
*** jonathanmaw has joined #buildstream08:46
tlatertristan: On #352, do we have the same issue if we try to run two instances of buildstream in the same project?08:51
tlaterIs that even a use case we care about?08:51
tristantlater, I care a lot less about that09:00
tristantlater, multiple projects using the same caches is important to consider; multiple parallel running instances much less so, parallel instances running for the same project _and_ same directory... very low chance of that ever happening09:01
*** noisecell has joined #buildstream09:01
tristanmaybe we have to eventually try using locks to ensure better robustness in those possibilities; but I dont think it's pressing09:02
tlaterHm, I have no idea how to neatly propagate this state to the main process09:11
tlaterIt certainly must be calculated when staging the dependencies09:12
*** dominic has joined #buildstream09:15
tristantlater, I'm doing it now09:19
tristantlater, I need it anyway to solve https://gitlab.com/BuildStream/buildstream/issues/34609:19
tlaterAlright, would you mind giving me a heads up when you have something pushed? I really want to see what it *should* look like, just to actually understand buildstream's multiprocessing properly.09:21
*** dominic has quit IRC09:22
*** dominic has joined #buildstream09:22
tristantlater, sure I intend to :)09:23
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34709:50
*** aday has joined #buildstream09:59
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34710:06
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34710:09
*** valentind_ has quit IRC10:10
gitlab-br-botbuildstream: merge request (richardmaw/fix-unit-test-hang-on-crash->master: Fix unit tests hanging when there's an exception in a sandbox run) #375 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37510:11
tristantlater, you do have a test case in place ensuring that this 'running_files' mumbo jumbo is doing it's thing right ?10:16
tlaterI thought I did, but I'm not sure I trust it anymore10:17
tristanI just want to make sure I didnt break anything while pushing this10:18
tristanit's "just about done" now, so I can move on and fix 346 after this10:18
tlatertristan: Well, the test I wrote is in integration/workspace.py10:19
tlaterIt doesn't try building multiple elements, though10:19
tlaterSo it won't capture the issue you're solving10:19
tristantlater, will it break if running files mumbo jumbo doesnt get serialized ?10:19
tlaterYeah, it should10:19
tristan346 is a different issue10:19
tristanOk good, thanks :)10:20
* tristan is thinking of adding a utils._is_main_process() utility, and peppering the codebase with some assertions based on that10:22
tristanwould be at least good to add that assertion to Workspaces.save_config()10:22
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34710:25
tlaterYeah, I think this might be handy. I've been bitten a few times while working with workspaces now, I can see this being incredibly easy to overlook.10:26
* tlater realized his two most recent branches *also* have this problem10:26
juergbiwe also talked about moving away from the fork() model at some point10:27
jmacWhat's the lifetime of logfile stored in /.cache/buildstream/logs/ ?10:27
tlaterjmac: I *think* that directory isn't flushed currently, but it might be flushed with non-failing elements like $cache/build/10:29
tlaterOther than that I don't think logs have a lifetime10:30
tristanjuergbi, interestingly, passing data around the way we do would not get in the way of moving to a threading model :)10:30
tristanjonathanmaw, just a thought passing through my mind... regarding junctioned element addressing: It would also unlock the ability to open and work with cross-junction workspaces :)10:30
tristantlater, what is the desired functionality for these running file thingamabobs when you run `bst shell --build workspaced/element.bst` ?10:35
tlatertristan: It depends on the dependencies of that element10:36
tlaterIf any of its dependencies had files that were updated since the last time that element was built, those files should be recorded - if I recall the functionality correctly.10:37
tlater`tests/integration/workspace.py::test_workspace_update_dependency_failed` tries to test that10:38
tristantlater, it tries to test it using `bst shell` ?10:38
tlaterOh, no, it doesn't10:39
tlaterHm10:39
tristanI'm asking about bst shell, and what is expected.10:39
tristanseems to me strange that a bst shell invocation should modify the state10:39
gitlab-br-botbuildstream: merge request (tristan/workspace-serialize-writes->master: serialize writes to workspaces.yml) #376 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37610:40
tlaterHm, is the workspace mounted for bst shell?10:40
tlaterIf it is, then I think it's still required10:40
tristantlater, that is issue #34610:40
tristantlater, i.e. shells for workspaces regressed ever since we started mounting them10:41
tlaterAh, so we don't want to mount it anymore10:41
tristanit's all in the backlog...10:41
tristanYes we want to mount it10:41
tristantlater, also, 346 is specifically about running bst shell on an existing sandbox; it is already mounted correctly without that case (sorry wasnt clear)10:42
tristanusing bst `shell --build --sysroot ...` on a workspaced failed build sandbox, will fail to mount the workspace10:42
tlaterIf `bst shell` mounts, I think the expectation is that running_files is updated with any files from updated dependencies.10:43
* tlater needs to double check though10:43
tristantlater, so basically you are saying that A.) Running build, track, build... or B.) Running build, track, shell, build... is going to make the last 'build' of the workspaced element behave differently ?10:45
tristanand that is intentional ?10:45
juergbistrictly speaking, this is required, yes10:46
juergbiif we assume that the user might run make itself in the shell10:46
tlatertristan: The point of running files is to keep track of any file updates in dependencies between builds10:46
tlaterWe only have access to successful artifacts atm, so if the dependency changes twice between successful builds, we might end up missing a file update10:47
tlaterIf you want to be able to run `make` in a shell and get a compilation with updated dependencies, you need to also keep track of those updates10:47
* tlater still finds it hard to wrap his head around this edge case every time he has to express it.10:48
tristanI dont understand this.10:48
juergbitristan: it's essentially the 'git checkout' approach with regards to timestamps for build dependencies10:49
tristanRemember that there is no way on earth that a `bst shell` invocation is ever going to change Workspace.last_successful10:49
juergbiwhenever you update dependencies, you have to update the timestamps of all modified files (like git checkout)10:49
juergbiyou can only reset all timestamps to the same after a successful build10:50
tristanjuergbi, I think bst shell does not need this, but I still might not understand10:50
juergbitristan: correct, last_successful should definitely not be updated, but running_files should theoretically be10:50
juergbiit depends on what bst shell is used for10:50
tristanwe dont know what it's used for of course10:50
juergbiif you just look at things, it's not needed, if you actually do a partial build, it's needed10:50
tristanbut... the point is; when you open a bst shell... it's going to go through the same codepaths10:51
tristanSo, it's going to bump timestamps and do it's boogie down if dependencies have changed *anyway*10:51
tristanThe question is... should the result of that boogie down be stored in workspaces.yml for a *next build*10:51
juergbiyes, a (failed) make in bst shell is not different from a failed `bst build`10:52
tristanSo, running files are lists of files for each dependency10:52
juergbithat have been updated since the last successful build10:52
tristanSo, running files have nothing to do with the element being built, they dont record anything from the workspaced element in question, as far as I can see10:53
juergbicorrect10:53
juergbias the workspace is stored in a regular directory, there are no timestamp issues10:53
juergbito be precise, they have nothing to do with the files of the element being built itself10:54
juergbithey are still specific to the workspace10:54
tristan"it's essentially the 'git checkout' approach with regards to timestamps for build dependencies" <-- I dont understand that statement and havent read the code behind git checkout10:55
tristanSo, lemme try to understand what this is doing10:55
tristan"whenever you update dependencies, you have to update the timestamps of all modified files"10:56
tristanjuergbi, What is "all modified files" ?10:56
juergbie.g., a header file of a library dependency10:56
tristanCertainly, not the modified files in the workspace right ?10:56
juergbiif the header file changes, we need to make sure it has an updated timestamp10:56
tristanRight10:57
tristanThat much I get.... so if there is never a "successful build", what harm does it do if `bst shell` does not modify this metadata ?10:57
tristanWe have a list of files, which have changed since the last successful build10:58
tristanWe use that to bump timestamps, such that any files which have changed since the last successful build are "new"10:58
juergbithe issue is how do we know which files have changed10:58
juergbie.g., you might update a library dependency from version 1 to version 210:59
tristanbst shell cannot modify these files, certainly10:59
juergbicorrect, but you could invoke bst shell after updating a dependency without running bst build10:59
tristanjuergbi, I assume you are using the artifacts.diff codepaths to discover this10:59
juergbiyes10:59
juergbibut they can only compare between two versions11:00
tristanRight, .... so stop there a moment11:00
tristan<juergbi> correct, but you could invoke bst shell after updating a dependency without running bst build11:00
tristanCircle back...11:00
tristanbasically, I cant find my line above but what I am saying... is that `bst shell` *is going to do this dance anyway*11:01
tristanIt's just not going to *save* the result of it11:01
tristanWhy should it *save* the result ?11:01
juergbiexample11:01
tristanEven if the dependencies change two or three times between two builds11:01
tristanAnd bst shell gets invoked in between a number of times11:01
tristanThe next time you run the build, you still use the last successful build + the list of files which have changed in dependencies11:02
* tristan awaits example11:02
juergbiyou have element foo in a workspace that depends on library libbar. libbar is currently at version 1. all has been built successfully11:02
juergbinow you update libbar to version 2 and bst build just libbar. all still fine11:02
juergbithen you invoke bst shell for the element foo and call make in there11:03
juergbithat builds a few object files but fails at some point, so it's only a partial build11:03
tristanRight11:03
juergbiyou then switch libbar back to version 1 and call bst build on foo11:03
juergbijust checking the artifact diff, buildstream will see no differences11:03
juergbiso header files of libbar will have an old timestamp11:04
juergbiand make might nto do anything11:04
tristanAh, ok I got it11:04
tlaterHm, I wonder if the `bst shell` case means that we'll have to keep a running file list even with failed artifacts11:05
juergbiI suppose so, unless we create a fake artifact for bst shell11:05
tlaterPerhaps we should also note that example down in a comment somewhere11:06
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34711:25
tlatertristan: Would you mind adding your thoughts about this comment? https://gitlab.com/BuildStream/buildstream/merge_requests/347#note_6763847611:29
tlaterI discussed the default cache quota mostly with you, but I do agree with juergbi here.11:29
juergbitlater: btw: I don't have a very strong opinion on this, just thought it's a bit odd and thus commented11:31
* tlater understands, but wants to nail these configuration options so we don't have to break API when we decide they're not good enough11:32
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34711:37
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34711:44
jjardonHi, can I have a second review of https://gitlab.com/BuildStream/buildstream/merge_requests/373 , please?11:59
juergbijjardon: these python libraries aren't all base system requirements, are they? i.e., at least some of them are automatically pulled in by pip3, iirc12:10
gitlab-br-botbuildstream: merge request (tristan/workspace-serialize-writes->master: serialize writes to workspaces.yml) #376 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37612:12
jjardonjuergbi: I have a look to the code; seems all of them are part of the bst code (not test or anyythig else). Similar to the already listed ruamel.yaml12:13
tristanjjardon, fwiw, the reason I had ruamel.yaml there was because at a certain point, I found that trying to install buildstream with it not being installed with your package manager on debian, was causing the installation to fail, that was a long time ago12:16
tristanjjardon, rather, if it can be verified that this is no longer the case, it would be better to remove that from the base system requirements12:16
jjardontristan: but they are required, install them with pip or from your package manager12:16
juergbithe point is that the user doesn't have to manually install them before installing buildstream with pip12:17
tristanjjardon, not so... if you follow the instructions, it will not fail if you run `pip3 install .`; it will automatically take care of downloading it12:17
tristanjjardon, so the user doesnt have to be burdened with this knowledge12:17
juergbitristan: I actually don't have a ruamel system package here. However, I'm not on Debian, so there might still be an issue there for some reason12:17
tristanjjardon, similarly, if you are going to use a package manager, then the distro has solved this problem for you already12:17
tristani.e. installing a package on any system should not require that the user be aware of the dependencies12:18
jjardontristan: how come?12:18
tristanjjardon, because distro packages have the dependencies encoded12:18
jjardonif bst is not packaged, the package manager will not knw what to install12:18
tristanyou dont have to install things first, except for the things listed there12:18
tristanjjardon, pip will do it for you12:19
tristanjjardon, `pip install --user -e .` will automatically get the pure python dependencies for you, so it's not needed12:19
jjardonlets decide if use pip or not to the user; this is listing what dependencies are needed for running bst12:19
tristanjjardon, however, it will not install ostree, or bubblewrap12:19
jjardonexactly, lets list the dependencies, then say "hey, you could install these ones with pip automatically if you want"12:20
tristanjjardon, No, it is not listing that - it is a guide for a *user* to use, with the minimum amount of information for a user to get off the ground12:20
tristanjjardon, if you want to list all of the dependencies which are needed, that would be part of a more terse documentation targetted at say, distro packagers.12:20
tristanjjardon, the point is to guide the user safely with some instructions to install buildstream, the more information which goes there, the lower quality that guide is12:21
tristanit should ideally be quick and painless, not a daunting and frightening wall of dependencies12:22
jjardontristan: no, someone can prefer to use distro packages than depend in the latest random version available in pip; listing all the dependencies helps with that12:22
tristanit looks like bubblewrap is missing there, though12:22
tristanjjardon, no, it does not, as I explained above12:22
jjardontristan: bubblewrap is there12:22
tristan<tristan> jjardon, similarly, if you are going to use a package manager, then the distro has solved this problem for you already12:22
tristan<tristan> i.e. installing a package on any system should not require that the user be aware of the dependencies12:22
tristanjjardon, those dependencies are *only* useful for someone who is going to install with pip12:23
tristanjjardon, if you are installing with a package manager, then the package manager / distro is responsible for encoding the dependencies into the buildstream package - the user doesnt need to know.12:23
jjardonok ,should we remove all the python packages and also python-ruamel-yaml and python-gobject from the packages you should install then?12:24
juergbican pygobject be installed with pip?12:24
jjardonyup12:24
tristanjjardon, we should remove everything that the user need not know - pygobject cannot be installed with pip12:25
jjardonhttps://pypi.python.org/pypi/PyGObject12:25
tristanI looked into that, it cannot; there is a commit in pygobject history saying "We made it work"12:25
tristanBut it doesnt work at all.12:25
tristanat least, it did not work at all when I tried it12:25
juergbiit's not currently in our setup.py, so it will not work right now12:26
juergbino idea whether it could work12:26
tristanIt would have to be experimented with various platforms, I know it did not work for me last year with debian stretch12:26
jjardonok, I wil try and come back to you12:26
tristanI think it might be safe to remove ruamel.yaml from that list, though12:26
juergbimight also be an issue with our ostree version check as that already requires pygobject early on12:27
tristanI just recall I had incidents with it, which is why I recommended installing that one first with package manager12:27
jjardonit would be good for that to be documented12:27
jjardonto avoid confusion12:27
tristanjuergbi, that is also a separate issue, the problem when I tried installing pygobject was related to it trying to compile itself inside a pip install session12:27
tristanwhich was totally borked.12:28
gitlab-br-botbuildstream: issue #352 ("Race condition: Incorrect saving of "running files" in workspaces.yml local state file") changed state ("closed") https://gitlab.com/BuildStream/buildstream/issues/35212:28
gitlab-br-botbuildstream: merge request (tristan/workspace-serialize-writes->master: serialize writes to workspaces.yml) #376 changed state ("merged"): https://gitlab.com/BuildStream/buildstream/merge_requests/37612:28
tristantlater, for your reference, see the commits in: https://gitlab.com/BuildStream/buildstream/merge_requests/37612:29
tristantlater, specifically: https://gitlab.com/BuildStream/buildstream/merge_requests/376/diffs?commit_id=a9cbb0f7074286f5323954d327bc923c0028e7c012:29
* jjardon would like to test the dependency installation as part of the CI, so we are sure we keep them up-to-date12:29
tristanjjardon, I would very much like that too; actually I want multiple distros and versions of those to be tested12:30
tristanjjardon, And I want it to happen for each major distro version that we run CI on12:31
jjardontristan: let me work on something :)12:31
tristanjjardon, I think it starts with the buildstream-docker-images repo12:31
tristanthere is mostly some sorting to do there to understand which image is used for what12:31
tristanoriginally, we tried to use the same fedora image for CI and for the convenience `bst-here` script12:32
tristanBut that was not a great idea because; we want to test against python3.4 (earliest supported python), and the `bst-here` script naturally wants an up to date and featureful image12:32
jjardonlets support several distros in a generic way, then we can add the instructions of the CI to the docs, so no need to keep thing in sync12:33
tristanThe important thing to not lose here, is that buildstream should not use a "tag/branch" to refer to the docker images it tests against12:34
jjardonany reason to limit to 3.4? even Debian stable have 3.5 nowadays12:34
tristanPersonally, I think comments in the .gitlab-ci.yml is the best form of documentation for that, it doesnt belong in user facing docs really12:35
jjardontristan: it should, if not how do you test against fedora 27 and fedora 28?12:35
tristanjjardon, No reason, but if we're only going to test with one image, it should be python3.412:35
jjardonagree, but users doesnt go to .gitlab-ci to check what they need to install12:35
tristanjjardon, We should be testing against every major release of every supported distro12:35
tristan"then we can add the instructions of the CI to the docs" I dont see why users need to know how the upstream project maintainers maintain their CI12:36
jjardontristan: all major current releases (debian, arch, fedora, suse ...) have python 3.5, only saying12:36
tristanjjardon, I think you are talking about different forms of CI12:36
tristanI am talking about CI *of buildstream*12:36
jjardonyes12:37
tristanjjardon, They do now, and maybe in 1.2 we can consider bumping the python requirement, this was however not true a year ago12:37
tristanjjardon, which means.... we should be testing a *previous* release of major distros with python3.4 from last year for current buildstream12:38
tristanbut that is getting less important12:38
tristanI think python3.5 minimum for 1.2 will probably be a good thing12:38
tristancurrently we support down to 3.4, so we should be testing that12:39
tristanjjardon, Regarding instructions for people to run their *own* CI for their own buildstream projects; I worry about scope creep, I dont think it's really relevant in our docs12:39
jjardontristan: me neither12:40
jjardondont think I have suggested that?12:40
tristanOne main reason for that is, we cannot really assume a specific system, some people use gitlab, others use jenkins, etc etc12:40
tristan<jjardon> lets support several distros in a generic way, then we can add the instructions of the CI to the docs, so no need to keep thing in sync12:40
tristanjjardon, I dont understand the above phrase about documentation then :)12:41
jjardontristan: part of the CI is to install buildtream in different distros and run test to check it works12:41
tristanWe've now established it is not about instructing users about how upstream buildstream runs it's own CI, and we've established that buildstream should not document how projects use buildstream in their own CI :)12:41
jjardonthen we use those same instructions as a doc in https://buildstream.gitlab.io/buildstream/install.html12:41
tristanAh, so you want to have some file describing those instructions, which we literally include into the docs ?12:42
jjardonwe are not instructing user, we are chekcing that is actually possible install buildstream correctly in different distros12:42
tristanand run in the CI ?12:42
jjardonyes12:42
tlaterHm, I wonder if the docker images count as that12:42
tristanThat sounds like a very nice idea :)12:43
tlaterOr at least help with it12:43
tristanjjardon, however it's not a good idea for our CI12:43
tristanjjardon, for another reason12:43
tristanjjardon, we make *damn sure* that the only thing that every changes from one run of CI to another, is buildstream code12:43
jjardondoesnt matter really12:43
tristanjjardon, that is why we make sure the docker image already comes with things pre-installed12:43
tristanand we dont use a moving tag12:44
jjardontristan: I have seen pure python changes in code that work in Ubuntu and not in Fedora12:44
tristanthe docker image should not install things from distros during CI of buildstream12:44
tristanSigh, we are talking apples and oranges again12:44
tristanjjardon, A.) We want many images of different versions of major distros... B.) We dont want those images to change *at all* between CI runs... C.) Changing of the backing image is done manually from our own .gitlab-ci.yml12:45
jjardontristan: agree with that, its what me who changes the use to a specific docker image in the builstream CI instead using always the "latest"12:45
tristanInstalling a package during the CI process, means we might get a subtly different version of some system dependency, which may falsify results12:45
jjardontristan: as I said, I agree on that12:46
tristanright, so that's why I dont know if it's feasible to literally include those instructions into our generated documentation12:46
tristanI.e. the places where distro specific installation things happen, are in the buildstream-docker-images repo, and are not available when building documentation12:47
tlatertristan: Those instructions could be used as the Dockerfiles in buildstream-docker-images12:47
tlaterWe'd just need a neat way to make them a bit more human-readable12:47
tlater(The docker images, that is)12:47
jjardonlet me see if I can think on something, taking in account above comments12:48
gitlab-br-botbuildstream: merge request (jjardon/update_depencies->master: docs: Update list of dependecies) #373 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37312:50
tristanjjardon, you may want to coordinate with cs_shadow, who iiuc maintains buildstream-docker-images12:50
tristancertainly sounds like an interesting idea, it's just a bit technically challenging12:51
gitlab-br-botbuildstream: merge request (jmac/logfile-widget-correction->master: WIP: Correct log line if logdir is empty) #377 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37712:53
jjardonit would be good as well to produce more docker images, not only one based in a specific version of Fedora. Then we can check that builstream works ok in all of the ones we care12:54
tristanyes, that is desired :)12:55
tristanjjardon, honestly, I want to start with versions of major distro of last year, and keep adding versions to CI for every stable release of BuildStream12:55
tristanjjardon, such that we can install BuildStream 1.0 on whatever major distro is available in 10 years, and it still works12:56
jjardon1.0 ?12:56
tristanthis is sort of an implicit requirement as we cannot guarantee cache key stability when reving major point versions of BuildStream12:57
tristanMaybe starting with 1.2, and then 1.4, 1.6, 1.8... like that... if there is no interest in 1.012:57
tristanjjardon, the point is that in a stable version of BuildStream we guarantee cache key stability12:57
tristanjjardon, and people want to be able to reproduce exactly the same artifact with the same key 10 years later12:58
tristanSo the only thing we can do for that, is say "Use the version of BuildStream which produces that cache key", and for us to say that; we have to at least ensure it keeps working12:58
jjardontristan: Id say if you have the resources to maintain a stable branch, sure go for it. If not do not create false expectation creating stable branches and instead try all your users to use the latest12:59
tristanWe dont really have to keep every version of BuildStream under LTS support for backporting every bug fix down to 1.0, but we can at least make sure it keeps working on new distros.12:59
tristanjjardon, We need the CI first12:59
jjardon(latest version will support all cache keys or there is a path to upgrade from older cache keys to the new ones)13:00
tristanIt should be a no brainer that an old version of BuildStream still runs on a modern distro13:00
jjardontristan: no when modern distros doesnt have python3 anymore13:00
tristanjjardon, there is a lot of questions around being able to do that; it's currently not feasible without a lot of work13:00
jjardonbut only python4, for example13:00
tristanI dont think we'll ever see a distro that doesnt have python213:01
jjardontristan: do you want a bet? :)13:01
tristanmaybe, but let's burn that bridge when we cross it, it will be a long time from now13:01
tristanMr homegrown lazy distro who doesnt care about being able to run python2 programs might13:02
tristanbut not serious distros13:02
jjardonpython2 is already not included by default in several modern distros. And if it included there are plan to remove it13:02
jjardonremoving it from the archive will take more time, but it will happen13:02
tristanjjardon, I dont see why anyone would port an already working python2 application to python3 unless it really needs long term development13:06
tristanjjardon, which is why I would not predict say, GTK+2 ever disappearing, for probably at least another 10 years13:06
jjardontristan: well, because python2 is not supported anymore upstream and one day you will get a bug nobody will fix?13:07
jjardonyeah, python2 will still be in that distros archive for a long time, but you say "I don't think we'll ever see a distro that doesnt have python2"13:08
jjardonFedora for example is working on porting everything to python3: http://fedora.portingdb.xyz/ when that happen they will not have any strong reason to keep python2 in the archives13:10
tristanjjardon, the result of that will more probably be "Users can no longer run that program anymore" and "The maintainers of that program have moved on", it's highly unlikely to get a port; so it's unreasonable for distros to stop supporting something (like a python2 app) unless their user base really doesnt need it anymore (there is new software which replaces it)13:10
tristananyway, this is quite off topic by now, and I need to get food before restaurants start closing shop13:11
* jjardon goes for quesadilla XD13:12
*** tristan has quit IRC13:21
Nexusi can't tell if my laptop is terrible or if i'm getting hanging tests13:22
*** tristan has joined #buildstream13:25
*** bethw has joined #buildstream13:25
jjardonShould arpy be added to setup.py ?13:37
tlaterjjardon: No, it's an optional dependency13:46
tlaterI.e., it is only used for a specific plugin13:46
jjardonrigth13:46
tlaterNexus: Rebase on top of skullman's branch and find out :)13:47
tlaterNexus: https://gitlab.com/BuildStream/buildstream/merge_requests/37513:47
Nexusit's just reaaaaallly slow13:52
gitlab-br-botbuildstream: merge request (jmac/logfile-widget-correction->master: Correct log line if logdir is empty) #377 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37713:53
jjardonIs needed to have a gcc compiler on the host for the buildstream tests?14:01
tlaterjjardon: Not as far as I am aware, just as buildstream the buildstream tests never touch host tools14:02
tlaterWell, unless you're playing with specific plugins.14:03
gitlab-br-botbuildstream: merge request (jmac/logfile-widget-correction->master: Correct log line if logdir is empty) #377 changed state ("merged"): https://gitlab.com/BuildStream/buildstream/merge_requests/37714:03
jjardontlater: you will touch host tools in that case?14:03
tlaterjjardon: Arpy is used to extract debs, for example14:03
tlaterHost tools never contribute to actual builds, though14:04
jjardonok, what aout patch, findutils, lzip, bzr ... Im seeing in the docker image ?14:05
tlaterAlso used for various extraction purposes :)14:05
tlater`patch` is used to apply patches to sources14:05
tlatergcc is used exclusively to build ostree14:06
tristanjjardon, those are optional dependencies, so we include them in the docker image to test the optional functionality14:06
tristantlater, gcc might be required for psutils, actually; that is a very strange one14:06
jjardontristan: sure, but are they host tools used in the build process ?14:06
tristanjjardon, they are host tools used in the process of obtaining sources14:06
tristannot in the build process14:07
jjardonshould we document this somewhere? the fact that we are using "patch" from the host can be relevant?14:07
tristangcc is a strange thing actually; for pip install to pass, if the host does not have python psutils, the host needs a C compiler, because psutils compiles C code as a part of it's installation process14:07
tristanjjardon, I think we should document it in the relevant plugins14:08
jjardonyeah, Im thinking on installing those libraries with pip, then remove gcc from the image14:08
tristane.g. here: http://buildstream.gitlab.io/buildstream/sources/patch.html#module-sources.patch14:08
tristanpossibly in installing.rst, we should link to http://buildstream.gitlab.io/buildstream/main_authoring.html#plugins, mentioning that depending on the project, you may need additional host tools14:10
tristannot sure, it would be a nicer experience to mention some things in installing.rst, but it would not be very maintainable to document plugin requirements in a central location14:11
jjardonI see14:11
tristanin any case; the user is supposed to get an error indicating what is needed *immediately* when running a command which requires a host tool14:11
tristanat least, very very early in the load process14:11
tristanso, you cannot find out that you need patch after 30 mins of building14:12
jjardonok; let me see first what is actually plugin deps/tools to build pip packages/real depencies first14:12
tristanfor patch specifically, we should have a harder requirement than "is patch there", this is a subtle bug I think - various implementations of patch have different quirks14:14
tristangnu patch is very permissive with fuzzy features, but allowing fuzzy patch can have bad results, too14:14
jjardonyup14:15
jjardonI guess the git used is from the host as well?14:16
jjardonalso tar?14:17
gitlab-br-botbuildstream: merge request (jjardon/update_depencies->master: docs: Update list of dependecies) #373 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37314:20
gitlab-br-botbuildstream: merge request (jjardon/update_depencies->master: docs: Update list of dependecies) #373 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37314:20
tlaterjjardon: Tar actually depends, some of that is done by python14:21
gitlab-br-botbuildstream: issue #353 ("Document what parts of Buildstream / plugins depend on host packages") changed state ("opened") https://gitlab.com/BuildStream/buildstream/issues/35314:22
tlaterjuergbi: If we're going with the systemd-style quota definitons, do we want to adopt their 'infinity' and percentages of the full disk size as well?14:42
* tlater checked humanfriendly and they aren't particularly specific about their parsing14:43
tlaterSo I'll go with the suggested systemd implementation, even if it doesn't use SI units (grr...)14:43
*** bethw has quit IRC14:44
*** hergertme has quit IRC14:58
juergbitlater: the systemd reference was just a suggestion, we don't have to follow it to the letter14:59
tlaterHm, I don't like it particularly much, personally14:59
juergbibut avoiding unnecessary differences with other config files is generally useful14:59
juergbifor storage, SI units might indeed make more sense15:00
* tlater thinks it's handy to be able to say "please stick to this well-known format"15:00
juergbi(it's somewhat different for something like RAM)15:00
juergbiit definitely is15:00
tlaterAnd I think there's actually value in percentages for this15:00
tlaterJust perhaps not 'infinity'15:01
juergbiinfinity would just be no quota, wouldn't it?15:01
tlaterThat doesn't help very much, as it's guaranteed to crash buildstream during a build once we grow beyond disk space15:02
tlaterAlthough I suppose we could still allow that?15:02
juergbiI suppose it depends whether we will add the second option that tristan suggested15:03
tlaterAh, right15:03
juergbiin which case cache-quota itself could default to infinity15:03
juergbialthough tristan suggested default to a large number instead, but that's also somewhat odd15:03
tlaterLeaving 'infinity' headroom makes absolutely no sense though x)15:03
juergbiagreed, that would mean never cache anything, which would fail builds15:03
tlaterYeah, I think defaulting to 'infinity' and disallowing 'infinity' on headroom would make this quite neat15:04
juergbifine with me15:04
tlaterPercentages are also relatively easy to do, so I'll just add those for convenience15:04
*** Prince781 has joined #buildstream15:05
* juergbi is still worried about the performance impact15:06
*** bethw has joined #buildstream15:07
tlaterYeah, I'll try using jmac's performance testing branch if I can15:07
juergbisounds good15:08
tlaterOtherwise I'll just run some tests on sample repositories15:08
* tlater is more concerned about communication with the main thread15:08
juergbiit will require a somewhat populated cache, though. it will be fast with small caches, of course15:08
tlaterYep, running these tests might take a while on this machine, too15:08
* tlater considers doing this overnight on his home PC or something15:09
jjardonabout psutil: should we install it from the package manager or install it from pip? (that will require gcc and python-devel)15:12
tlaterjjardon: In a recent discussion we decided "Whichever works best"15:13
tlaterIt's a bit vague, though usually we've sticked to pip15:14
tlaterUnless there was a reason not to use the pip version on the distro15:14
jjardonthen we should have to update the install guide to add gcc and python-devel as base dependencies15:14
* tlater suspects it's not too bad to stick to the OS package manager for psutil where it is available15:15
jjardonI think for this case is better to use the distro package to avoid those dependencies15:15
jjardonok15:15
tristantlater, juergbi performance is indeed a big concern I think; running `du -hs` on an artifact cache takes *ages*, we should be able to have ostree just report a number (possibly cached, possibly immediately)15:27
tlatertristan: I'm caching a number currently (well, intend to, but multithreading got me)15:27
tlaterIt's just that that cache will continuously be outdated15:27
tlaterSo it's probably still a fairly large overhead15:28
juergbiyes, the main issue of caching this on disk is concurrency, I suppose15:28
juergbiatomic replacement is not sufficient for this15:28
* tristan doesnt like to see the word multithreading again...15:28
tlater*multiprocessing?15:28
tristanconcurrency is a better general word indeed :)15:29
tlaterI'll have to figure out concurrency for the current implementation before testing its performance then.15:30
gitlab-br-botbuildstream: merge request (jjardon/update_depencies->master: docs: Update list of dependecies) #373 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37315:31
tristantlater, juergbi maybe splitting up build + caching of artifacts into separate queues might let you synchronize some things15:32
tristanjust a thought15:32
tlaterHmm15:32
tlaterThat might also allow pruning multiple things at the same time15:32
juergbithat might conflict with possible future on-demand staging15:32
tristaneh, not if you make builds contingent on the artifacts being cached15:33
*** bethw has quit IRC15:33
tristanalthough15:33
tristanjuergbi, I still feel like https://gitlab.com/BuildStream/buildstream/issues/296 (lightweight artifacts) is the right thing architecturally speaking15:34
tristannot only as a matter of slight optimization15:34
*** toscalix has quit IRC15:34
tristanif it's not a huge overhead I dont really mind leaving things as is, but it does seem backwards the way we force everything to be an artifact before extracting it15:35
juergbiwith on-demand staging lightweight artifacts would feel backward, imo15:36
tlaterThe artifact cache is running into more and more database issues ;)15:36
tristanjuergbi, why ? you would just on-demand stage from the extract directory15:36
*** Prince781 has quit IRC15:36
tristanwith a possible on-demand stage from a backing artifact storage, if you happen to be interacting with something remote15:37
*** bethw has joined #buildstream15:37
juergbisupporting both should be possible but it would add complexity15:37
juergbiwe might need it anyway for workspaces, not sure15:38
tristanwhile it does feel backwards, the good argument I think is that, with ostree at least, forcing: Build result -> ostree -> extract -> hardlink to next build...15:39
tristanmeans we get to leverage deduplication15:39
tristanI guess that is the best argument for keeping it the way it is15:39
juergbiyes and we don't need a separate expiration mechanism etc15:40
juergbifewer structural differences with remote execution15:41
tristanunrelated, but https://gitlab.com/BuildStream/buildstream/issues/294 is reaaaaaaly bad :-(15:41
juergbiand the overhead of commit shouldn't be very high15:41
tristan5 minutes of caclulating cached state, wow15:41
juergbiyou saw my (old) comment, right? https://gitlab.com/BuildStream/buildstream/issues/294#note_6258524615:41
tristanfor a project as small as gnome-build-meta15:41
juergbiwell, it includes whole freedesktop-sdk via junction now15:41
tristanI dont think it does no15:42
tristanit does on someones WIP branch15:42
tristanright, time is being spent in ruamel.yamk15:43
tristanyaml15:43
tristanjuergbi, maybe we should bit Angelos's bullet and do some of the heavy-weight internal stuff with json though the faster C library15:43
tristan*bite15:43
* tristan finds it rather silly that we use parsers implemented in interpreted languages :-S15:44
jjardonDoes this look legit? https://gitlab.com/BuildStream/buildstream-docker-images/merge_requests/3215:44
juergbiwe need to read very little, so if those parts were in a separate file, I wouldn't expect a performance issue in that aspect15:45
* tristan will have to think of it in the day time15:46
*** Prince781 has joined #buildstream15:46
skullmanI don't suppose someone could take a quick look at https://gitlab.com/BuildStream/buildstream/merge_requests/375 would be nice to be able to base work off it so the tests pass rather than hang.15:55
*** Prince781 has quit IRC16:02
gitlab-br-botbuildstream: merge request (jjardon/ci_fedora_27->master: Run test in Fedora27, apart from Debian 8) #378 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37816:07
jjardontristan: something like that? ^16:08
tristanjjardon, nice !16:11
tlaterjjardon: You need to be careful about removing bwrap/ostree in the unix tests16:12
jjardontristan: more to common: Debian stable, Fedora 28 ,maybe Ubuntu16:12
tlaterThat's the main reason the CI isn't currently implemented like that, even though we have the images and everything ready16:12
jjardontlater: Im not touching the unix test job (for now)16:12
tlaterThough that yaml stuff is really neat :)16:12
tlaterAh, sorry16:12
*** Prince781 has joined #buildstream16:12
tlaterI missed the diff break thing16:13
jjardon:)16:13
tristanit's esthetically yucky that the tests are in alphabetical order: https://gitlab.com/BuildStream/buildstream/pipelines/2027604216:13
tristantiny nitpick, maybe we could use a common prefix so that docs doesnt get mixed up in there16:13
*** valentind has joined #buildstream16:13
jjardonany reason why the debian docker image was called testsuite-debian instead buildstream-debian (as buildstream-fedora)16:14
tlaterjjardon: I think the fedora image also comes with buildstream pre-installed16:14
tlaterYeah16:14
jjardontlater: yes16:14
tlaterfedora has buildstream pre-installed, whereas the debian image doesn't16:14
jjardonrigth16:14
tlaterWe wanted to create a second fedora image that doesn't come with buildstream installed16:14
tlaterSo that we can have nice CI images16:14
tlaterAnd one to use for bst-here16:14
jjardonAny reason to not do that?16:15
tlaterTime, mostly16:15
tlaterx)16:15
jjardonoh! :)16:16
jjardontristan: do you like test-debian-8, test-unix, test-fedora-27 more?16:17
tristanskullman, made just a little comment, I think the code looks perfectly sane indeed16:17
tristanhad to check a moment what we are doing in terminator()16:17
tristanskullman, I think we have a few context managers which fail to try/except, resulting in weird behavior, at least it was important in a few which I recently fixed16:18
tristanjjardon, yeah that would be nice :)16:19
tristanjjardon, really just a tiny silly unimportant nitpick though :)16:19
tristanwill still make pipelines look sexier16:19
gitlab-br-botbuildstream: merge request (jjardon/ci_fedora_27->master: Run test in Fedora27, apart from Debian 8) #378 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37816:20
jjardontristan: let make it sexier16:20
jjardonlets16:20
jjardonI will do current Debian stable next, then maybe we should do Ubuntu16:21
tristanubuntu is very debian like, but it wont hurt16:22
tristanI'm more interested in doing bsd, but that requires actually writing the platform for it :)16:22
skullmantristan: there's a test in !329 that will trigger the hang without the patch. It could be ported in, but I'm not sure it's worth the effort if it'd already be covered by something else after !329 is merged16:24
tlaterHm, I wonder if there's value in having a cache quota that refuses to ever delete artifacts16:25
tristancs_shadow, what's your gitlab handle again ?16:25
gitlab-br-botbuildstream: merge request (jjardon/ci_fedora_27->master: Run test in Fedora27, apart from Debian 8) #378 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37816:25
tlaterI.e., it will complain if you run out of disk space, rather than trying to delete artifacts if you set it to 'infinity'16:25
tristanah it's a dash !16:26
tlaterActually, no, that should be added with the future prompting feature16:26
cs_shadowYep, cs-shadow16:26
cs_shadow(GitHub didn’t used to allow underscores)16:27
tristanI like dashes better in many cases anyway :)16:29
tristanthey look more balanced16:29
laurencecs_shadow, aha, was just responding to the mail, all sorted now for the access though i see :)16:30
tlaterDoes anyone happen to know where we test userconfig settings? I can't find anything suchlike :|16:31
jjardontristan: if you fancy reviewing the sexy version is all yours: https://gitlab.com/BuildStream/buildstream/merge_requests/37816:32
tristantlater, we test more about how the app behaves under different settings, scattered throughout tests16:32
* jjardon goes to see the football16:32
tlaterHm, right16:32
tristantlater, but we have the original load test with is tests/context.py16:32
tlatero/ jjardon16:32
tristantlater, which has to be thrown in the garbage if unneeded, or ported to proper CLI test for what we can salvage16:33
tlaterHm, I'd like to write something that asserts that my parser works properly, without going through the entirety of a pipeline16:33
tristanI ported over the remaining project tests16:33
tristanI think besides that we still have loader tests which need to be ported16:34
tristantlater, I'm using `bst workspace list` for that sort of thing, if possible16:34
tristanit's the shortest codepath I think, but I dont know if you can assert anything meaningful with it16:35
tlaterAh, I guess that should do it, yeah16:35
tristantlater, `bst show` is usually the way to go, with a one element pipeline16:35
tlaterPerhaps a `bst show --format=%{config}` could be useful?16:35
tristanuhhh16:35
tristannah, what's it doing ?16:35
tlaterShow the user how buildstream interprets their config16:35
tristantlater, if you are adding meaningful config, it means you have to test how bst behaves under that config16:36
tristanwhich means you are already implicitly testing the config, right ?16:36
tlaterYeah, that's true, but I'm concerned with invalid values for that config.16:36
tristanthat you can use `bst workspace list` for16:37
* tlater will go with that, ta tristan :)16:37
tristanand result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason...)16:37
cs_shadowtristan: thanks! It seems like the MRs on buildstream-docker-images repo also require an approval. Do I need to be added to the approvers group too? (You can see settings on https://gitlab.com/BuildStream/buildstream-docker-images/edit)16:38
tristanI've never used "approvers" and I dont really care about what they are for16:39
tristanI think jjardon likes them :)16:39
tristancs_shadow, I've set you as "Master" so you should be able to do what you want16:39
tristanI hope you dont get bogged down in pesky approvers :)16:39
tristancs_shadow, if you cannot edit the settings, let me know what you want me to do there for you16:40
tristanI might only get to it tomorrow, but it's your call really, if you like approvers, you can have em :)16:40
gitlab-br-botbuildstream: merge request (richardmaw/fix-unit-test-hang-on-crash->master: Fix unit tests hanging when there's an exception in a sandbox run) #375 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37516:41
cs_shadowtristan: thanks! I'll familiarize myself with the settings and get back to you tomorrow then :)16:42
tristancs_shadow, my personal take on "approvers" in general, is that it is a way for people to push things upstream without assuming any kind of liability for their merges16:43
tristanpeople get to "share the blame", and as such, tend to get nonchallant16:43
tristanso I dont like approvers :)16:43
*** dominic has quit IRC16:45
*** aday has quit IRC16:46
*** Prince781 has quit IRC16:49
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34716:56
*** aday has joined #buildstream17:00
gitlab-br-botbuildstream: merge request (135-expire-artifacts-in-local-cache->master: WIP: Resolve "Expire artifacts in local cache") #347 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/34717:02
*** jonathanmaw has quit IRC17:08
*** Prince781 has joined #buildstream17:22
*** Prince781 has quit IRC18:08
*** bethw has quit IRC18:26
*** bethw has joined #buildstream19:37
*** tristan has quit IRC19:45
*** hergertme has joined #buildstream20:02
*** jsgrant has joined #buildstream20:14
*** Prince781 has joined #buildstream20:50
*** Prince781 has quit IRC20:54
*** Prince781 has joined #buildstream20:54
*** jsgrant has quit IRC20:55
*** jsgrant has joined #buildstream21:10
*** bethw has quit IRC21:21
*** aday has quit IRC21:30
*** jsgrant has quit IRC21:47
*** Prince781 has quit IRC21:48
gitlab-br-botbuildstream: merge request (issue-21_Caching_build_trees->master: WIP: Issue 21 caching build trees) #372 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/37223:20

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