Search in sources :

Example 11 with Tenant

use of com.yahoo.vespa.config.server.tenant.Tenant in project vespa by vespa-engine.

the class ApplicationRepository method verifyTenantAndApplication.

public Tenant verifyTenantAndApplication(ApplicationId applicationId) {
    TenantName tenantName = applicationId.tenant();
    if (!tenants.checkThatTenantExists(tenantName)) {
        throw new IllegalArgumentException("Tenant " + tenantName + " was not found.");
    }
    Tenant tenant = tenants.getTenant(tenantName);
    List<ApplicationId> applicationIds = listApplicationIds(tenant);
    if (!applicationIds.contains(applicationId)) {
        throw new IllegalArgumentException("No such application id: " + applicationId);
    }
    return tenant;
}
Also used : Tenant(com.yahoo.vespa.config.server.tenant.Tenant) TenantName(com.yahoo.config.provision.TenantName) ApplicationId(com.yahoo.config.provision.ApplicationId)

Example 12 with Tenant

use of com.yahoo.vespa.config.server.tenant.Tenant in project vespa by vespa-engine.

the class ApplicationRepository method redeployAllApplications.

void redeployAllApplications() throws InterruptedException {
    ExecutorService executor = Executors.newFixedThreadPool(configserverConfig.numParallelTenantLoaders(), new DaemonThreadFactory("redeploy apps"));
    // Keep track of deployment per application
    Map<ApplicationId, Future<?>> futures = new HashMap<>();
    tenants.getAllTenants().forEach(tenant -> listApplicationIds(tenant).forEach(appId -> deployFromLocalActive(appId).ifPresent(deployment -> futures.put(appId, executor.submit(deployment::activate)))));
    for (Map.Entry<ApplicationId, Future<?>> f : futures.entrySet()) {
        try {
            f.getValue().get();
        } catch (ExecutionException e) {
            throw new RuntimeException("Redeploying of " + f.getKey() + " failed", e);
        }
    }
    executor.shutdown();
    // Timeout should never happen
    executor.awaitTermination(365, TimeUnit.DAYS);
}
Also used : ApplicationMetaData(com.yahoo.config.application.api.ApplicationMetaData) FileDistributionStatus(com.yahoo.vespa.config.server.application.FileDistributionStatus) RemoteSession(com.yahoo.vespa.config.server.session.RemoteSession) Inject(com.google.inject.Inject) Vtag(com.yahoo.component.Vtag) ApplicationFile(com.yahoo.config.application.api.ApplicationFile) ConfigserverConfig(com.yahoo.cloud.config.ConfigserverConfig) DeployLogger(com.yahoo.config.application.api.DeployLogger) TenantName(com.yahoo.config.provision.TenantName) LogServerLogGrabber(com.yahoo.vespa.config.server.application.LogServerLogGrabber) Future(java.util.concurrent.Future) Path(com.yahoo.path.Path) Rotations(com.yahoo.vespa.config.server.tenant.Rotations) Provisioner(com.yahoo.config.provision.Provisioner) Duration(java.time.Duration) Map(java.util.Map) LogLevel(com.yahoo.log.LogLevel) CompressedApplicationInputStream(com.yahoo.vespa.config.server.http.CompressedApplicationInputStream) URI(java.net.URI) Application(com.yahoo.vespa.config.server.application.Application) Instant(java.time.Instant) Logger(java.util.logging.Logger) Executors(java.util.concurrent.Executors) HostFilter(com.yahoo.config.provision.HostFilter) RestartActions(com.yahoo.vespa.config.server.configchange.RestartActions) List(java.util.List) HostProvisionerProvider(com.yahoo.vespa.config.server.provision.HostProvisionerProvider) Optional(java.util.Optional) DeployHandlerLogger(com.yahoo.vespa.config.server.deploy.DeployHandlerLogger) HttpResponse(com.yahoo.container.jdisc.HttpResponse) ConfigChangeActions(com.yahoo.vespa.config.server.configchange.ConfigChangeActions) Version(com.yahoo.component.Version) ApplicationId(com.yahoo.config.provision.ApplicationId) Slime(com.yahoo.slime.Slime) DaemonThreadFactory(com.yahoo.concurrent.DaemonThreadFactory) Tenant(com.yahoo.vespa.config.server.tenant.Tenant) HashMap(java.util.HashMap) IOUtils(com.yahoo.io.IOUtils) TenantApplications(com.yahoo.vespa.config.server.application.TenantApplications) ApplicationConvergenceChecker(com.yahoo.vespa.config.server.application.ApplicationConvergenceChecker) Level(java.util.logging.Level) RefeedActions(com.yahoo.vespa.config.server.configchange.RefeedActions) Files(com.google.common.io.Files) NestedTransaction(com.yahoo.transaction.NestedTransaction) PrepareParams(com.yahoo.vespa.config.server.session.PrepareParams) ExecutorService(java.util.concurrent.ExecutorService) HttpProxy(com.yahoo.vespa.config.server.application.HttpProxy) PrepareResult(com.yahoo.vespa.config.server.http.v2.PrepareResult) SilentDeployLogger(com.yahoo.vespa.config.server.session.SilentDeployLogger) LocalSessionRepo(com.yahoo.vespa.config.server.session.LocalSessionRepo) ApplicationSet(com.yahoo.vespa.config.server.application.ApplicationSet) Environment(com.yahoo.config.provision.Environment) IOException(java.io.IOException) Tenants(com.yahoo.vespa.config.server.tenant.Tenants) SessionFactory(com.yahoo.vespa.config.server.session.SessionFactory) File(java.io.File) Deployment(com.yahoo.vespa.config.server.deploy.Deployment) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) LocalSession(com.yahoo.vespa.config.server.session.LocalSession) SimpleHttpFetcher(com.yahoo.vespa.config.server.http.SimpleHttpFetcher) Clock(java.time.Clock) Session(com.yahoo.vespa.config.server.session.Session) InputStream(java.io.InputStream) HashMap(java.util.HashMap) DaemonThreadFactory(com.yahoo.concurrent.DaemonThreadFactory) ExecutorService(java.util.concurrent.ExecutorService) Future(java.util.concurrent.Future) ApplicationId(com.yahoo.config.provision.ApplicationId) ExecutionException(java.util.concurrent.ExecutionException) Map(java.util.Map) HashMap(java.util.HashMap)

