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;
}
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);
}
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);
}
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));
}
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);
}
Aggregations