Open guusdk opened 4 years ago
One possible explanation is that the plugin does not get fully unloaded, when being stopped/removed/updated. If some kind of resource doesn't get properly released, a reference to old classes might linger, causing these kind of exceptions.
This can be tested for by performing a heap dump of an Openfire instance where the monitoring plugin was loaded, and then unloaded. All references should be gone.
I'm thinking that receiving tasks from other cluster nodes is what's preventing the classloader from being garbage collected. I've written up the details in https://stackoverflow.com/questions/63794387/can-tasks-sent-over-a-hazelcast-cluster-prevent-unloading-of-classes
A workaround for this issue: restart the senior cluster node after deploying a new instance of the monitoring plugin on it.
When running on a cluster, and the plugin gets reloaded on one of the nodes, exceptions like these get (eventually) logged: