Search in sources :

Example 76 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class StackUtilTest method collectAndCheckReachableNodes.

@Test
void collectAndCheckReachableNodes() throws NodesUnreachableException {
    Stack stack = createStack();
    ArrayList<String> necessaryNodes = new ArrayList<>();
    necessaryNodes.add("node1.example.com");
    necessaryNodes.add("node3.example.com");
    Set<Node> nodes = new HashSet<>();
    nodes.add(new Node("1.1.1.1", "1.1.1.1", "1", "m5.xlarge", "node1.example.com", "worker"));
    nodes.add(new Node("1.1.1.3", "1.1.1.3", "3", "m5.xlarge", "node3.example.com", "worker"));
    when(hostOrchestrator.getResponsiveNodes(nodesCaptor.capture(), any())).thenReturn(new NodeReachabilityResult(nodes, Set.of()));
    stackUtil.collectAndCheckReachableNodes(stack, necessaryNodes);
    verify(hostOrchestrator).getResponsiveNodes(nodesCaptor.capture(), any());
    List<String> fqdns = nodesCaptor.getValue().stream().map(Node::getHostname).collect(Collectors.toList());
    assertTrue(fqdns.contains("node1.example.com"));
    assertFalse("Terminated node should be filtered out", fqdns.contains("node2.example.com"));
    assertTrue(fqdns.contains("node3.example.com"));
}
Also used : Node(com.sequenceiq.cloudbreak.common.orchestration.Node) ArrayList(java.util.ArrayList) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) NodeReachabilityResult(com.sequenceiq.cloudbreak.orchestrator.model.NodeReachabilityResult) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) HashSet(java.util.HashSet) Test(org.junit.jupiter.api.Test)

Example 77 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class OrchestratorRecipeExecutor method collectNodes.

private Set<Node> collectNodes(Stack stack, Set<String> hostNames) {
    Set<Node> agents = new HashSet<>();
    for (InstanceGroup instanceGroup : stack.getInstanceGroups()) {
        for (InstanceMetaData im : instanceGroup.getNotDeletedAndNotZombieInstanceMetaDataSet()) {
            if (hostNames.contains(im.getDiscoveryFQDN())) {
                String instanceId = im.getInstanceId();
                String instanceType = instanceGroup.getTemplate().getInstanceType();
                agents.add(new Node(im.getPrivateIp(), im.getPublicIp(), instanceId, instanceType, im.getDiscoveryFQDN(), im.getInstanceGroupName()));
            }
        }
    }
    return agents;
}
Also used : InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) HashSet(java.util.HashSet) InstanceGroup(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceGroup)

Example 78 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class ClusterService method updateInstancesToZombie.

public void updateInstancesToZombie(Long stackId, Set<Node> unreachableNodes) {
    Set<String> unreachableInstanceIds = unreachableNodes.stream().map(Node::getInstanceId).collect(Collectors.toSet());
    LOGGER.debug("Update instance statuses to ZOMBIE, instanceIds: {}", unreachableInstanceIds);
    try {
        transactionService.required(() -> {
            Set<InstanceMetaData> notDeletedInstanceMetadatas = instanceMetaDataService.getNotDeletedAndNotZombieInstanceMetadataByStackId(stackId);
            notDeletedInstanceMetadatas.stream().filter(instanceMetadata -> unreachableInstanceIds.contains(instanceMetadata.getInstanceId())).forEach(instanceMetadata -> {
                instanceMetadata.setInstanceStatus(ZOMBIE);
                instanceMetaDataService.save(instanceMetadata);
            });
        });
    } catch (TransactionExecutionException e) {
        throw new TransactionRuntimeExecutionException(e);
    }
}
Also used : InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) CLUSTER_HOST_STATUS_UPDATED(com.sequenceiq.cloudbreak.event.ResourceEvent.CLUSTER_HOST_STATUS_UPDATED) CloudbreakException(com.sequenceiq.cloudbreak.service.CloudbreakException) Arrays(java.util.Arrays) SERVICES_RUNNING(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.SERVICES_RUNNING) DetailedStackStatus(com.sequenceiq.cloudbreak.api.endpoint.v4.common.DetailedStackStatus) AltusMachineUserService(com.sequenceiq.cloudbreak.service.altus.AltusMachineUserService) AVAILABLE(com.sequenceiq.cloudbreak.api.endpoint.v4.common.Status.AVAILABLE) Date(java.util.Date) ExtendedHostStatuses(com.sequenceiq.cloudbreak.cluster.status.ExtendedHostStatuses) SERVICES_UNHEALTHY(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.SERVICES_UNHEALTHY) LoggerFactory(org.slf4j.LoggerFactory) ClusterRepository(com.sequenceiq.cloudbreak.repository.cluster.ClusterRepository) ComponentConfigProviderService(com.sequenceiq.cloudbreak.service.ComponentConfigProviderService) TransactionRuntimeExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionRuntimeExecutionException) ClusterApi(com.sequenceiq.cloudbreak.cluster.api.ClusterApi) TransactionService(com.sequenceiq.cloudbreak.common.service.TransactionService) CloudbreakEventService(com.sequenceiq.cloudbreak.structuredevent.event.CloudbreakEventService) DataIntegrityViolationException(org.springframework.dao.DataIntegrityViolationException) RdsConfigService(com.sequenceiq.cloudbreak.service.rdsconfig.RdsConfigService) Map(java.util.Map) Gateway(com.sequenceiq.cloudbreak.domain.stack.cluster.gateway.Gateway) StackUpdater(com.sequenceiq.cloudbreak.service.StackUpdater) SqlUtil.getProperSqlErrorMessage(com.sequenceiq.cloudbreak.util.SqlUtil.getProperSqlErrorMessage) Blueprint(com.sequenceiq.cloudbreak.domain.Blueprint) Telemetry(com.sequenceiq.common.api.telemetry.model.Telemetry) NotFoundException(com.sequenceiq.cloudbreak.common.exception.NotFoundException) SERVICES_HEALTHY(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.SERVICES_HEALTHY) FileSystemConfigService(com.sequenceiq.cloudbreak.service.filesystem.FileSystemConfigService) Collection(java.util.Collection) InstanceStatus(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus) Set(java.util.Set) Status(com.sequenceiq.cloudbreak.api.endpoint.v4.common.Status) HttpClientConfig(com.sequenceiq.cloudbreak.client.HttpClientConfig) REPO_ID_TAG(com.sequenceiq.cloudbreak.cloud.model.component.StackRepoDetails.REPO_ID_TAG) Collectors(java.util.stream.Collectors) List(java.util.List) TransactionExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionExecutionException) Optional(java.util.Optional) StackService(com.sequenceiq.cloudbreak.service.stack.StackService) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) Cluster(com.sequenceiq.cloudbreak.domain.stack.cluster.Cluster) ResourceStatus(com.sequenceiq.cloudbreak.api.endpoint.v4.common.ResourceStatus) VALID(com.sequenceiq.common.api.type.CertExpirationState.VALID) ZOMBIE(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.ZOMBIE) HashSet(java.util.HashSet) Inject(javax.inject.Inject) StackRepoDetails(com.sequenceiq.cloudbreak.cloud.model.component.StackRepoDetails) GatewayService(com.sequenceiq.cloudbreak.service.gateway.GatewayService) Service(org.springframework.stereotype.Service) InstanceMetaDataService(com.sequenceiq.cloudbreak.service.stack.InstanceMetaDataService) ClusterComponentConfigProvider(com.sequenceiq.cloudbreak.cluster.service.ClusterComponentConfigProvider) RDSConfig(com.sequenceiq.cloudbreak.domain.RDSConfig) NotFoundException.notFound(com.sequenceiq.cloudbreak.common.exception.NotFoundException.notFound) BadRequestException(com.sequenceiq.cloudbreak.common.exception.BadRequestException) Logger(org.slf4j.Logger) RuntimeVersionService(com.sequenceiq.cloudbreak.service.stack.RuntimeVersionService) DatabaseType(com.sequenceiq.cloudbreak.api.endpoint.v4.database.base.DatabaseType) Benchmark.measure(com.sequenceiq.cloudbreak.util.Benchmark.measure) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) CustomConfigurations(com.sequenceiq.cloudbreak.domain.CustomConfigurations) Workspace(com.sequenceiq.cloudbreak.workspace.model.Workspace) ClusterComponent(com.sequenceiq.cloudbreak.domain.stack.cluster.ClusterComponent) HostName.hostName(com.sequenceiq.cloudbreak.cloud.model.HostName.hostName) APIResourceType(com.sequenceiq.cloudbreak.common.type.APIResourceType) HostGroup(com.sequenceiq.cloudbreak.domain.stack.cluster.host.HostGroup) InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) HostName(com.sequenceiq.cloudbreak.cloud.model.HostName) CloudbreakServiceException(com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException) HOST_CERT_EXPIRING(com.sequenceiq.common.api.type.CertExpirationState.HOST_CERT_EXPIRING) StringUtils(org.springframework.util.StringUtils) TransactionExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionExecutionException) TransactionRuntimeExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionRuntimeExecutionException)

Example 79 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class SaltCheckerConclusionStepTest method checkShouldFallbackForOldImageVersionsAndBeSuccessfulIfNoUnreachableNodeFound.

