Search in sources :

Example 6 with NestedTransaction

use of com.yahoo.transaction.NestedTransaction in project vespa by vespa-engine.

the class ProvisioningTest method application_deployment_constant_application_size.

@Test
public void application_deployment_constant_application_size() {
    ProvisioningTester tester = new ProvisioningTester(new Zone(Environment.prod, RegionName.from("us-east")));
    ApplicationId application1 = tester.makeApplicationId();
    ApplicationId application2 = tester.makeApplicationId();
    tester.makeReadyNodes(21, "default");
    // deploy
    SystemState state1 = prepare(application1, 2, 2, 3, 3, "default", tester);
    tester.activate(application1, state1.allHosts);
    // redeploy
    SystemState state2 = prepare(application1, 2, 2, 3, 3, "default", tester);
    state2.assertEquals(state1);
    tester.activate(application1, state2.allHosts);
    // deploy another application
    SystemState state1App2 = prepare(application2, 2, 2, 3, 3, "default", tester);
    assertFalse("Hosts to different apps are disjunct", state1App2.allHosts.removeAll(state1.allHosts));
    tester.activate(application2, state1App2.allHosts);
    // prepare twice
    SystemState state3 = prepare(application1, 2, 2, 3, 3, "default", tester);
    SystemState state4 = prepare(application1, 2, 2, 3, 3, "default", tester);
    state3.assertEquals(state2);
    state4.assertEquals(state3);
    tester.activate(application1, state4.allHosts);
    // remove nodes before deploying
    SystemState state5 = prepare(application1, 2, 2, 3, 3, "default", tester);
    HostSpec removed = tester.removeOne(state5.allHosts);
    tester.activate(application1, state5.allHosts);
    assertEquals(removed.hostname(), tester.nodeRepository().getNodes(application1, Node.State.inactive).get(0).hostname());
    // remove some of the clusters
    SystemState state6 = prepare(application1, 0, 2, 0, 3, "default", tester);
    tester.activate(application1, state6.allHosts);
    assertEquals(5, tester.getNodes(application1, Node.State.active).size());
    assertEquals(5, tester.getNodes(application1, Node.State.inactive).size());
    // delete app
    NestedTransaction removeTransaction = new NestedTransaction();
    tester.provisioner().remove(removeTransaction, application1);
    removeTransaction.commit();
    assertEquals(tester.toHostNames(state1.allHosts), tester.toHostNames(tester.nodeRepository().getNodes(application1, Node.State.inactive)));
    assertEquals(0, tester.getNodes(application1, Node.State.active).size());
    // other application is unaffected
    assertEquals(state1App2.hostNames(), tester.toHostNames(tester.nodeRepository().getNodes(application2, Node.State.active)));
    // fail a node from app2 and make sure it does not get inactive nodes from first
    HostSpec failed = tester.removeOne(state1App2.allHosts);
    tester.fail(failed);
    assertEquals(9, tester.getNodes(application2, Node.State.active).size());
    SystemState state2App2 = prepare(application2, 2, 2, 3, 3, "default", tester);
    assertFalse("Hosts to different apps are disjunct", state2App2.allHosts.removeAll(state1.allHosts));
    assertEquals("A new node was reserved to replace the failed one", 10, state2App2.allHosts.size());
    assertFalse("The new host is not the failed one", state2App2.allHosts.contains(failed));
    tester.activate(application2, state2App2.allHosts);
    // deploy first app again
    SystemState state7 = prepare(application1, 2, 2, 3, 3, "default", tester);
    state7.assertEquals(state1);
    tester.activate(application1, state7.allHosts);
    assertEquals(0, tester.getNodes(application1, Node.State.inactive).size());
    // restart
    HostFilter allFilter = HostFilter.all();
    HostFilter hostFilter = HostFilter.hostname(state6.allHosts.iterator().next().hostname());
    HostFilter clusterTypeFilter = HostFilter.clusterType(ClusterSpec.Type.container);
    HostFilter clusterIdFilter = HostFilter.clusterId(ClusterSpec.Id.from("container1"));
    tester.provisioner().restart(application1, allFilter);
    tester.provisioner().restart(application1, hostFilter);
    tester.provisioner().restart(application1, clusterTypeFilter);
    tester.provisioner().restart(application1, clusterIdFilter);
    tester.assertRestartCount(application1, allFilter, hostFilter, clusterTypeFilter, clusterIdFilter);
}
Also used : Zone(com.yahoo.config.provision.Zone) NestedTransaction(com.yahoo.transaction.NestedTransaction) HostFilter(com.yahoo.config.provision.HostFilter) ApplicationId(com.yahoo.config.provision.ApplicationId) HostSpec(com.yahoo.config.provision.HostSpec) Test(org.junit.Test)

