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

Tamas Cservenak updated MRESOLVER-278:
--------------------------------------
    Description: 
Introduce onSystemShutdown hooks and make following components use these:
 * DefaultSyncContext
 * GroupId RRF
 * SummaryFile TCS

Former will shut down named locks adapter, while latter two are flushing (if 
recorded!) in this hook. This also implies, that in mvnd for example, daemons 
needs to be killed to have recorded data saved.

  was:
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


> 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
>
>
> Introduce onSystemShutdown hooks and make following components use these:
>  * DefaultSyncContext
>  * GroupId RRF
>  * SummaryFile TCS
> Former will shut down named locks adapter, while latter two are flushing (if 
> recorded!) in this hook. This also implies, that in mvnd for example, daemons 
> needs to be killed to have recorded data saved.



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

Reply via email to