Hi Denis, I agree, we should have an API for batch service deployment. My comments are inline...
On Mon, Aug 14, 2017 at 2:22 AM, Denis Mekhanikov <[email protected]> wrote: > Hi Igniters! > > Currently Ignite doesn't have support for batch service deployment, but it > may be a very useful feature in case of a big number of nodes in a cluster > and services to be deployed. Each deployment includes write into an > internal transactional cache, which is the longest part of the procedure. > > I propose to optimize it by performing multiple writes in a single > transaction. It implies an introduction of a few new methods in > IgniteServices interface. > I am thinking about the following signatures: > > void deployAll(Iterable<ServiceConfiguration> cfgs) throws > IgniteException; > IgniteFuture<Void> deployAllAsync(Iterable<ServiceConfiguration> > cfgs) throws IgniteException; > > I'd like to know your opinion on the following questions: > > - Do you agree with the proposed signatures? > Yes, but Iterable should be changed to Collection to be consistent with other similar APIs in Ignite. > - What should happen in case of a failure (some of the configurations > don't pass validation, or a service with specified name but different > configuration already exists)? Should partial deployments be performed > in > case when some of them fail? > Yes, we should allow partial deployment. The exception thrown should have a collection of services that have failed deployment. It looks like you will need to create ServiceDeploymentException (extends IgniteException) to handle this case (in which case, you have to make sure that other deploy methods also throw it). > > Regarding the second question I think that we shouldn't deploy any services > in a batch if we encounter any problems with some of them. > > Also cancelAll method may be optimized in a similar way, but no interface > changes are needed there. > > Ticket: https://issues.apache.org/jira/browse/IGNITE-5145 > > -- > Cheers, > Denis Mekhanikov >