Example 7 with NestedTransaction

use of com.yahoo.transaction.NestedTransaction in project vespa by vespa-engine.

the class NodeFailTester method activate.

private void activate(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity) {
    List<HostSpec> hosts = provisioner.prepare(applicationId, cluster, capacity, 1, null);
    NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(curator));
    provisioner.activate(transaction, applicationId, hosts);
    transaction.commit();
}
Also used : CuratorTransaction(com.yahoo.vespa.curator.transaction.CuratorTransaction) NestedTransaction(com.yahoo.transaction.NestedTransaction) HostSpec(com.yahoo.config.provision.HostSpec)

Example 8 with NestedTransaction

use of com.yahoo.transaction.NestedTransaction in project vespa by vespa-engine.

the class RetiredExpirerTest method activate.

private void activate(ApplicationId applicationId, ClusterSpec cluster, int nodes, int groups, NodeRepositoryProvisioner provisioner) {
    List<HostSpec> hosts = provisioner.prepare(applicationId, cluster, Capacity.fromNodeCount(nodes), groups, null);
    NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(curator));
    provisioner.activate(transaction, applicationId, hosts);
    transaction.commit();
}
Also used : CuratorTransaction(com.yahoo.vespa.curator.transaction.CuratorTransaction) NestedTransaction(com.yahoo.transaction.NestedTransaction) HostSpec(com.yahoo.config.provision.HostSpec)

Example 9 with NestedTransaction

use of com.yahoo.transaction.NestedTransaction in project vespa by vespa-engine.

the class ProvisioningTester method deactivate.

public void deactivate(ApplicationId applicationId) {
    NestedTransaction deactivateTransaction = new NestedTransaction();
    nodeRepository.deactivate(applicationId, deactivateTransaction);
    deactivateTransaction.commit();
}
Also used : NestedTransaction(com.yahoo.transaction.NestedTransaction)

Example 10 with NestedTransaction

use of com.yahoo.transaction.NestedTransaction in project vespa by vespa-engine.

the class MockNodeRepository method activate.

private void activate(List<HostSpec> hosts, ApplicationId application, NodeRepositoryProvisioner provisioner) {
    NestedTransaction transaction = new NestedTransaction();
    provisioner.activate(transaction, application, hosts);
    transaction.commit();
}
Also used : NestedTransaction(com.yahoo.transaction.NestedTransaction)

Aggregations

NestedTransaction (com.yahoo.transaction.NestedTransaction)18 CuratorTransaction (com.yahoo.vespa.curator.transaction.CuratorTransaction)9 Node (com.yahoo.vespa.hosted.provision.Node)5 HostSpec (com.yahoo.config.provision.HostSpec)4 Test (org.junit.Test)4 ApplicationId (com.yahoo.config.provision.ApplicationId)3 Zone (com.yahoo.config.provision.Zone)3 ClusterMembership (com.yahoo.config.provision.ClusterMembership)1 ClusterSpec (com.yahoo.config.provision.ClusterSpec)1 HostFilter (com.yahoo.config.provision.HostFilter)1 Path (com.yahoo.path.Path)1 ActivationConflictException (com.yahoo.vespa.config.server.ActivationConflictException)1 TimeoutBudget (com.yahoo.vespa.config.server.TimeoutBudget)1 TenantApplications (com.yahoo.vespa.config.server.application.TenantApplications)1 InternalServerException (com.yahoo.vespa.config.server.http.InternalServerException)1 LocalSession (com.yahoo.vespa.config.server.session.LocalSession)1 LocalSessionRepo (com.yahoo.vespa.config.server.session.LocalSessionRepo)1 ActivateLock (com.yahoo.vespa.config.server.tenant.ActivateLock)1 Rotations (com.yahoo.vespa.config.server.tenant.Rotations)1 Tenant (com.yahoo.vespa.config.server.tenant.Tenant)1