This sounds better to me too, `extra_*` has some odd connotations that makes it seem like it does not belong...
On Wednesday, September 21, 2016 at 10:26:48 AM UTC-6, Paul Schoenfelder wrote: > > I am afraid it may not be that simple. Because if A requires the >> application to only be loaded because let's say it needs to set some >> configuration before the application starts, we would need to make sure >> myapp is loaded before A and that myapp is started before B. So we need a >> slightly more complex dependency resolution which gets trickier in cases >> where B also has a dependency on A. > > > It's simpler if B has a dependency on A, since it means A has to be > started before B can be started, which would likely work out fine. But > either way, you can't know when A will start :myapp, or if it ever will, > which is why A would need to add :myapp to :included_applications, the > .script which would get generated would then load :myapp, load/start A, > which would start :myapp in it's top-level supervisor (after configuring > it/etc.), then once A (and thus :myapp are started), start B. This would > happen with or without the explicit dependency on A by B, since systools > resolves the dependency order of applications when it generates the .script > for the release. > > How would this conflict arise inside releases though if the type >> (permanent, load, etc) is specified in only one place? > > > I mean that is how it would be solved logically if applications could > specify their start type requirements for dependent apps - it's effectively > what must already be done today, just by hand. > > > I would still like to have a mechanism where we disable the dependency >> guessing and that mechanism should be backwards compatible hence I think we >> should keep how :applications work today. Your code above also wouldn't >> work by default, it would require at least a call to Enum.uniq/2 (which >> means the application list is even more ambiguous from the user >> perspective). > > > Well, my code was more pseudo-code, as I mentioned, the manual entries in > applications would need to take precedence over anything inferred, which is > more complex than a single line of code can express clearly. You do bring > up a good point about backwards compatibility though, extending > :applications means that it would only work on that version of Mix or > greater. > > I don't like the idea of "extra_applications" though, the name just > doesn't seem to express what the list is really there for - namely to > provide metadata about the load/start behaviour of applications. Maybe it's > simpler/clearer to break them out, e.g. "loaded_applications", > "started_applications", where the latter allows one to specify the start > type, defaulting to :permanent. Thoughts? > > Paul > > > > On Wed, Sep 21, 2016 at 10:45 AM, José Valim < > jose....@plataformatec.com.br <javascript:>> wrote: > >> >> >>> The conflict resolution for this is actually pretty simple: if A >>> specifies [myapp: :load], and B specifies [myapp: :permanent], B wins, >>> because B cannot start if :myapp is not started, but A can still start if >>> :myapp is both loaded/started. >>> >> >> I am afraid it may not be that simple. Because if A requires the >> application to only be loaded because let's say it needs to set some >> configuration before the application starts, we would need to make sure >> myapp is loaded before A and that myapp is started before B. So we need a >> slightly more complex dependency resolution which gets trickier in cases >> where B also has a dependency on A. >> >> This is how the conflict would have to be resolved for releases, aside >>> from just raising an error and requiring A to be modified to use :permanent >>> as a start type. >>> >> >> How would this conflict arise inside releases though if the type >> (permanent, load, etc) is specified in only one place? >> >> >>> I really feel like adding an extra field here doesn't simplify anything. >>> The algorithm could just as easily be: >>> >>> applications = applications ++ >>> (all_runtime_apps_from_prod_deps_-- included_applications) >>> >> >> I would still like to have a mechanism where we disable the dependency >> guessing and that mechanism should be backwards compatible hence I think we >> should keep how :applications work today. Your code above also wouldn't >> work by default, it would require at least a call to Enum.uniq/2 (which >> means the application list is even more ambiguous from the user >> perspective). >> >> -- >> You received this message because you are subscribed to the Google Groups >> "elixir-lang-core" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to elixir-lang-co...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JoG%2B0pmLcLJt5Xciiw0UmVLAukkT0GLG4u0NOX7cRnPg%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JoG%2B0pmLcLJt5Xciiw0UmVLAukkT0GLG4u0NOX7cRnPg%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/e114f2fc-1e5e-4640-873c-28130f3436f7%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.