@Test
public void checkShouldFallbackForOldImageVersionsAndBeSuccessfulIfNoUnreachableNodeFound() throws NodesUnreachableException {
    RPCResponse<SaltHealthReport> response = new RPCResponse<>();
    RPCMessage message = new RPCMessage();
    message.setMessage("rpc response");
    response.setMessages(List.of(message));
    when(nodeStatusService.saltPing(eq(1L))).thenReturn(response);
    when(stackService.getByIdWithListsInTransaction(eq(1L))).thenReturn(new Stack());
    Set<Node> nodes = Set.of(createNode("host1"), createNode("host2"));
    when(stackUtil.collectNodes(any())).thenReturn(nodes);
    when(stackUtil.collectAndCheckReachableNodes(any(), anyCollection())).thenReturn(nodes);
    Conclusion stepResult = underTest.check(1L);
    assertFalse(stepResult.isFailureFound());
    assertNull(stepResult.getConclusion());
    assertNull(stepResult.getDetails());
    assertEquals(SaltCheckerConclusionStep.class, stepResult.getConclusionStepClass());
    verify(nodeStatusService, times(1)).saltPing(eq(1L));
    verify(stackService, times(1)).getByIdWithListsInTransaction(eq(1L));
    verify(stackUtil, times(1)).collectNodes(any());
    verify(stackUtil, times(1)).collectAndCheckReachableNodes(any(), any());
}
Also used : SaltHealthReport(com.cloudera.thunderhead.telemetry.nodestatus.NodeStatusProto.SaltHealthReport) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) RPCResponse(com.sequenceiq.cloudbreak.client.RPCResponse) RPCMessage(com.sequenceiq.cloudbreak.client.RPCMessage) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) Test(org.junit.jupiter.api.Test)

Example 80 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class RdsRecoverySetupServiceTest method testRunRecoverState.

@Test
public void testRunRecoverState() throws CloudbreakOrchestratorFailedException {
    ReflectionTestUtils.setField(postgresConfigService, "databasesReusedDuringRecovery", List.of("HIVE"));
    Stack stack = TestUtil.stack(TestUtil.cluster());
    Long stackId = stack.getId();
    Node node1 = new Node("", "", "", "", "node1fqdn", "");
    Node node2 = new Node("", "", "", "", "node2fqdn", "");
    when(gatewayConfigService.getGatewayConfig(any(Stack.class), any(InstanceMetaData.class), anyBoolean())).thenReturn(gatewayConfig);
    when(stackService.getByIdWithListsInTransaction(stackId)).thenReturn(stack);
    when(stackUtil.collectReachableNodes(stack)).thenReturn(Set.of(node1, node2));
    ArgumentCaptor<OrchestratorGrainRunnerParams> grainRunnerParamsArgumentCaptor = ArgumentCaptor.forClass(OrchestratorGrainRunnerParams.class);
    underTest.addRecoverRole(stackId);
    verify(hostOrchestrator).runOrchestratorGrainRunner(grainRunnerParamsArgumentCaptor.capture());
    OrchestratorGrainRunnerParams grainRunnerParams = grainRunnerParamsArgumentCaptor.getValue();
    assertEquals(Set.of("test-is1-1-1"), grainRunnerParams.getTargetHostNames());
    assertEquals(Set.of(node1, node2), grainRunnerParams.getAllNodes());
    assertEquals(gatewayConfig, grainRunnerParams.getPrimaryGatewayConfig());
    assertEquals("roles", grainRunnerParams.getKey());
    assertEquals("recover", grainRunnerParams.getValue());
}
Also used : InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) OrchestratorGrainRunnerParams(com.sequenceiq.cloudbreak.orchestrator.host.OrchestratorGrainRunnerParams) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) Test(org.junit.jupiter.api.Test)

Aggregations

Node (com.sequenceiq.cloudbreak.common.orchestration.Node)126 GatewayConfig (com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)57 HashSet (java.util.HashSet)42 Map (java.util.Map)32 JsonNode (com.fasterxml.jackson.databind.JsonNode)30 CloudbreakOrchestratorFailedException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException)29 Test (org.junit.Test)29 HashMap (java.util.HashMap)28 Stack (com.sequenceiq.cloudbreak.domain.stack.Stack)27 CloudbreakOrchestratorException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException)26 ArrayList (java.util.ArrayList)26 InstanceMetaData (com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData)25 ExitCriteriaModel (com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel)25 Set (java.util.Set)25 Test (org.junit.jupiter.api.Test)25 List (java.util.List)22 CloudbreakServiceException (com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException)21 IOException (java.io.IOException)21 Collectors (java.util.stream.Collectors)21 BootstrapParams (com.sequenceiq.cloudbreak.orchestrator.model.BootstrapParams)19