public Map<TenantName, Set<ApplicationInfo>> getModelsPerTenant() { Map<TenantName, Set<ApplicationInfo>> newModels = new LinkedHashMap<>(); this.models.forEach((key, value) -> { if (!newModels.containsKey(key.tenant())) { newModels.put(key.tenant(), new LinkedHashSet<>()); } newModels.get(key.tenant()).add(value); }); return newModels; }
private boolean hostsOnly(TenantName tenant, Optional<String> parentHostname) { if ( ! parentHostname.isPresent()) return true; // yes, as host is exclusive for (Node nodeOnHost : nodeRepository.list().childrenOf(parentHostname.get())) { if ( ! nodeOnHost.allocation().isPresent()) continue; if ( ! nodeOnHost.allocation().get().owner().tenant().equals(tenant)) return false; } return true; }
/** * If a parent host is given, and it hosts another tenant with an application which requires exclusive access * to the physical host, then we cannot host this application on it. */ private boolean exclusiveTo(TenantName tenant, Optional<String> parentHostname) { if ( ! parentHostname.isPresent()) return true; for (Node nodeOnHost : nodeRepository.list().childrenOf(parentHostname.get())) { if ( ! nodeOnHost.allocation().isPresent()) continue; if ( nodeOnHost.allocation().get().membership().cluster().isExclusive() && ! nodeOnHost.allocation().get().owner().tenant().equals(tenant)) return false; } return true; }
@Override public Map<ApplicationInstanceReference, ApplicationInstance> getAllApplicationInstances() { // Convert apps information to the response payload to return Map<ApplicationInstanceReference, ApplicationInstance> status = new HashMap<>(); for (Map.Entry<ApplicationId, MockDeployer.ApplicationContext> app : apps.entrySet()) { Set<ServiceInstance> serviceInstances = new HashSet<>(); for (Node node : nodeRepository.getNodes(app.getValue().id(), Node.State.active)) { serviceInstances.add(new ServiceInstance(new ConfigId("configid"), new HostName(node.hostname()), getHostStatus(node.hostname()))); } Set<ServiceCluster> serviceClusters = new HashSet<>(); serviceClusters.add(new ServiceCluster(new ClusterId(app.getValue().clusterContexts().get(0).cluster().id().value()), new ServiceType("serviceType"), serviceInstances)); TenantId tenantId = new TenantId(app.getKey().tenant().value()); ApplicationInstanceId applicationInstanceId = new ApplicationInstanceId(app.getKey().application().value()); status.put(new ApplicationInstanceReference(tenantId, applicationInstanceId), new ApplicationInstance(tenantId, applicationInstanceId, serviceClusters)); } return status; }
/** Creates a new TesterId for a tester of the given application. */ public static TesterId of(ApplicationId id) { return new TesterId(ApplicationId.from(id.tenant().value(), id.application().value(), id.instance().value() + suffix)); }
public String toShortString() { return tenant().value() + "." + application().value() + ( instance().isDefault() ? "" : "." + instance().value() ); }
@Override public void getConfig(ApplicationIdConfig.Builder builder) { builder.tenant(applicationId.tenant().value()); builder.application(applicationId.application().value()); builder.instance(applicationId.instance().value()); }
private void toSlime(ApplicationId id, Cursor object) { object.setString("tenant", id.tenant().value()); object.setString("application", id.application().value()); object.setString("instance", id.instance().value()); }
/** Creates an returns the path to the lock for this application */ private Path lockPath(ApplicationId application) { Path lockPath = lockRoot .append(application.tenant().value()) .append(application.application().value()) .append(application.instance().value()); curatorDatabase.create(lockPath); return lockPath; }
"state", node.state().name(), "host", node.hostname(), "tenantName", applicationId.tenant().value(), "applicationId", applicationId.serializedForm().replace(':', '.'), "app", toApp(applicationId),
if ( offered.status().wantToRetire()) wantToRetireNode = true; if ( requestedNodes.isExclusive() && ! hostsOnly(application.tenant(), offered.parentHostname())) wantToRetireNode = true; continue; if ( ! exclusiveTo(application.tenant(), offered.parentHostname())) { ++rejectedDueToExclusivity; continue; if ( requestedNodes.isExclusive() && ! hostsOnly(application.tenant(), offered.parentHostname())) { ++rejectedDueToExclusivity; continue;
public String dottedString() { return unCapitalize(applicationId().tenant().value()) + "." + unCapitalize(applicationId().application().value()) + "." + unCapitalize(zoneId.environment().value()) + "." + unCapitalize(zoneId.region().value()) + "." + unCapitalize(applicationId.instance().value()); }
private SentinelConfig.Application.Builder getApplicationConfig() { SentinelConfig.Application.Builder builder = new SentinelConfig.Application.Builder(); builder.tenant(applicationId.tenant().value()); builder.name(applicationId.application().value()); builder.environment(zone.environment().value()); builder.region(zone.region().value()); builder.instance(applicationId.instance().value()); return builder; }
lbObject.setString("id", lb.id().serializedForm()); lbObject.setString("application", lb.id().application().application().value()); lbObject.setString("tenant", lb.id().application().tenant().value()); lbObject.setString("instance", lb.id().application().instance().value()); lbObject.setString("cluster", lb.id().cluster().value());
private void toSlime(Allocation allocation, Cursor object) { object.setString(tenantIdKey, allocation.owner().tenant().value()); object.setString(applicationIdKey, allocation.owner().application().value()); object.setString(instanceIdKey, allocation.owner().instance().value()); object.setString(serviceIdKey, allocation.membership().stringValue()); object.setLong(restartGenerationKey, allocation.restartGeneration().wanted()); object.setLong(currentRestartGenerationKey, allocation.restartGeneration().current()); object.setBool(removableKey, allocation.isRemovable()); object.setString(wantedVespaVersionKey, allocation.membership().cluster().vespaVersion().toString()); }