gtristan commented on PR #2012:
URL: https://github.com/apache/buildstream/pull/2012#issuecomment-2900997466

   I think this needs some deeper thought.
   
   Right now compose does:
   
   ```
            stage dependencies in /
                              |
                              V
           run integration commands
                               |
                               V
            apply splits to resulting
   filesystem after integration commands
                                |
                                V
     place selected files into %{install-root}
   ```
   
   The problem you are trying to solve, is that this approach conflicts with 
overlaps, in the case that initially staged artifact dependency chains have 
multiple artifacts which provide the same groups of files.
   
   In what ways can we address this ?
   
   * It seems to me that we would have this overlap problem even if it was a 
build element and not a compose element, so the question of *why are these 
files overlapping* is relevant
     * Does it make more sense for the overlapping element to use the [overlap 
whitelist](https://docs.buildstream.build/master/format_public.html#overlap-whitelist)
 ?
   * If we address this in the way that you propose
      * We render the integration command file capturing possibly useless in 
cases with the proposed option added
      * We are applying splits for different *reasons*
      * It may be that what we want is to have a *different set* of 
`include`/`exclude` elements in the staging process, that molds the input in 
advance of integration commands and before the *original set* of 
`include`/`exclude` rules are employed to curate the *output* of the compose 
element.
   * In the case of handling overlap errors raised in compose's 
`Element.stage()` implementation, I wonder if it makes sense to carve out an 
escape hatch of sorts ?
     * I.e. if it is valid to have overlap errors enabled in a project, does it 
still make sense to not enforce overlap whitelisting ?
     * If we can deem that it is indeed a case worthy of a special case escape 
hatch for the specific case of compose elements, would it make sense to 
(optionally) catch the exception raised by 
`Element.stage_dependency_artifacts()` and cause it to be non-fatal in this 
case ?
   * Would it change something if, for example, we handled the case where 
integration commands are not going to run differently, and just do the 
`Element.stage_dependency_artifacts()` with the `include/exclude/orphans` 
options, directly into `%{install-root}`, and circumvent the issue in this case 
?
   
   If we're going to add configuration here, we should consider what will be 
maximally useful for different possible use-cases.
   
   Also, I think it would be good to avoid breaking expectations of setting 
[overlap 
warnings](https://docs.buildstream.build/master/buildstream.types.html#buildstream.types.CoreWarnings)
 as [fatal 
warnings](https://docs.buildstream.build/master/format_project.html#configurable-warnings)
 (as mentioned above, it seems telling that this error you are trying to 
circumvent would still be occurring if this were a build element and not a 
compose element).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to