Search in sources :

Example 1 with MockNameResolver

use of com.yahoo.vespa.hosted.provision.testutils.MockNameResolver in project vespa by vespa-engine.

the class MetricsReporterTest method test_registered_metric.

@Test
public void test_registered_metric() throws Exception {
    NodeFlavors nodeFlavors = FlavorConfigBuilder.createDummies("default");
    Curator curator = new MockCurator();
    NodeRepository nodeRepository = new NodeRepository(nodeFlavors, curator, Clock.systemUTC(), Zone.defaultZone(), new MockNameResolver().mockAnyLookup(), new DockerImage("docker-registry.domain.tld:8080/dist/vespa"), true);
    Node node = nodeRepository.createNode("openStackId", "hostname", Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), NodeType.tenant);
    nodeRepository.addNodes(Collections.singletonList(node));
    Node hostNode = nodeRepository.createNode("openStackId2", "parent", Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), NodeType.proxy);
    nodeRepository.addNodes(Collections.singletonList(hostNode));
    Map<String, Number> expectedMetrics = new HashMap<>();
    expectedMetrics.put("hostedVespa.provisionedHosts", 1L);
    expectedMetrics.put("hostedVespa.parkedHosts", 0L);
    expectedMetrics.put("hostedVespa.readyHosts", 0L);
    expectedMetrics.put("hostedVespa.reservedHosts", 0L);
    expectedMetrics.put("hostedVespa.activeHosts", 0L);
    expectedMetrics.put("hostedVespa.inactiveHosts", 0L);
    expectedMetrics.put("hostedVespa.dirtyHosts", 0L);
    expectedMetrics.put("hostedVespa.failedHosts", 0L);
    expectedMetrics.put("hostedVespa.docker.totalCapacityDisk", 0.0);
    expectedMetrics.put("hostedVespa.docker.totalCapacityMem", 0.0);
    expectedMetrics.put("hostedVespa.docker.totalCapacityCpu", 0.0);
    expectedMetrics.put("hostedVespa.docker.freeCapacityDisk", 0.0);
    expectedMetrics.put("hostedVespa.docker.freeCapacityMem", 0.0);
    expectedMetrics.put("hostedVespa.docker.freeCapacityCpu", 0.0);
    expectedMetrics.put("wantedRebootGeneration", 0L);
    expectedMetrics.put("currentRebootGeneration", 0L);
    expectedMetrics.put("wantToReboot", 0);
    expectedMetrics.put("wantToRetire", 0);
    expectedMetrics.put("wantToDeprovision", 0);
    expectedMetrics.put("hardwareFailure", 0);
    expectedMetrics.put("hardwareDivergence", 0);
    expectedMetrics.put("allowedToBeDown", 0);
    expectedMetrics.put("numberOfServices", 0L);
    Orchestrator orchestrator = mock(Orchestrator.class);
    ServiceMonitor serviceMonitor = mock(ServiceMonitor.class);
    when(orchestrator.getNodeStatus(any())).thenReturn(HostStatus.NO_REMARKS);
    ServiceModel serviceModel = mock(ServiceModel.class);
    when(serviceMonitor.getServiceModelSnapshot()).thenReturn(serviceModel);
    when(serviceModel.getServiceInstancesByHostName()).thenReturn(Collections.emptyMap());
    TestMetric metric = new TestMetric();
    MetricsReporter metricsReporter = new MetricsReporter(nodeRepository, metric, orchestrator, serviceMonitor, Duration.ofMinutes(1), new JobControl(nodeRepository.database()));
    metricsReporter.maintain();
    assertEquals(expectedMetrics, metric.values);
}
Also used : MockNameResolver(com.yahoo.vespa.hosted.provision.testutils.MockNameResolver) HashMap(java.util.HashMap) Node(com.yahoo.vespa.hosted.provision.Node) JobControl(com.yahoo.vespa.hosted.provision.maintenance.JobControl) Curator(com.yahoo.vespa.curator.Curator) MockCurator(com.yahoo.vespa.curator.mock.MockCurator) Orchestrator(com.yahoo.vespa.orchestrator.Orchestrator) ServiceMonitor(com.yahoo.vespa.service.monitor.ServiceMonitor) NodeFlavors(com.yahoo.config.provision.NodeFlavors) ServiceModel(com.yahoo.vespa.service.monitor.ServiceModel) MetricsReporter(com.yahoo.vespa.hosted.provision.maintenance.MetricsReporter) NodeRepository(com.yahoo.vespa.hosted.provision.NodeRepository) DockerImage(com.yahoo.config.provision.DockerImage) MockCurator(com.yahoo.vespa.curator.mock.MockCurator) Test(org.junit.Test)

Example 2 with MockNameResolver

use of com.yahoo.vespa.hosted.provision.testutils.MockNameResolver in project vespa by vespa-engine.

the class AclProvisioningTest method before.

