Most of the replication functionality has been added as services named MasterFactory and SlaveFactory (implemenentations called Master and SlaveController). These are booted from RawStore when replication is started, by using Monitor.bootServiceModule. So far, so good.

When replication is stopped, however, there does not seem to be any way to remove these services from the monitor without shutting down the entire database. If I understand this correctly, there will be a reference in Monitor to this service for the entire lifetime of the database. That would also mean that the object cannot be gc'ed, which looks like a (small) memory leak to me. In addition, this would prevent us from creating a new module object of the same type since bootServiceModule would return the reference to the old one.

I have tried Monitor.getMonitor().shutdown(slaveFactory_reference), but this method shuts down the entire database. An alternative is to call stop() on the module, which would stop it from doing anything but not remove it's reference in the Monitor. What I'm looking for is basically this (from Monitor class javadoc):

"Optionally - an individual module within a service may be shutdown, this will in turn shutdown any modules it started if those module are not in use by other modules within the service. This would be handled by the monitor, not the module itself."

Am I missing something, or is this functionality not implemented?

--
Jørgen Løland

Reply via email to