IRC logs for #buildstream for Wednesday, 2018-04-04

*** tristan has quit IRC04:03
*** tristan has joined #buildstream04:29
*** ernestask has joined #buildstream06:25
*** dominic has joined #buildstream07:28
* Nexus wishes there was an option to "just show last line of stderr" when a test fails :P 9 times out of 10, it's the only one that matters 07:29
gitlab-br-botbuildstream: merge request (tristan/private-refactor-2->master: More refactoring related to private symbol policy) #355 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/35507:56
*** toscalix has joined #buildstream07:56
gitlab-br-botbuildstream: issue #334 ("unhandled exception when building gtk+-3.bst") changed state ("closed") https://gitlab.com/BuildStream/buildstream/issues/33408:03
*** slaf has quit IRC08:07
*** slaf has joined #buildstream08:09
*** aday has joined #buildstream08:13
*** dominic has quit IRC08:16
*** noisecell has joined #buildstream08:27
*** jonathanmaw has joined #buildstream08:47
*** bethw has joined #buildstream08:52
*** dominic has joined #buildstream08:59
gitlab-br-botbuildstream: merge request (tristan/private-refactor-2->master: More refactoring related to private symbol policy) #355 changed state ("merged"): https://gitlab.com/BuildStream/buildstream/merge_requests/35509:03
gitlab-br-botbuildstream: merge request (tristan/only-one-strict-mode->master: Fix strict setting to be consistent throughout the pipeline.) #356 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/35609:19
tristanjuergbi, can you please take a look at https://gitlab.com/BuildStream/buildstream/merge_requests/356 ?09:20
juergbisure09:22
tristanjuergbi, that's the thing I was a little unsure of this weekend, I think the fix is correct, though09:26
tristanI'm not sure why on earth we would allow strict & non-strict mode in the same pipeline/session09:26
juergbitristan: some projects might not support non-strict builds at all (static linking) but that should likely be solved differently11:07
tristanjuergbi, we have an issue for making strict-rebuild a dependency attribute for that, indeed11:08
juergbiright, besides that I can't think of a sensible use case why you'd want to mix11:08
tristanwe have it by element type, but I dont think we want to think of that in terms of project granularity11:08
tristanjuergbi, alright, I'll merge then, I was more concerned that we might have special code in state handling for this mixing of policies11:09
juergbiwe have the STRICT_REBUILD support. I don't see any issues merging this11:10
gitlab-br-botbuildstream: merge request (tristan/only-one-strict-mode->master: Fix strict setting to be consistent throughout the pipeline.) #356 changed state ("merged"): https://gitlab.com/BuildStream/buildstream/merge_requests/35611:11
gitlab-br-botbuildstream: issue #337 ("Add option to close all workspaces") changed state ("opened") https://gitlab.com/BuildStream/buildstream/issues/33711:18
*** bethw has quit IRC12:01
*** bethw has joined #buildstream12:01
tlaterDo we have some standard way of prompting the user yet?12:08
tlaterThere's app.interrupt_handler12:08
tlaterWhich seems to halt any ongoing jobs - I suspect that's necessary to be able to prompt12:09
tlaterBut it's hard to call anything in app from outside that class12:09
tlaterAnd it looks like a few of those methods are required...12:09
tristantlater, the frontend must remain the frontend; any interaction with the user should be done there12:20
tristantlater, why specifically ?12:21
tlatertristan: Still working on local cache expiry, which should prompt the user about what to do if the cache is full.12:21
tristanShould it ?12:21
*** Prince781 has joined #buildstream12:21
tlaterThough I am starting to wonder whether that's necessary12:21
tlaterYeah...12:21
tlaterThe issue mentions it12:22
tristanI didnt think it should... where is that...12:22
tlatertristan: Issue is this: https://gitlab.com/BuildStream/buildstream/issues/13512:22
* tlater thinks the intention is not to annoy the user with a failed webkit build after 5h of compilation12:22
tlaterWhich is probably the most likely candidate for overflowing caches12:23
tristanah, I wrote that in interactive mode12:23
tlaterYep, definitely not *always* prompt12:23
tristanRight, that seems like a reasonable feature, but not exactly easy to implement12:24
tristantlater, I think that first off, we should consider it a separate feature12:24
tristanIn order to implement that kind of interaction *from a task*, we're going to need some supporting code12:25
tristanit's certainly possible12:25
tlatertristan: Think you'd be happy landing an initial implementation without that feature?12:25
tristanCertainly12:25
tristanThat should be a separate feature12:25
tristanBut a very nice one12:26
tlaterIt could still have settings to configure the default, but I find it hard to see options beyond "Would you like to ignore your limit?"12:26
tristantlater, we want to avoid blurring the line between frontend and core, I already unfortunately did that with recent workspace changes; but it looks like we could use some kind of "main" in the core12:27
tristantlater, that would not be a reasonable setting, of course12:27
tristanit would simply ignore the cache quota :)12:27
tristanrendering the quota useless12:28
tlaterYeah, I think adding any sort of option beyond the quota is pointless12:28
tristanTo do prompting from a task, we'd need cooperation with the scheduler for a task to ask a question with a well defined API, and have the scheduler suspend and run a callback, *if* the frontend has provided such a callback12:29
tristanall perfectly doable, and a refactor to make that happen would probably happily result in splitting up the ugly pipeline code into API and pipeline resolution stuff separately, ending up with a nicer initialization, and consuming the workspace operations which bled into App12:30
tlatertristan: Yeah, I think adding all of that as part of this branch will be too much12:32
tlatertristan: On another one of those "edge cases" actually, I think implementing a quota that takes disk space into account is not too far-fetched12:37
tlaterThe problem is just, what's a reasonable hard-coded quota?12:37
tlaterIn general, what should the default be?12:38
* tlater deferred thinking about this, but is close to finishing up, so...12:39
tristantlater, I think default should be determined by current cache size + available space on the volume where the artifact cache is stored12:40
tristani.e. "All the space"12:40
tristanAvoiding erroring out when you run out of space, and expiring LRU artifacts which are not in the build plan along the way12:41
tristanThe only out of space condition which remains, is the one where the size of your volume is not big enough to hold the entire build results of the build plan12:41
tlatertristan: Do we want a ceiling on top of the artifact cache to make that less likely?12:42
*** noisecell has quit IRC12:42
tlateri.e., say we stop something like 20GB before we reach the actual disk limit?12:42
tristanrather than a ceiling, I would say a headroom12:42
tristani.e. we need to allow some extra space for builds to be checked out... and we cannot know for certain how much additional space a build result will take in the cache12:43
tristanhowever, that second part should be meaningless; because that second part will always be less than the full size of the artifact12:44
tristanin the case that there are push queues enabled, we need headroom to be able to push artifacts (cause we create temporary ostree repos for pushing)12:44
tristantlater, all of that would be considered as a hard coded headroom that we reserve I think12:45
tristana couple of GB should be sufficient12:45
* tlater unfortunately rarely pays attention to the actual size of builds12:45
tristantlater, in other words... default "quota" is "cache size + available space - hard coded headroom"12:45
tlaterI'm guessing some large elements might grow up to tens of GB - how much headroom do we actually want?12:46
tlaterAre there statistics for this?12:46
tristanWe cannot know12:46
tristanassuming we know would be bad, but we have a quota which we need to try to stay under12:46
tristanand if it's unset, defaulting to "all" is sensible12:47
tlaterIt's always going to be a heuristic with these, because we can't predict the sizes of artifacts...12:47
tristanThat is not entirely true12:47
tristantlater, that is just a consequence of not having support from ostree to work out the exact numbers12:47
tristanwell12:47
tristanfor the size of a build, that will always be a heuristic12:48
tristanindeed, that is something we cannot predict12:48
tristanI am wondering if we should force the build directory to be on the same volume as the artifact cache12:49
tristanbut meh, maybe not12:49
tlaterSomebody might have an incredible disk driver that somehow makes performance not struggle too much ;)12:50
tristanWell, it's just not currently a requirement, and might make things more manageable if we removed the configurability of the build dir12:51
tlaterHm, I don't think its configurability really inhibits anything12:52
tristanneeding headroom works partly under the assumption that builds will occur on the same volume, I think12:52
tlaterAh, right, you mean we technically might not need headroom if we don't actually do anything on the same volume?12:53
* tlater wonders if it's not sensible to keep headroom anyway just to keep other applications on the machine happy12:53
tristanWell, rather we would want to make sure it's always on the same volume12:53
tristanand never ever make any distinction, I dont think we want to make distinctions about that12:54
tlaterOh, using the headroom as a way to expire artifacts when we need more build space?12:54
tristanRight12:54
tlaterI don't think that makes much sense12:54
tlaterHm12:54
tristantlater, so... to make sure we're still on the same page... we are *still* only talking about the default value for the *artifact cache* quota12:54
tlaterYeah12:54
tristanIn this case, it makes sense to default to something which reserves some extra space for builds12:55
tristanand take as much available space as possible12:55
tlaterI understand that, but I feel that this should be handled by something else?12:55
tristanOnce you've computed that value... it's all internally treated as "a quota of the artifact cache"12:55
tristanDoing something dynamic as the build progresses sounds like overkill12:56
tlaterWell, we can't really predict the build size12:57
tristanif you want to build something large, and download 10 torrents of your favorite porn at the same time on the same volume, you could have errors12:57
tristantlater, we cant predict the build size, but we can reasonably use a default number12:57
tlaterHm, yeah, I suppose this is the best way12:58
tlaterIt just feels ugly to have the artifact cache determine how much space we need for builds12:58
tristanI think 2GB is sensible, considering someone using buildstream should probably have a lot of free space, and considering the size of SSD on modern work stations12:58
tristanmaybe 3GB or smth12:59
tlatertristan: Should that headroom be hard?12:59
tristan<tristan> tlater, so... to make sure we're still on the same page... we are *still* only talking about the default value for the *artifact cache* quota12:59
tristanthe default value12:59
tristanof the quota12:59
tlaterAbsolutely, yes12:59
tristanthe artifact cache probably need only ever care about what that quota *is*12:59
tristani.e., this is probably computed as a default in the initialization of the Context() object13:00
tlaterMy question is whether we should refuse to add an artifact to the cache if everything is full and there's 2GB left *technically*, but the headroom prohibits it13:00
tlaterI guess you're saying yes x)13:00
tristantlater, I think that case *should* be very hard to hit13:01
tristanso yes :)13:01
tristantlater, i.e., because when you need to add an artifact, you are going to be expiring LRU artifacts to make space for it, so long as those artifacts are not needed for the currently processed targets13:02
tristanthis raises one more interesting point, though; which is more important to think about13:02
tlaterYeah, you'd need to be building essentially a giant mono-repo that's too large for your disk anyway13:02
tristantlater, parallel builds on the same machine which share the same artifact cache13:02
tristantlater, re the above, *exactly*, that's the point13:03
tlater... That's a possibility? :(13:03
tristanparallel builds is a problem, though13:03
tristanWe have been very careful about making sure operations never assume one build process for a given user, yes13:03
tlaterYeah, I suppose buildstream isn't a daemon, so just running twice...13:03
tristanthat is a very supported thing which would be a shame to throw away13:03
tristanstill, LRU approach is decent for it13:03
tristanno daemons please no13:04
tristanand no lock files13:04
tlaterHrm, we'd need to make sure we don't accidentally remove artifacts required for a parallel build13:04
* tlater doubts that's possible without lock files13:04
tristantlater, probably we need some well communicated policy, it seems impossible to satisfy this case :'(13:04
tlatertristan: Maybe with a *tiny* lockfile? ;p13:06
tristanugh13:06
tristanI dont think it's worth it13:07
tristanWe definitely have to support that people will build multiple projects on the same machine13:07
tristanBuilding in parallel is less usual or likely13:07
tlaterMultiple projects certainly isn't an issue, we could lock individual artifacts13:08
tristantlater, rather, we want to make sure that we do things atomically and fail gracefully if parallel builds cause havoc like this13:08
tristanyou are talking about locking again, which I would rather not get into, if we can avoid it, it's less fuss13:08
tlaterFair13:08
tlaterWe could check artifact mtimes13:08
tlaterAnd ensure we don't delete anything that was recently modified13:09
tristanWe can use lock files, if we are 150% that there is never a crash which leaves the lockfile locked hehe13:09
tristanhaving unclean state after exit is worse than a graceful failure for a reasonable reason13:09
tristantlater, marking things as used at the beginning of a build is already a good mitigation13:10
tristani.e. even if you have not used an artifact *yet*, but you know you will need it... mark it right away at startup13:10
tlaterIt's not perfect, but I suspect most builds will run longer than a few hours13:10
tristanthat will make the case much less likely to hit13:10
tlaters/will/will not/13:10
tristanmost of my builds run for a few hours13:11
tristanbut that's me, if you're not building ~400 modules, do you even call it a "build" ?13:11
tristanhehe13:11
tlaterYeah, that's what I meant, if we don't delete anything with an mtime of say 10 hours in the past we should be fine13:11
tlaterThen again, someone might just constantly build the same thing13:11
tristanuhhhhh mtime ?13:11
tristanwait a sec, we're not considering mtime are we ?13:12
tlaterWhy not?13:12
tristanmtime has nothing to do with least recently used13:12
tlaterWe're currently using mtime on ostree refs to figure out when something was used13:12
tristannope.13:12
tlaterAh, well, in my branch I manually set the mtime when I extract something13:12
tristanAre we able to *modify* the mtime of a ref ?13:12
tlaterI wasn't sure atime was handled correctly13:12
tristanAha13:12
tlaterYep, we are13:12
tristanOk, in that case, mtime, but not a number of hours... rather what I am saying is...13:13
tristanAt startup, see which artifacts we need to extract, and bump the mtime *right away*13:13
tristanso that when we extract it 2 hours later (and probably bump the mtime again), we've already preemptively made a reservation on that artifact13:14
tristanso a parallel build is much less likely to delete what we need13:14
tlaterAh13:14
tlaterI see what you mean13:14
tlaterUse the LRU cache as it is already implemented13:14
tlaterYeah, that would work13:14
*** noisecell has joined #buildstream13:16
*** xjuan has joined #buildstream13:25
*** tristan has quit IRC13:25
*** tristan has joined #buildstream13:30
*** jonathanmaw has quit IRC14:21
*** jonathanmaw has joined #buildstream14:21
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/34714:21
*** bethw has quit IRC15:13
*** bethw has joined #buildstream15:38
gitlab-br-botbuildstream: issue #338 ("buildstream fails with "EOFError: Compressed file ended before the end-of-stream marker was reached"") changed state ("opened") https://gitlab.com/BuildStream/buildstream/issues/33816:09
*** valentind has joined #buildstream16:12
*** Prince781 has quit IRC16:16
*** toscalix has quit IRC16:24
*** ernestask has quit IRC16:32
*** bethw has quit IRC16:33
*** dominic has quit IRC16:41
*** dominic has joined #buildstream16:41
*** noisecell has quit IRC16:42
*** aday has quit IRC17:04
*** aday has joined #buildstream17:05
*** aday has quit IRC17:09
jmacBuildStream commit 500f4f330fde8b6001a2f8d8921bd5b8acb79960 has broken benchmarks somehow; I'll investigate further later but be aware if you're doing anything with the benchmarks suite17:09
*** aday has joined #buildstream17:09
*** jonathanmaw has quit IRC17:15
*** Prince781 has joined #buildstream17:57
*** Prince781 has quit IRC18:03
*** aday has quit IRC19:22
*** aday_ has joined #buildstream19:22
*** aday_ is now known as aday19:23
*** tristan has quit IRC20:05
*** xjuan has quit IRC20:06
*** aday has quit IRC21:07
gitlab-br-botbuildstream: merge request (chandan/close-all-workspaces->master: _frontend/cli.py: Add option to close multiple workspaces) #357 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/35723:44
gitlab-br-botbuildstream: merge request (chandan/close-all-workspaces->master: WIP: _frontend/cli.py: Add option to close multiple workspaces) #357 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/35723:46

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