IRC logs for #buildstream for Saturday, 2020-06-06

*** tristan has quit IRC05:48
*** tristan has joined #buildstream07:36
*** ChanServ sets mode: +o tristan07:36
*** tristan has quit IRC07:40
*** tristan has joined #buildstream08:37
*** ChanServ sets mode: +o tristan08:37
juergbitristan: regarding #1340 I've recently been thinking about changing the algorithm for staging / overlap handling09:00
juergbian idea I had was to first create CasBasedDirectory objects for each dependency (take care of split domains as part of this step, where necessary)09:01
juergbiand then merge these directories in a single pass by recursively iterating over all these sorted dependency directories in parallel09:02
juergbithis would directly provide conflict information as part of the merge without having to generate/store/check file lists for each dependency09:03
juergbiand e.g. directories (or even whole directory trees) that are exclusive to a single dependency wouldn't even need to be iterated09:04
juergbiI'd expect that to generally improve staging performance and also allow simplification of the Directory API (no filelistresult, no conflict resolution), at the cost of having to write this, hopefully not too complicated, merge algorithm09:05
juergbidon't know whether the performance impact would be significant, though (will obviously depend on the directory structure)09:06
tristanjuergbi, sounds like an optimization, I do think that the current implementation requiring a search() is bogus, that doesn't detract from search() in itself being completely broken without support for full element paths though09:13
tristanThis is ridiculously easy to fix, it's hard to believe it's stood for so long09:14
juergbiagreed09:14
tristanAnyway, I'm adding tests using script element via the integration route, I'll try to add overlap tests for this case too, it wont hurt :)09:15
tristanjuergbi, The one thing I'm not entirely sure of, is whether we should expose Element.full_name09:15
tristan(currently _get_full_name())09:15
tristanSeems like we should allow that in public API, but as there is no immediate need for it, I'll exclude that from the MR09:16
juergbitristan: search() is relative to the Element's project, right?09:19
juergbibut get_full_name() wouldn't be, hm09:20
tristanjuergbi, After the following MRs, it won't make a difference afaict09:25
tristanCurrently with junction name coalescing things are weird indeed09:25
tristanoh wait no09:26
tristanit would still differ09:26
tristanOh strange09:26
tristanOh no, I was right the first time09:27
tristanOr not, jaysus, no it's not09:27
*** benschubert has joined #buildstream09:27
tristanok, so this is indeed trickier than I thought09:27
tristanA full path is not the same as a project relative name, and Element.search() needs a project relative name, not a full path09:28
tristanNot a lot tricker than I thought, but I didn't notice this :)09:28
tristanjuergbi, thanks for pointing that out haha09:28
tristanGrrr, anyone run integration tests locally lately ?09:32
tristan"The FUSE stager child process unexpectedly died with exit code 1"09:32
tristanAnother marvelously descriptive error message09:32
tristanjuergbi, I'm using buildbox-x86_64-linux-0.0.8-1e3b6f8e.tar.xz, should I have something newer than that ?09:34
juergbitristan: fusermount3 (possibly fuse3 package) not installed?09:35
juergbiyes, definitely need to forward the error message from buildbox-fuse09:35
tristanCan we get an error message about requiring fuse3 ?09:36
juergbiyes, we need to fix that in buildbox-casd09:37
tristanThat fixes things it seems09:37
juergbihttps://gitlab.com/BuildGrid/buildbox/buildbox-casd/-/issues/7209:43
tristanUnder the new world order of removed junction coalescing, I guess it would be correct to say that: "An element relative name of a dependency is the dependency name, with the element's project's junction's name prefix stripped away"10:04
tristanI.e. you cannot have a dependency on an element which does not share the same prefix10:04
tristanSo strip away self._get_project.junction._get_full_name() from the dependency._get_full_name(), plus one ":", and there you have the element relative name of any dependency10:06
tristanRather: self._get_project().junction._get_full_name()10:06
tristanUnfortunately in this case, I need to delay the Element.search() fix to a later commit after nuking junction name coalescing10:17
tristanI was otherwise hoping to include it in https://gitlab.com/BuildStream/buildstream/-/merge_requests/195610:18
juergbiyes, this sounds correct to me10:27
* tristan is adding yet another test but it seems to be correct10:30
juergbitristan: I've replied to the junction mail, so we can hopefully conclude this asap10:52
tristanGreat10:55
tristanI've made some progress, now I have the full pathing which is rather thorough (did I miss any surfaces where we support element paths ?), and now the Element.search() thing which must come after !190110:55
tristanElement.search() fix is at https://gitlab.com/BuildStream/buildstream/-/merge_requests/1957 now fwiw10:56
tristanIt doesn't yet fix overlaps, but I think overlaps need to be fixed differently now that I consider element relative searching10:56
tristanmaybe not, but I think we can just use the plugin_id for the overlaps problem10:56
tristan(only the last two commits on !1957 are Element.search())10:57
tristannot in my inbox yet but I have it on the list10:59
tristanjuergbi, So maybe we should require that every duplicated project be listed, rather than relying on one unlisted project remaining ?11:00
tristanWhile my mind has been a bit too tightly tied to the implementation, this appears to be a better user facing API11:00
tristanduplicates: { projectname: [ "junction1.bst", "junction2.bst" ] }, the list of junctions should always cover *ALL* junctions to a duplicated project, leaving none out (after being merged with superprojects)11:02
tristanSo the first time a project is duplicated, the list must have 2, but a superproject might extend that with an additional single-item list for the same project11:03
tristanjuergbi, replied: one problem I can see with this plan I think11:12
*** tristan has quit IRC11:17
*** hasebastian has joined #buildstream15:22
*** hasebastian has quit IRC18:09
*** benschubert has quit IRC19:41

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