Example 13 with Tenant

use of com.yahoo.vespa.config.server.tenant.Tenant in project vespa by vespa-engine.

the class ApplicationApiHandler method handlePUT.

@Override
protected HttpResponse handlePUT(HttpRequest request) {
    Tenant tenant = getExistingTenant(request);
    TenantName tenantName = tenant.getName();
    long sessionId = getSessionIdV2(request);
    PrepareParams prepareParams = PrepareParams.fromHttpRequest(request, tenantName, zookeeperBarrierTimeout);
    PrepareResult result = applicationRepository.prepareAndActivate(tenant, sessionId, prepareParams, shouldIgnoreLockFailure(request), shouldIgnoreSessionStaleFailure(request), Instant.now());
    return new SessionPrepareAndActivateResponse(result, tenantName, request, prepareParams.getApplicationId(), zone);
}
Also used : Tenant(com.yahoo.vespa.config.server.tenant.Tenant) TenantName(com.yahoo.config.provision.TenantName) PrepareParams(com.yahoo.vespa.config.server.session.PrepareParams)

Example 14 with Tenant

use of com.yahoo.vespa.config.server.tenant.Tenant in project vespa by vespa-engine.

the class RemoteSessionRepoTest method testBadApplicationRepoOnActivate.

// If reading a session throws an exception it should be handled and not prevent other applications
// from loading. In this test we just show that we end up with one session in remote session
// repo even if it had bad data (by making getSessionIdForApplication() in FailingTenantApplications
// throw an exception).
@Test
public void testBadApplicationRepoOnActivate() throws Exception {
    long sessionId = 3L;
    TenantApplications applicationRepo = new FailingTenantApplications();
    TenantName mytenant = TenantName.from("mytenant");
    Tenant tenant = TenantBuilder.create(new TestComponentRegistry.Builder().curator(curator).build(), mytenant).withApplicationRepo(applicationRepo).build();
    curator.create(Tenants.getSessionsPath(mytenant));
    remoteSessionRepo = tenant.getRemoteSessionRepo();
    assertThat(remoteSessionRepo.listSessions().size(), is(0));
    createSession(sessionId, true, mytenant);
    assertThat(remoteSessionRepo.listSessions().size(), is(1));
}
Also used : Tenant(com.yahoo.vespa.config.server.tenant.Tenant) TenantName(com.yahoo.config.provision.TenantName) TestComponentRegistry(com.yahoo.vespa.config.server.TestComponentRegistry) TenantApplications(com.yahoo.vespa.config.server.application.TenantApplications) Test(org.junit.Test)

Example 15 with Tenant

use of com.yahoo.vespa.config.server.tenant.Tenant in project vespa by vespa-engine.

the class RemoteSessionRepoTest method setupFacade.

@Before
public void setupFacade() throws Exception {
    Tenant tenant = TenantBuilder.create(new TestComponentRegistry.Builder().curator(curator).build(), tenantName).build();
    this.remoteSessionRepo = tenant.getRemoteSessionRepo();
    curator.create(Tenants.getTenantPath(tenantName).append("/applications"));
    curator.create(Tenants.getSessionsPath(tenantName));
    createSession(1l, false);
    createSession(2l, false);
}
Also used : Tenant(com.yahoo.vespa.config.server.tenant.Tenant) TenantBuilder(com.yahoo.vespa.config.server.tenant.TenantBuilder) Before(org.junit.Before)

Aggregations

Tenant (com.yahoo.vespa.config.server.tenant.Tenant)21 ApplicationId (com.yahoo.config.provision.ApplicationId)10 TenantName (com.yahoo.config.provision.TenantName)10 LocalSession (com.yahoo.vespa.config.server.session.LocalSession)6 TenantApplications (com.yahoo.vespa.config.server.application.TenantApplications)5 PrepareParams (com.yahoo.vespa.config.server.session.PrepareParams)5 TimeoutBudget (com.yahoo.vespa.config.server.TimeoutBudget)4 DeployLogger (com.yahoo.config.application.api.DeployLogger)3 Slime (com.yahoo.slime.Slime)3 Test (org.junit.Test)3 Version (com.yahoo.component.Version)2 ApplicationFile (com.yahoo.config.application.api.ApplicationFile)2 ApplicationMetaData (com.yahoo.config.application.api.ApplicationMetaData)2 Path (com.yahoo.path.Path)2 NestedTransaction (com.yahoo.transaction.NestedTransaction)2 TestComponentRegistry (com.yahoo.vespa.config.server.TestComponentRegistry)2 BadRequestException (com.yahoo.vespa.config.server.http.BadRequestException)2 Tenants (com.yahoo.vespa.config.server.tenant.Tenants)2 Files (com.google.common.io.Files)1 Inject (com.google.inject.Inject)1