@Before
public void before() {
    this.curator = new MockCurator();
    this.nameResolver = new MockNameResolver().mockAnyLookup();
    this.tester = new ProvisioningTester(Zone.defaultZone(), createConfig(), curator, nameResolver);
}
Also used : MockNameResolver(com.yahoo.vespa.hosted.provision.testutils.MockNameResolver) MockCurator(com.yahoo.vespa.curator.mock.MockCurator) Before(org.junit.Before)

Example 3 with MockNameResolver

use of com.yahoo.vespa.hosted.provision.testutils.MockNameResolver in project vespa by vespa-engine.

the class ProvisioningTest method application_deployment_retires_nodes_having_retired_flavor.

@Test
public void application_deployment_retires_nodes_having_retired_flavor() {
    String flavorToRetire = "default";
    String replacementFlavor = "new-default";
    ApplicationId application = ApplicationId.from(TenantName.from(UUID.randomUUID().toString()), ApplicationName.from(UUID.randomUUID().toString()), InstanceName.from(UUID.randomUUID().toString()));
    Curator curator = new MockCurator();
    NameResolver nameResolver = new MockNameResolver().mockAnyLookup();
    // Deploy with flavor that will eventually be retired
    {
        FlavorConfigBuilder b = new FlavorConfigBuilder();
        b.addFlavor("default", 1., 1., 10, Flavor.Type.BARE_METAL).cost(2);
        ProvisioningTester tester = new ProvisioningTester(new Zone(Environment.prod, RegionName.from("us-east")), b.build(), curator, nameResolver);
        tester.makeReadyNodes(4, flavorToRetire);
        SystemState state = prepare(application, 2, 0, 2, 0, flavorToRetire, tester);
        tester.activate(application, state.allHosts);
    }
    // Re-deploy with same flavor, which is now retired
    {
        // Retire "default" flavor and add "new-default" as replacement
        FlavorConfigBuilder b = new FlavorConfigBuilder();
        b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Type.BARE_METAL).cost(2).retired(true);
        FlavorsConfig.Flavor.Builder newDefault = b.addFlavor(replacementFlavor, 2., 2., 20, Flavor.Type.BARE_METAL).cost(2);
        b.addReplaces(flavorToRetire, newDefault);
        ProvisioningTester tester = new ProvisioningTester(new Zone(Environment.prod, RegionName.from("us-east")), b.build(), curator, nameResolver);
        // Add nodes with "new-default" flavor
        tester.makeReadyNodes(4, replacementFlavor);
        SystemState state = prepare(application, 2, 0, 2, 0, flavorToRetire, tester);
        tester.activate(application, state.allHosts);
        // Nodes with retired flavor are retired
        NodeList retired = tester.getNodes(application).retired();
        assertEquals(4, retired.size());
        assertTrue("Nodes are retired by system", retired.asList().stream().allMatch(retiredBy(Agent.system)));
    }
}
Also used : MockNameResolver(com.yahoo.vespa.hosted.provision.testutils.MockNameResolver) Zone(com.yahoo.config.provision.Zone) NodeList(com.yahoo.vespa.hosted.provision.NodeList) Curator(com.yahoo.vespa.curator.Curator) MockCurator(com.yahoo.vespa.curator.mock.MockCurator) ApplicationId(com.yahoo.config.provision.ApplicationId) FlavorsConfig(com.yahoo.config.provisioning.FlavorsConfig) NameResolver(com.yahoo.vespa.hosted.provision.persistence.NameResolver) MockNameResolver(com.yahoo.vespa.hosted.provision.testutils.MockNameResolver) MockCurator(com.yahoo.vespa.curator.mock.MockCurator) Test(org.junit.Test)

Example 4 with MockNameResolver

use of com.yahoo.vespa.hosted.provision.testutils.MockNameResolver in project vespa by vespa-engine.

the class ProvisioningTester method makeProvisionedNodes.

List<Node> makeProvisionedNodes(int n, String flavor, NodeType type, int additionalIps) {
    List<Node> nodes = new ArrayList<>(n);
    for (int i = 0; i < n; i++) {
        nextHost++;
        nextIP++;
        // One test involves two provision testers - to detect this we check if the
        // name resolver already contains the next host - if this is the case - bump the indices and move on
        String testIp = String.format("127.0.0.%d", nextIP);
        MockNameResolver nameResolver = (MockNameResolver) nodeRepository().nameResolver();
        if (nameResolver.getHostname(testIp).isPresent()) {
            nextHost += 100;
            nextIP += 100;
        }
        String hostname = String.format("host-%d.yahoo.com", nextHost);
        String ipv4 = String.format("127.0.0.%d", nextIP);
        String ipv6 = String.format("::%d", nextIP);
        nameResolver.addRecord(hostname, ipv4, ipv6);
        HashSet<String> hostIps = new HashSet<>();
        hostIps.add(ipv4);
        hostIps.add(ipv6);
        Set<String> addips = new HashSet<>();
        for (int ipSeq = 1; ipSeq < additionalIps; ipSeq++) {
            nextIP++;
            String ipv6node = String.format("::%d", nextIP);
            addips.add(ipv6node);
            nameResolver.addRecord(String.format("node-%d-of-%s", ipSeq, hostname), ipv6node);
        }
        nodes.add(nodeRepository.createNode(hostname, hostname, hostIps, addips, Optional.empty(), nodeFlavors.getFlavorOrThrow(flavor), type));
    }
    nodes = nodeRepository.addNodes(nodes);
    return nodes;
}
Also used : MockNameResolver(com.yahoo.vespa.hosted.provision.testutils.MockNameResolver) Node(com.yahoo.vespa.hosted.provision.Node) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet)

