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

Ivan Gagarkin reassigned IGNITE-19708:
--------------------------------------

    Assignee: Ivan Gagarkin

> Check refcounter of unit before undeploy
> ----------------------------------------
>
>                 Key: IGNITE-19708
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19708
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Mikhail Pochatkin
>            Assignee: Ivan Gagarkin
>            Priority: Major
>              Labels: ignite-3
>
> # Change clusterDURecord.status to OBSOLETE value. This operation could fail 
> because another process has already changed status to OBSOLETE or REMOVING 
> value. It is also impossible to start an undeployment process in case the 
> deployment process is still in progress.
> After this step the deployment unit is not available for new code execution. 
> Code execution in progress still can use this deployment unit.
>  # Meta storage event must be fired to all target nodes due to a change of 
> clusterDURecord.status.
>  # After receiving this event by the target node the system must change 
> nodeDURecord.status to OBSOLETE value.
>  # The node waits for finishing of all code executions in progress that 
> depend on this deployment unit. As soon as all code executions are finished 
> nodeDURecord.status must be changed to REMOVING value.
> From this point it is impossible to use the deployment unit for code 
> execution neither for new tasks nor for old tasks (the second is impossible 
> due to the invariant that all old tasks are finished).
>  # For each change of nodeDURecord.status to REMOVING value the system is 
> able to receive an event from meta storage and check that all nodes have 
> nodeDURecord.status == REMOVING. If the condition is met then 
> clusterDURecord.status must be changed to REMOVING too.
>  # Now the deployment unit can be removed from each target node and, after 
> it, remove corresponding status records.
>  # For each removal of nodeDURecord record from meta storage the system is 
> able to receive an event from meta storage and check that there are no any 
> nodeDURecord records for the given deployment unit. Now the system must 
> remove the clusterDURecord record for the deployment unit.
>  
> Note that If the deployment unit was removed then there are no any class 
> loaders associated with this deployment unit. Eventually the class loader 
> should be collected by GC and all classes must be unloaded from JVM. It is 
> the critical requirement in order to avoid memory leaks related to multiple 
> class loading/unloading.



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

Reply via email to