package com.sequenceiq.cloudbreak.reactor; import javax.inject.Inject; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.core.bootstrap.service.ClusterBootstrapper; import com.sequenceiq.cloudbreak.reactor.api.event.resource.BootstrapNewNodesRequest; import com.sequenceiq.cloudbreak.reactor.api.event.resource.BootstrapNewNodesResult; import reactor.bus.Event; import reactor.bus.EventBus; @Component public class BootstrapNewNodesHandler implements ClusterEventHandler<BootstrapNewNodesRequest> { @Inject private EventBus eventBus; @Inject private ClusterBootstrapper clusterBootstrapper; @Override public Class<BootstrapNewNodesRequest> type() { return BootstrapNewNodesRequest.class; } @Override public void accept(Event<BootstrapNewNodesRequest> event) { BootstrapNewNodesRequest request = event.getData(); BootstrapNewNodesResult result; try { clusterBootstrapper.bootstrapNewNodes(request.getStackId(), request.getUpscaleCandidateAddresses()); result = new BootstrapNewNodesResult(request); } catch (Exception e) { result = new BootstrapNewNodesResult(e.getMessage(), e, request); } eventBus.notify(result.selector(), new Event(event.getHeaders(), result)); } }