You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Tamas Cservenak (Jira)" <ji...@apache.org> on 2022/10/28 14:11:00 UTC

[jira] [Updated] (MRESOLVER-278) BREAKING: Introduce RepositorySystem shutdown hooks

     [ https://issues.apache.org/jira/browse/MRESOLVER-278?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tamas Cservenak updated MRESOLVER-278:
--------------------------------------
    Summary: BREAKING: Introduce RepositorySystem shutdown hooks  (was: BREAKING: Make Session extend AutoCloseable (and introduce onCloseHandlers))

> BREAKING: Introduce RepositorySystem shutdown hooks
> ---------------------------------------------------
>
>                 Key: MRESOLVER-278
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-278
>             Project: Maven Resolver
>          Issue Type: New Feature
>          Components: Resolver
>            Reporter: Tamas Cservenak
>            Assignee: Tamas Cservenak
>            Priority: Major
>             Fix For: 1.9.0
>
>
> So far, in (vanilla) Maven, the lifecycle of session was on par with lifecycle of SISU container, as Maven does something like this:
>  * boot, create container
>  * create session
>  * work
>  * destroy container
>  * exit JVM
> So, Maven execution is 1 session 1 container, are on par.
> This is not true for cases where container (and resolver components) are reused across several sessions, like mvnd does. Also, current code on master (named locks adapter) uses {{@PreDestroy}} to shut down adapters, that is invoked when container is shut down, while the adapters are created per-session. This means that long-living mvnd daemons will shut down the unused adapter only when daemon itself is shut down, even is session for which adapter was created is long gone/done.
> While Maven has "session scoped" notion, resolver has not. Hence, simplest and cleanest solution is to make RepositorySystemSession have a method to "close", denoting that "this session is done". Also, if we can provide hooks for "onSessionClose", this resolves all the problems, as for example the adapter, that is created per session, could be now cleanly shut down at session end.
> One gotcha: this change implies a {*}breaking change for integrators of resolver{*}:  integrator should make sure they close the session after they are done with it.
> Example changes needed for resolver users: [https://github.com/apache/maven/pull/822]
> The "pattern" to make use of this feature in resolver is following:
>  * stuff something into session data, ideally using computeWhenAbsent
>  * if absent, register a callback hook as well
>  * in callback, get the stuffed thing from session and if present, do something with it
>  
> Example of Maven adopting to this new requirement:
> https://github.com/apache/maven/pull/831



--
This message was sent by Atlassian Jira
(v8.20.10#820010)