Igniters, I'd like to start a dedicated thread for discussion of the design of services hot redeployment. The previous service design discussion can be found in the following thread: [1]
Currently adding a new service or implementation change of an existing one requires restarting the hosting nodes. Service instances are deserialized using an application class loader, so the service class should be present on the classpath of the node. The only way to change the set of available classes is to restart the node. Potentially the whole cluster restart can be required. This is a major drawback in the current design. This problem should be addressed first. At the same time this problem can be resolved by relatively simple code changes. We need to change the way services are deserialized, and use a mechanism, that allows dynamic class changes. Deployment SPI [2] seems to be suitable for this. We can apply the same approach, which is used for tasks, so services will become dynamically modifiable. With this approach user will still need to perform a cancel-deploy routine for the changed service. But even with that the usability improvement will be huge. We'll think about service availability improvement after the first part is finished. Thoughts? [1] http://apache-ignite-developers.2346864.n4.nabble.com/Service-versioning-td20858.html [2] https://apacheignite.readme.io/docs/deployment-spi#deploymentspi Denis