[ 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)