Example 5 with MockNameResolver

use of com.yahoo.vespa.hosted.provision.testutils.MockNameResolver in project vespa by vespa-engine.

the class ReservationExpirerTest method ensure_reservation_times_out.

@Test
public void ensure_reservation_times_out() {
    ManualClock clock = new ManualClock();
    NodeFlavors flavors = FlavorConfigBuilder.createDummies("default");
    NodeRepository nodeRepository = new NodeRepository(flavors, curator, clock, Zone.defaultZone(), new MockNameResolver().mockAnyLookup(), new DockerImage("docker-registry.domain.tld:8080/dist/vespa"), true);
    NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(nodeRepository, flavors, Zone.defaultZone());
    List<Node> nodes = new ArrayList<>(2);
    nodes.add(nodeRepository.createNode(UUID.randomUUID().toString(), UUID.randomUUID().toString(), Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant));
    nodes.add(nodeRepository.createNode(UUID.randomUUID().toString(), UUID.randomUUID().toString(), Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant));
    nodes.add(nodeRepository.createNode(UUID.randomUUID().toString(), UUID.randomUUID().toString(), Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.host));
    nodes = nodeRepository.addNodes(nodes);
    nodes = nodeRepository.setDirty(nodes, Agent.system, getClass().getSimpleName());
    // Reserve 2 nodes
    assertEquals(2, nodeRepository.getNodes(NodeType.tenant, Node.State.dirty).size());
    nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName());
    ApplicationId applicationId = new ApplicationId.Builder().tenant("foo").applicationName("bar").instanceName("fuz").build();
    ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test"), Version.fromString("6.42"), false);
    provisioner.prepare(applicationId, cluster, Capacity.fromNodeCount(2), 1, null);
    assertEquals(2, nodeRepository.getNodes(NodeType.tenant, Node.State.reserved).size());
    // Reservation times out
    // Reserved but not used time out
    clock.advance(Duration.ofMinutes(14));
    new ReservationExpirer(nodeRepository, clock, Duration.ofMinutes(10), new JobControl(nodeRepository.database())).run();
    // Assert nothing is reserved
    assertEquals(0, nodeRepository.getNodes(NodeType.tenant, Node.State.reserved).size());
    List<Node> dirty = nodeRepository.getNodes(NodeType.tenant, Node.State.dirty);
    assertEquals(2, dirty.size());
    assertFalse(dirty.get(0).allocation().isPresent());
    assertFalse(dirty.get(1).allocation().isPresent());
}
Also used : MockNameResolver(com.yahoo.vespa.hosted.provision.testutils.MockNameResolver) Node(com.yahoo.vespa.hosted.provision.Node) FlavorConfigBuilder(com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder) NodeRepositoryProvisioner(com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner) ArrayList(java.util.ArrayList) ClusterSpec(com.yahoo.config.provision.ClusterSpec) ManualClock(com.yahoo.test.ManualClock) NodeFlavors(com.yahoo.config.provision.NodeFlavors) NodeRepository(com.yahoo.vespa.hosted.provision.NodeRepository) DockerImage(com.yahoo.config.provision.DockerImage) ApplicationId(com.yahoo.config.provision.ApplicationId) Test(org.junit.Test)

Aggregations

MockNameResolver (com.yahoo.vespa.hosted.provision.testutils.MockNameResolver)8 MockCurator (com.yahoo.vespa.curator.mock.MockCurator)6 DockerImage (com.yahoo.config.provision.DockerImage)5 Curator (com.yahoo.vespa.curator.Curator)5 NodeRepository (com.yahoo.vespa.hosted.provision.NodeRepository)5 Test (org.junit.Test)5 Node (com.yahoo.vespa.hosted.provision.Node)4 NodeFlavors (com.yahoo.config.provision.NodeFlavors)3 Zone (com.yahoo.config.provision.Zone)3 ManualClock (com.yahoo.test.ManualClock)3 ApplicationId (com.yahoo.config.provision.ApplicationId)2 JobControl (com.yahoo.vespa.hosted.provision.maintenance.JobControl)2 MetricsReporter (com.yahoo.vespa.hosted.provision.maintenance.MetricsReporter)2 Orchestrator (com.yahoo.vespa.orchestrator.Orchestrator)2 ServiceModel (com.yahoo.vespa.service.monitor.ServiceModel)2 ServiceMonitor (com.yahoo.vespa.service.monitor.ServiceMonitor)2 ArrayList (java.util.ArrayList)2 HashSet (java.util.HashSet)2 Before (org.junit.Before)2 ClusterSpec (com.yahoo.config.provision.ClusterSpec)1