Denis, I've just prepared PR [1] with a possible implementation that covers p.1 from your list.
Please, have a look at it. Pay attention to the test, it demonstrates manual services hot-redeployment via DeploymentSpi. Is that what you mean? [1] https://github.com/apache/ignite/pull/6060 On Tue, Feb 5, 2019 at 2:14 PM Denis Mekhanikov <dmekhani...@gmail.com> wrote: > > In general, I think, we should work on the improvements in the following > order: > > 1. Cluster availability, when services are being updated. Should be solved > by usage of the DeploymentSpi > 2. Service availability, when they are being updated. This one will > probably require introduction of new API methods like > redeploy(ServiceConfiguration). > 3. Service versioning and packaging. > > I'd like to focus on the first point. Service grid will become much more > usable and mature once we implement it. > > Denis > > вт, 5 февр. 2019 г. в 14:06, Denis Mekhanikov <dmekhani...@gmail.com>: > > > Vyacheslav, > > > > I think, we can use IgniteConfiguration#deploymentSpi for tasks and > > services. > > Or we can add an analogous property. > > > > Nik, > > > > > 1. Is it possible to change the list of deployed resources in runtime > > via built-in DeploymentSPI implementations? > > > Can I add or remove jar to(from) class-path without node(cluster) > > restart? > > Yes, this is the reason why the DeploymentSpi exists. But currently only > > compute grid can use it. > > > > > 2. Can we update service dependencies via DeploymentSPI? commons-lang, > > log4j or any other common library? > > Ideally such libraries should be loaded via app class loader at node > > startup. Otherwise the same libraries will be loaded multiple times. It > > will lead to a lot of memory leaks. > > I think, we can support loading of dependencies, but discourage users from > > doing it. The proper way should be described in the documentation, and > > warnings could be generated, if too many classes get loaded via > > DeploymentSpi. > > > > > 3. User has to execute explicit Ignite API calls(undeploy(), deploy()) > > to renew service implementation. Is it correct? > > > I think we should develop some watcher, that will be watch for a > > resource change and redeploy services automatically. > > Correct. I don't like the idea to redeploy services automatically. I > > think, redeployment should be triggered explicitly. Non-obvious actions > > should be avoided. > > > > 4. Such feature would for sure improve usability of the service grid. But > > it requires much more time and work to implement. > > I think, it's better not to expand the scope too much. Otherwise > > development will take another 6 moths. > > This is a great idea, and we will keep it in mind though. > > > > 5. Yep, we need an extensive documentation on the service deployment > > procedure. > > This feature may not be perfectly clear to users, so we need some how-tos. > > > > Denis > > > > вт, 5 февр. 2019 г. в 08:19, Nikolay Izhikov <nizhi...@apache.org>: > > > >> Hello, Denis. > >> > >> Thank you for this discussion. > >> I have a few notes: > >> > >> 1. Is it possible to change the list of deployed resources in runtime via > >> built-in DeploymentSPI implementations? > >> Can I add or remove jar to(from) class-path without node(cluster) restart? > >> > >> 2. Can we update service dependencies via DeploymentSPI? commons-lang, > >> log4j or any other common library? > >> > >> 3. User has to execute explicit Ignite API calls(undeploy(), deploy()) to > >> renew service implementation. Is it correct? > >> I think we should develop some watcher, that will be watch for a resource > >> change and redeploy services automatically. > >> > >> 4. DeploymentSPI is *node-wide* configuration. This means we change > >> classpath for all services with this SPI. > >> I think this is a huge limitation of the SPI. > >> We should provide an ability to configure service-wide classpath to our > >> users as quickly as possible. > >> It is a common feature in modern service, task executor engines. > >> > >> I think the perfect world scenario would be following: > >> > >> 1. Start a client node or connect to a cluster with thin client. > >> > >> 2. Configure service classpath with some new Ignite API. > >> The only requirement for classes - they should be available > >> locally(on client node or thin client host). > >> > >> 3. User deploy the service with some Ignite API. > >> > >> 4. After depoyment completes successfully client node can be > >> stopped. > >> All required resource to run a service should be safely stored in > >> cluster and deployed to any new node. > >> > >> 5. I think we should develop examples for a DeploymentSPI usage. > >> As far as I can see, there is no such examples in our codebase for now. > >> Is it correct? If so, I will create a ticket to create such examples. > >> > >> В Вт, 05/02/2019 в 01:08 +0300, Vyacheslav Daradur пишет: > >> > Denis, thank you for driving of Service Grid's development! > >> > > >> > Sounds like a good plan. Does it mean that a user will have to > >> > register a classloader for service's class explicitly in case of using > >> > the feature? > >> > > >> > On Mon, Feb 4, 2019 at 4:38 PM Denis Mekhanikov <dmekhani...@gmail.com> > >> wrote: > >> > > > >> > > 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 > >> > > >> > > >> > > >> > -- > >> > Best Regards, Vyacheslav D. > >> > > -- Best Regards, Vyacheslav D.