IRC logs for #buildstream for Thursday, 2020-05-07

*** benschubert has quit IRC00:29
*** narispo has quit IRC00:33
*** tristan has quit IRC00:33
*** slaf has quit IRC00:33
*** doras has quit IRC00:33
*** walterve[m][m] has quit IRC00:33
*** finnb has quit IRC00:33
*** dbuch[m] has quit IRC00:33
*** jward has quit IRC00:33
*** segfault1[m] has quit IRC00:33
*** Trevio[m] has quit IRC00:33
*** krichter[m] has quit IRC00:33
*** Demos[m] has quit IRC00:33
*** persia has quit IRC00:33
*** tchaik[m] has quit IRC00:33
*** WSalmon has quit IRC00:33
*** jjardon has quit IRC00:33
*** pro[m] has quit IRC00:33
*** cgm[m] has quit IRC00:33
*** awacheux[m] has quit IRC00:33
*** skullone[m] has quit IRC00:33
*** DineshBhattarai[m] has quit IRC00:33
*** asingh_[m] has quit IRC00:33
*** jjardon[m] has quit IRC00:33
*** SamThursfield[m] has quit IRC00:33
*** kailueke[m] has quit IRC00:33
*** mattiasb has quit IRC00:33
*** dylan-m has quit IRC00:33
*** reuben640[m] has quit IRC00:33
*** rafaelff1[m] has quit IRC00:33
*** theawless[m] has quit IRC00:33
*** connorshea[m] has quit IRC00:33
*** abderrahim[m] has quit IRC00:33
*** m_22[m] has quit IRC00:33
*** albfan[m] has quit IRC00:33
*** tlater[m] has quit IRC00:33
*** ironfoot has quit IRC00:33
*** flatmush has quit IRC00:33
*** benbrown has quit IRC00:33
*** jswagner has quit IRC00:33
*** narispo has joined #buildstream00:33
*** slaf has joined #buildstream00:33
*** tristan has joined #buildstream00:34
*** finnb has joined #buildstream00:34
*** dbuch[m] has joined #buildstream00:34
*** jward has joined #buildstream00:34
*** segfault1[m] has joined #buildstream00:34
*** Trevio[m] has joined #buildstream00:34
*** krichter[m] has joined #buildstream00:34
*** Demos[m] has joined #buildstream00:34
*** persia has joined #buildstream00:34
*** tchaik[m] has joined #buildstream00:34
*** WSalmon has joined #buildstream00:34
*** jjardon has joined #buildstream00:34
*** pro[m] has joined #buildstream00:34
*** cgm[m] has joined #buildstream00:34
*** skullone[m] has joined #buildstream00:34
*** awacheux[m] has joined #buildstream00:34
*** albfan[m] has joined #buildstream00:34
*** kailueke[m] has joined #buildstream00:34
*** DineshBhattarai[m] has joined #buildstream00:34
*** asingh_[m] has joined #buildstream00:34
*** connorshea[m] has joined #buildstream00:34
*** jjardon[m] has joined #buildstream00:34
*** theawless[m] has joined #buildstream00:34
*** m_22[m] has joined #buildstream00:34
*** mattiasb has joined #buildstream00:34
*** rafaelff1[m] has joined #buildstream00:34
*** SamThursfield[m] has joined #buildstream00:34
*** dylan-m has joined #buildstream00:34
*** tlater[m] has joined #buildstream00:34
*** reuben640[m] has joined #buildstream00:34
*** abderrahim[m] has joined #buildstream00:34
*** ironfoot has joined #buildstream00:34
*** flatmush has joined #buildstream00:34
*** benbrown has joined #buildstream00:34
*** jswagner has joined #buildstream00:34
*** irc.acc.umu.se sets mode: +oo jjardon ironfoot00:34
*** walterve[m][m] has joined #buildstream00:43
*** doras has joined #buildstream00:47
*** mohan43u has quit IRC00:54
*** mohan43u has joined #buildstream00:54
*** tristan has quit IRC03:00
*** traveltissues has quit IRC05:36
*** traveltissues has joined #buildstream05:36
*** seanborg_ has joined #buildstream07:18
*** jude has joined #buildstream07:25
WSalmonjuergbi, tristan did you work out what was up with the ci for this? fdsdk are rather keen to get this in https://gitlab.com/BuildStream/buildstream/pipelines/14288718807:29
*** rdale has joined #buildstream07:31
juergbiWSalmon: no, but I can merge it manually for now as the error is not related to the branch07:32
juergbiWSalmon: done07:36
juergbiwe still need to look into the issue to fix future pipelines07:37
WSalmonthanks juergbi07:38
*** tristan has joined #buildstream07:39
*** benschubert has joined #buildstream07:41
*** tpollard has joined #buildstream08:07
benschuberttristan, juergbi : concerning the plugin through junction, we were saying we should keep tar. However, I guess we don't want to keep 'downloadablefilesource' in core right?08:19
juergbiwell, we can't really have tar without that, can we?08:20
juergbior do you mean as a public API?08:21
benschubertas a public API08:21
WSalmonbenschubert, but would we then have it twice?08:22
benschubertyeah it would mean either:08:22
benschubert- We do a 'stripped' tar approach and move the current tar plugin to elsewhere08:22
benschubert- We reimplement everything needed from downloadablefilesource in the tar plugin / duplicate it between buildstream + somewhere else08:22
benschubert- Else ?08:22
juergbihm, I don't think we can actually strip all that much08:23
*** ChanServ sets mode: +o tristan08:24
tristanIs there an issue with keeping DownloadableFileSource in core and making it public ?08:24
juergbiso if we need the code in core anyway, I tend towards putting downloadablefilesource as public API in the core08:24
tristanWe want to avoid that because... we want downloadable file source to evolve separately and possibly more frequently ?08:24
benschuberttristan: we would need to release a new buildstream for a bug in it :)08:24
benschubertyeah, on the other hand I don't think that would evolve much...08:24
juergbibenschubert: we'd have to do the same if we copied it into internal tar...08:24
benschubertfair point08:25
juergbithe actual public API surface is also fairly small, afaict08:25
benschubertshould we go fo ra public 'downloadablefilesource' in Core?08:25
juergbiI think so. a possible alternative I see is to provide the corresponding functionality more as a library instead of as a Source subclass08:25
tristanI don't think I have a problem with this, i.e. when it comes to fixing bugs, we don't need a minor point feature release for that08:26
benschubertthat's true08:26
benschubertok let's go for this. Should we keep it at buildstream's root? (buildstream.downloadablefilesource?) Or should we provide a "buildstream.mixins" package that contains helpers for plugin implementers?08:27
benschubert(I quite like the second one as it's more explicit)08:28
tristanIs there any kind of special feature of "mixins" ? I've heard this word before08:28
tristanbenschubert, in whichever case, I think it should reside at the same level as BuildElement and ScriptElement08:29
tristanWhichever place provides abstract classes08:29
benschuberttristan: "mixins" is usually a class that you can inherit from to get more features,08:30
benschubertAh forgot about those two08:30
benschubertmixins might not be the right term then for all of this08:30
tristanbenschubert, in fact, I would probably be partial to having it at the same level as Plugin, Element and Source as well08:32
tristanWhich is currently the root, doesn't really have to be, but it seems to me that you just have a choice of what to derive from (Element, Source, DownloadableFileSource, BuildElement, ...)08:32
benschubertyeah, and actually we tell implementers to only import from "buildstream" (so "from buildstram import BuildElement")08:32
benschubertah yeah good point08:33
benschubertok, so let's just make 'DownloadableFileSource' importable from BuildStream and remove the `_`? Then remove it from bst-plugins-experimental along with the duplicated tar plugin?08:33
tristanI do like keeping this at the root, the only issue I could see is that it might feel crowded if we ever opened up the python API to something other than plugins08:33
*** phoenix has joined #buildstream08:34
benschubertright, this seems though that it should be a ML thread :'D08:34
tristanEvery time we think about that, I keep feeling resistant to opening up further API, it does keep coming up though08:34
benschubertI think we'll need to be very careful, but there seem to be a need08:35
tristanRight now we have 2 python surfaces which are buildstream.testing and buildstream08:35
benschubertin which case, should we move all plugins in `buildstream.plugins` ?08:35
benschubert*all plugin-related classes08:35
benschubertthat's yet another breaking change :/08:35
tristanIf we keep everything in buildstream and later open up further application API surfaces (Stream etc), then the worst that happens is that we have the plugins at the same place08:36
benschubertBut might free us in the long term if we end up opening stuff?08:36
tristanwhich honestly, doesnt look bad to me08:36
benschubertthat's also true08:36
tristanWhat makes "testing" special IMO, is that it could technically be distributed separately08:36
benschubertand buildstream/buildstream.testing is quite a clear separation08:36
tristanRight, if we had an application facing API, it would *still* need the Plugin/Source/Element APIs to do useful things08:37
benschubertcorrect08:37
benschubertok so let's import it in `buildstream` directly. I can make that change. Is that worth a ML thread? alongside with keeping `tar` in core?08:38
tristanI think there is a suitable long standing issue appropriate for that08:38
tristanit's been forever requested to be public08:38
tristanbut I wasn't around for intermediate discussions08:39
tristanhttps://gitlab.com/BuildStream/buildstream/-/issues/61008:40
tristanOld MR: https://gitlab.com/BuildStream/buildstream/-/merge_requests/74308:40
benschubertand with regards to the `tar` plugin?08:40
benschubertML or not?08:40
juergbibenschubert: you've mentioned this already in your thread08:41
tristanbenschubert, I guess it's better to summarize in a post08:41
tristanIt was also mentioned in the 2.0 planning thread08:41
benschubertok I'll add a last reply to my thread with it in it then :)08:41
tristanWhatever, I don't think it's a huge deal but if anyone thinks otherwise go ahead and post :)08:41
benschubertjuergbi: yeah, however it was quite "hidden" so never sure :D08:42
tristanjuergbi, regarding error reporting for conflicting projects, I think we need either one of two things: (A) A dictionary of all loaders shared between all the loaders, to error out as we go, or (B) A loader walk at the end of the load process08:43
tristanProbably (A) is more performant and better08:44
tristanWe don't have global shared data otherwise during the load do we ?08:44
*** santi has joined #buildstream08:52
cphangjuergbi we're hitting a nasty bug in https://gitlab.com/celduin/infrastructure/celduin-infra/-/issues/144 where we're getting gRPC errors only on push jobs. Starting from https://gitlab.com/BuildStream/buildstream/-/blob/master/src/buildstream/_artifactcache.py#L515 I think I've localised it to failure at a UploadMissingBlobs call. Given the low08:58
cphanglevel nature of the gRPC error (I think it's coming from https://github.com/grpc/grpc/blob/master/include/grpcpp/impl/codegen/method_handler_impl.h#L44) is it possible there's an unhandled gRPC exception occurring in buildbox?08:58
benschubertjuergbi: any reason we do a `readlink` there: https://gitlab.com/BuildStream/buildstream/-/blob/master/src/buildstream/testing/_utils/site.py#L77 ? If fails if you simply "install" buildbox-run-bubblewrap as "buildbox-run" instead of symlinking it09:14
benschubertthus skipping all sandbox tests :)09:14
*** seanborg__ has joined #buildstream09:15
*** seanborg_ has quit IRC09:16
*** phoenix has quit IRC09:27
juergbicphang: hm, haven't seen this before. odd that buildbox complains about batch download during push (upload)09:30
juergbibenschubert: such that the test suite knows which implementation it is09:30
juergbithere are a few xfails that are specific to userchroot09:30
juergbinot ideal but at least it's only in the test suite09:30
juergbido you have a better suggestion?09:31
juergbimaybe the output of --capabilities would be sufficient, at least for some tests09:31
juergbiprobably have to check xfail by xfail09:31
cphangjuergbi yeh. we don't think that one causes the other, particularly as we can see this failure mode occurring whether the batch download errors in buildbox occur or not.09:31
benschubertjuergbi: ah ok fair point. Should he error out instead if buildbox-run is not a symlink? That would be more explicit09:33
juergbibenschubert: I'd certainly be fine with that09:34
benschubertok I'll do this :)09:35
benschubertjuergbi: also, do we get any logs for the FUSE stage child? It just dies with a stdruntime_exception thrown at https://gitlab.com/BuildGrid/buildbox/buildbox-common/-/blob/master/buildbox-common/buildboxcommon/buildboxcommon_client.cpp#L736 ?09:35
benschubertwhen trying to run a test09:35
juergbibenschubert: I don't think casd redirects fuse stdout/stderr, so it should be in buildbox-casd logs09:36
juergbiwe should the situation at least for common issues. e.g., fusermount3 missing might be a common issue09:37
juergbi*should improve09:37
benschubertand I didn't have it, guess that is my issue :D09:38
tristanjuergbi, I should have it ready soon, have to fix some tests and possibly clarify some areas, note that the junctions.py::test_build_of_same_junction_used_twice() test would go away with my first MR09:49
tristanbecause it becomes unsupported, and then we discuss how to explicitly support it on the ML, right ?09:50
juergbitristan: I still think we should support a simple way of allowing the same project to be loaded twice right away. we can postpone the private/isolated discussion but I don't like merging an incomplete solution that might completely block some users09:54
*** tristan has quit IRC09:54
*** seanborg__ has quit IRC09:55
*** seanborg__ has joined #buildstream09:55
*** tristan has joined #buildstream10:37
*** ChanServ sets mode: +o tristan10:37
tristanjuergbi, went to eat and came back10:38
tristanok so, if you want to solve the ability of loading the same junction twice with (possibly) differing configurations within the same pipeline, before landing the MR... that's fine with me10:39
tristanI guess we'll need to figure out how it works10:39
tristanwhile the thought process around reworking the loader is maddening, the code changes to get the first part working are surprisingly small10:40
tristan(i.e.: I'm not bothered at all by rebases and postponing a bit)10:40
juergbiok, sounds good. and I assume the code changes for allowing the same project twice should also be fairly simple, it's more about deciding on exact syntax/semantics10:41
tristanI don't know, I suspect lines of code to be small(ish) depending on the ultimate route10:44
tristanas I recall, you wanted privateness or I preferred the word 'isolation' of projects10:44
tristanI also like this approach better because it doesnt force any knowledge on reverse dependency projects10:45
tristanbut it requires some checks we need to find out (A) whether preventing runtime dependencies from propagating through to reverse dependency projects is the only danger... and (B) how to do the check for (A) if that is indeed enough10:45
tristanI suppose that wouldn't cost much code but might be hard to get performant10:46
tristanjuergbi, anyway I'll prepare my branch with that test removed and we can talk more then10:46
juergbitristan: I think long term we want two approaches: 1) allow the top-level to whitelist a junction to prevent the new error 2) allow intermediate projects to mark junctions as private/isolated10:48
juergbi(2) may be a larger discussion but I'd say we can postpone that if we at least have (1), which may be simpler10:49
tristanI'm don't think I agree, but I might :)10:49
tristanjuergbi, from my point of view, (1) is a superior API, and if we don't have real justification to add (2) then I would prefer that (2) never exists10:50
tristanAlthough it's probably true that (2) is easier to implement, it seems to me (at least right now), that the world would be a better place if only (1) existed10:51
juergbiare you mixing up (1) and (2)? I'm confused10:51
tristanOh damn, yes I was10:51
tristancompletely in all three lines :)10:52
juergbiok, at least you're consistent :)10:52
tristanheh10:52
juergbiok, that's an interesting point10:52
juergbiI agree that if (2) can cover all use cases, we shouldn't even implement (1)10:52
juergbiI thought there might be use cases where (2) doesn't work but maybe that's not the case10:53
tristanYeah, that's what we're not sure about... but I think it amounts to this10:53
juergbiso I guess we at least have to partially think about the whole thing right away10:53
tristanIf you are in a situation where you might have needed to whitelist an error, it means you might be in a case where we force you to create an additional project in between in order to encapsulate/isolate your redundant subproject10:53
tristanit might mean that10:53
juergbibest starting point would probably be use cases10:54
tristanindeed10:54
tristanjuergbi, both use cases, and really identifying what is the problematic case10:55
tristanI'm thinking it's a case where an element has (indirect) runtime dependencies to two different versions of the same element10:55
juergbiyes, I think that's the biggest problematic case11:01
tristanIt could be that we just blatently allow multiple junctions to the same project, and only error out on that (element related) error condition, too11:03
juergbialmost duplicate build-only dependencies for different elements (e.g., two different versions of the compiler) may also be considered an issue in some contexts, and may be acceptable or even needed in other contexts11:03
tpollard+1 juergbi11:03
tristanthen again11:03
tristanone interesting thing is that having two different instances of the same element as dependencies, does not mean it will result in a problematic case, or a file overlap11:04
tristanFor instance, I might have tooling which I use to create images that is based on fdsdk, and I might almost never rev that tooling11:05
tristanbut I might use those artifacts to build bootable images of newer fdsdk snapshots11:05
juergbior you might even have a script element or similar where you install certain dependency trees in different locations in the sandbox11:08
juergbinot causing any conflicts11:08
tristan... in that case of course, I would only have build dependencies, but perhaps I am building a system with multiple sysroots11:08
tristanexactly11:08
tristananother possibly API would be that by default, it's always an error; but projects which have a need could disable the error and deal with overlap errors if they occur later on11:10
tristannot that pretty though11:11
tristannote that in these cases though; if we were to have a "isolated" junction feature; we could still force such elements to not be propagated forward to reverse dependency projects, and make that illegal11:13
tristanwe could have an error message saying that "You are indirectly depending on isolated elements" and hinting that the project you are depending on elements from, should provide a `compose` or such element for you to depend on instead11:14
* tristan finds string division to be an interesting python feature11:16
tristantmpdir / "sub-project"11:16
*** cs-shadow has joined #buildstream11:27
*** rdale has quit IRC11:37
cs-shadowwhile running tests on bst-plugins-experimental, I am repeatedly getting error from buildbox-fuse about `Error staging "..." into "": "std::runtime_error exception thrown at [buildboxcasd_fusestager.cpp:128], errMsg = "The FUSE stager child process unexpectedly died with exit code 1"`11:54
cs-shadowany ideas what might be causing this?11:54
cs-shadowfull gist at https://gitlab.com/snippets/197454311:54
cs-shadowI also wonder if BuildStream needs to catch these errors and tell users what they can do11:55
coldtomis there a nice way i can get verbose buildbox-casd logs when used in bst?11:55
*** rdale has joined #buildstream11:57
tristanoh no12:00
tristanah, never mind :)12:03
cs-shadowI thought we pass our log levels to casd12:04
cs-shadowso `--debug` should help?12:04
cs-shadow@coldtom: ^12:04
benschubertcs-shadow: do you have 'fusermount3' ? I had that just before because of this :)12:05
cs-shadowbenschubert: seems like that was it, thanks!12:17
cs-shadowalso, I'd appreciate reviews on https://gitlab.com/BuildStream/bst-plugins-experimental/-/merge_requests/106 so that we can unbreak the plugins release on pypi12:18
tristanjuergbi, I've put up the first iteration here: https://gitlab.com/BuildStream/buildstream/-/merge_requests/190112:32
tristanI don't know if it will pass all tests but the normal `tox -e py37` is passing12:32
tristanThere are a couple of open ended questions which remain around the loader (I think I can remove some weird code that appears to still be handling obsolete stuff)12:33
tristanAnyway it's a start12:34
juergbitristan: great, thanks12:35
juergbiI'd expect the _loaders variable to no longer be used12:35
juergbias there the key was the junction name, which should now be irrelevant12:36
tristanjuergbi, I thought that was an optimization for _get_loader(), when parsing more than one dependency which depends on something across the same junction12:36
tristanit looks still relevant for that :-S12:37
tristanindex of loader by local junction name12:37
tristanI removed a piece of code which sets `_loaders[filename] = None`, and I have a deadcode error about CONFLICTING_JUNCITON in there which I want to understand fully before safely removing12:38
juergbiah, right, for local lookup it's still necessary12:39
coldtomthat worked, ta cs-shadow12:53
*** seanborg_ has joined #buildstream13:26
*** seanborg__ has quit IRC13:26
*** seanborg_ has quit IRC13:32
*** seanborg_ has joined #buildstream13:32
WSalmonjuergbi, why do some jobs take seconds to fail to push because its already in cache and others take about a minute to come to the same concultion, https://gitlab.com/freedesktop-sdk/freedesktop-sdk/-/jobs/542596926#L1502 i would have thought they would all A) be fast, and B) not try to push back the the server they just got it from...13:51
WSalmonskip B in this case13:52
coldtomat a guess i assume the FindMissingBlobs calls take longer for bigger artifacts13:54
juergbiyes, I assume that's the reason for the difference13:54
juergbior actually, we have to distinguish between artifact data and artifact proto13:55
juergbi"already has artifact ... cached" means that it already had an artifact proto with that cache key13:55
juergbihowever, it always said "Pushed data" above, so at some blobs were apparently missing13:56
WSalmoncoldtom, is the cache full?13:56
WSalmoni would not expect it to get removed between the push and pull13:56
juergbiI think there is also a logic error. we should always push our proto if we pushed the blobs13:57
juergbiotherwise the server may still have a proto from a previous build with incomplete blobs, and that proto would never get replaced13:57
WSalmonbut i dont think it should be pushing anything only seeing that the artifact is already there?13:57
WSalmonthat too13:57
juergbia long time ago we used to guarantee that if the artifact ref was on the server, the artifact blobs are also still available13:58
juergbiin that scenario checking whether the artifact is on the server was very cheap13:58
juergbihowever, that's no longer the case with blob-based cache expiry etc.13:58
juergbiso we may need to be a bit smarter about when we can skip push early on13:59
juergbiit's not trivial as e.g. we don't check whether an artifact is complete on the remote when we pull14:00
juergbithe Remote Asset API should guarantee this again, though, iirc. should revisit when moving to that14:00
cphangjuergbi referential integrity is tricky. I consider that a server side responsibility. E.g Buildbarn have a completenesschecker to handle this between Action Cache/CAS https://github.com/buildbarn/bb-storage/blob/master/pkg/blobstore/completenesschecking/completeness_checking_blob_access.go14:04
cphangDoing the same thing for the artifact cache is a goal at https://gitlab.com/celduin/infrastructure/celduin-infra/-/issues/1614:06
juergbiyes, with Remote Asset API we should get that14:06
cphangyep :)14:07
coldtomi'd be surprised if the cache is full, perhaps bst logs the "Pushing blobs" when it calls FindMissing14:07
juergbiand I don't think there should be a bb-artifact-cache14:07
juergbias the plan is to move away from that protocol14:07
cphangjuergbi it's an intermediate step. unless you think there's a viable remote-asset client side implementation in a few weeks?14:08
juergbiI'm planning to work on initial parts in a couple of weeks or so. it will take a while until it's complete, though14:08
juergbican't give you an ETA14:09
cphangjuergbi np, once BuildStream move over to the remote asset API then of course I expect Buildbarn type solutions to move over to that.14:10
cphangI think there were disucssions on this in #buildbarn a week or two ago.14:10
*** seanborg_ has quit IRC16:00
*** pointswaves has joined #buildstream16:49
*** tpollard has quit IRC17:00
*** santi has quit IRC17:12
*** santi has joined #buildstream17:13
*** rdale has quit IRC17:48
*** phoenix has joined #buildstream19:03
pointswavesIm pretty confused why even this is notworking https://paste.gnome.org/pjyezik6b benschubert juergbi19:09
benschubertpointswaves: page does not exist?19:43
*** cs-shadow has quit IRC19:57
pointswavesbenschubert, https://paste.gnome.org/pmtx7qsbk the default on gnome is only 30min i have been caught out once or twice forgetting to change it20:35
*** jude has quit IRC20:42
pointswaveshttps://paste.gnome.org/popey7v6e21:03
pointswaveshttps://pastebin.com/YKuTjBsV21:06
*** pointswaves has quit IRC21:38
*** phoenix has quit IRC23:05

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