summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-04-04 16:40:47 +0200
committerGitHub <noreply@github.com>2022-04-04 16:40:47 +0200
commit95ac1dbc727303ff50eaa93eb0ad68e0c76f5b65 (patch)
tree3e61929ad7dceea1eb334d5855ad80dfbf9e51cd
parentad7cc1d11f0c19baa2344a643377576c559555f7 (diff)
Revert "Jonmv/reapply application name validation"
-rw-r--r--application-model/pom.xml6
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java2
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java2
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java66
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java39
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java39
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java39
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/ApplicationIdTest.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/rpc/DelayedConfigResponses.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java8
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java60
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java3
-rw-r--r--routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/nginx/NginxMetricsReporter.java2
-rw-r--r--testutil/src/main/java/com/yahoo/test/OrderTester.java6
-rw-r--r--testutil/src/main/java/com/yahoo/test/TotalOrderTester.java2
-rw-r--r--vespajlib/src/main/java/ai/vespa/validation/Name.java2
-rw-r--r--vespajlib/src/main/java/ai/vespa/validation/package-info.java5
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java2
22 files changed, 185 insertions, 120 deletions
diff --git a/application-model/pom.xml b/application-model/pom.xml
index 7eac247e249..3abf9851d5c 100644
--- a/application-model/pom.xml
+++ b/application-model/pom.xml
@@ -23,12 +23,6 @@
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
- <artifactId>vespajlib</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>com.yahoo.vespa</groupId>
<artifactId>config-provisioning</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java
index 20aca379015..7d94a0418e4 100644
--- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java
+++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java
@@ -31,6 +31,8 @@ public class TenantId {
return id;
}
+ public TenantName toName() { return TenantName.from(id); }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java b/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java
index 1838f1e36b7..824bf248b5c 100644
--- a/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java
+++ b/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java
@@ -99,7 +99,7 @@ public class MockApplicationPackage implements ApplicationPackage {
@SuppressWarnings("deprecation") // not redundant
@Override
public String getApplicationName() {
- return "mock-application";
+ return "mock application";
}
@Override
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
index 796fe586fb9..76d4ae3f1a6 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
@@ -3,10 +3,6 @@ package com.yahoo.config.provision;
import com.yahoo.cloud.config.ApplicationIdConfig;
-import java.util.Comparator;
-import java.util.Objects;
-import java.util.regex.Pattern;
-
/**
* A complete, immutable identification of an application instance.
*
@@ -14,40 +10,27 @@ import java.util.regex.Pattern;
* @author vegard
* @author bratseth
*/
-public class ApplicationId implements Comparable<ApplicationId> {
-
- // TODO: remove '.' and '*' from this pattern.
- static final Pattern namePattern = Pattern.compile("(?!\\.\\.)[a-zA-Z0-9_.*-]{1,64}");
-
- private static final ApplicationId global = new ApplicationId(TenantName.from("*"),
- ApplicationName.from("*"),
- InstanceName.from("*")) {
- @Override public boolean equals(Object other) { return this == other; }
- };
-
- private static final Comparator<ApplicationId> comparator = Comparator.comparing(ApplicationId::tenant)
- .thenComparing(ApplicationId::application)
- .thenComparing(ApplicationId::instance)
- .thenComparing(global::equals, Boolean::compare);
+public final class ApplicationId implements Comparable<ApplicationId> {
private final TenantName tenant;
private final ApplicationName application;
private final InstanceName instance;
+
+ private final String stringValue;
private final String serializedForm;
+ public ApplicationId(ApplicationIdConfig config) {
+ this(TenantName.from(config.tenant()), ApplicationName.from(config.application()), InstanceName.from(config.instance()));
+ }
+
private ApplicationId(TenantName tenant, ApplicationName applicationName, InstanceName instanceName) {
this.tenant = tenant;
this.application = applicationName;
this.instance = instanceName;
+ this.stringValue = toStringValue();
this.serializedForm = toSerializedForm();
}
- public static ApplicationId from(ApplicationIdConfig config) {
- return from(TenantName.from(config.tenant()),
- ApplicationName.from(config.application()),
- InstanceName.from(config.instance()));
- }
-
public static ApplicationId from(TenantName tenant, ApplicationName application, InstanceName instance) {
return new ApplicationId(tenant, application, instance);
}
@@ -61,7 +44,7 @@ public class ApplicationId implements Comparable<ApplicationId> {
if (parts.length < 3)
throw new IllegalArgumentException("Application ids must be on the form tenant:application:instance, but was " + idString);
- return from(parts[0], parts[1], parts[2]);
+ return new Builder().tenant(parts[0]).applicationName(parts[1]).instanceName(parts[2]).build();
}
public static ApplicationId fromFullString(String idString) {
@@ -69,11 +52,11 @@ public class ApplicationId implements Comparable<ApplicationId> {
if (parts.length < 3)
throw new IllegalArgumentException("Application ids must be on the form tenant.application.instance, but was " + idString);
- return from(parts[0], parts[1], parts[2]);
+ return new Builder().tenant(parts[0]).applicationName(parts[1]).instanceName(parts[2]).build();
}
@Override
- public int hashCode() { return Objects.hash(tenant, application, instance); }
+ public int hashCode() { return stringValue.hashCode(); }
@Override
public boolean equals(Object other) {
@@ -89,6 +72,10 @@ public class ApplicationId implements Comparable<ApplicationId> {
/** Returns a serialized form of the content of this: tenant:application:instance */
public String serializedForm() { return serializedForm; }
+ private String toStringValue() {
+ return "tenant '" + tenant + "', application '" + application + "', instance '" + instance + "'";
+ }
+
/** Returns "dotted" string (tenant.application.instance) with instance name omitted if it is "default" */
public String toShortString() {
return tenant().value() + "." + application().value() +
@@ -101,7 +88,7 @@ public class ApplicationId implements Comparable<ApplicationId> {
}
private String toSerializedForm() {
- return tenant.value() + ":" + application.value() + ":" + instance.value();
+ return tenant + ":" + application + ":" + instance;
}
@Override
@@ -113,7 +100,18 @@ public class ApplicationId implements Comparable<ApplicationId> {
@Override
public int compareTo(ApplicationId other) {
- return comparator.compare(this, other);
+ int diff;
+
+ diff = tenant.compareTo(other.tenant);
+ if (diff != 0) { return diff; }
+
+ diff = application.compareTo(other.application);
+ if (diff != 0) { return diff; }
+
+ diff = instance.compareTo(other.instance);
+ if (diff != 0) { return diff; }
+
+ return 0;
}
/** Returns an application id where all fields are "default" */
@@ -121,10 +119,12 @@ public class ApplicationId implements Comparable<ApplicationId> {
return new ApplicationId(TenantName.defaultName(), ApplicationName.defaultName(), InstanceName.defaultName());
}
- // TODO: kill this
- /** Returns a very special application id, which is not equal to any other id. */
+ /** Returns an application id where all fields are "*" */
public static ApplicationId global() {
- return global;
+ return new Builder().tenant("*")
+ .applicationName("*")
+ .instanceName("*")
+ .build();
}
public static class Builder {
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java
index f2585913015..f16c126dec2 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java
@@ -1,7 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
-import ai.vespa.validation.PatternedStringWrapper;
+import java.util.Objects;
/**
* Represents an applications name, which may be any kind of string or default. This type is defined
@@ -10,12 +10,28 @@ import ai.vespa.validation.PatternedStringWrapper;
* @author Ulf Lilleengen
* @since 5.25
*/
-public class ApplicationName extends PatternedStringWrapper<ApplicationName> {
+public class ApplicationName implements Comparable<ApplicationName> {
- private static final ApplicationName defaultName = new ApplicationName("default");
+ private final String applicationName;
- private ApplicationName(String name) {
- super(name, ApplicationId.namePattern, "application name");
+ private ApplicationName(String applicationName) {
+ this.applicationName = applicationName;
+ }
+
+ @Override
+ public int hashCode() {
+ return applicationName.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof ApplicationName)) return false;
+ return Objects.equals(((ApplicationName) obj).applicationName, applicationName);
+ }
+
+ @Override
+ public String toString() {
+ return applicationName;
}
public static ApplicationName from(String name) {
@@ -23,11 +39,20 @@ public class ApplicationName extends PatternedStringWrapper<ApplicationName> {
}
public static ApplicationName defaultName() {
- return defaultName;
+ return new ApplicationName("default");
}
public boolean isDefault() {
- return equals(defaultName);
+ return equals(ApplicationName.defaultName());
+ }
+
+ public String value() {
+ return applicationName;
+ }
+
+ @Override
+ public int compareTo(ApplicationName name) {
+ return this.applicationName.compareTo(name.applicationName);
}
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java
index fc40d351465..8101b70b943 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java
@@ -1,7 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
-import ai.vespa.validation.PatternedStringWrapper;
+import java.util.Objects;
/**
* Represents an applications instance name, which may be any kind of string or default. This type is defined
@@ -9,12 +9,30 @@ import ai.vespa.validation.PatternedStringWrapper;
*
* @author Ulf Lilleengen
*/
-public class InstanceName extends PatternedStringWrapper<InstanceName> {
+public class InstanceName implements Comparable<InstanceName> {
- private static final InstanceName defaultName = new InstanceName("default");
+ private static final InstanceName defaultInstance = new InstanceName("default");
- private InstanceName(String name) {
- super(name, ApplicationId.namePattern, "instance name");
+ private final String instanceName;
+
+ private InstanceName(String instanceName) {
+ this.instanceName = instanceName;
+ }
+
+ @Override
+ public int hashCode() {
+ return instanceName.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof InstanceName)) return false;
+ return Objects.equals(((InstanceName) obj).instanceName, instanceName);
+ }
+
+ @Override
+ public String toString() {
+ return instanceName;
}
public static InstanceName from(String name) {
@@ -22,15 +40,22 @@ public class InstanceName extends PatternedStringWrapper<InstanceName> {
}
public static InstanceName defaultName() {
- return defaultName;
+ return defaultInstance;
}
public boolean isDefault() {
- return equals(defaultName);
+ return equals(InstanceName.defaultName());
}
public boolean isTester() {
return value().endsWith("-t");
}
+ public String value() { return instanceName; }
+
+ @Override
+ public int compareTo(InstanceName instance) {
+ return instanceName.compareTo(instance.instanceName);
+ }
+
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java
index 9909ab360a0..92fe5345b4e 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java
@@ -1,31 +1,56 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
-import ai.vespa.validation.PatternedStringWrapper;
+import java.util.Objects;
/**
* Represents a tenant in the provision API.
*
* @author Ulf Lilleengen
*/
-public class TenantName extends PatternedStringWrapper<TenantName> {
+public class TenantName implements Comparable<TenantName> {
- private static final TenantName defaultName = new TenantName("default");
+ private final String name;
private TenantName(String name) {
- super(name, ApplicationId.namePattern, "tenant name");
+ this.name = name;
}
+ public String value() { return name; }
+
+ /**
+ * Create a {@link TenantName} with a given name.
+ *
+ * @param name Name of tenant.
+ * @return instance of {@link TenantName}.
+ */
public static TenantName from(String name) {
return new TenantName(name);
}
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof TenantName)) return false;
+ return Objects.equals(((TenantName)obj).value(), value());
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
public static TenantName defaultName() {
- return defaultName;
+ return from("default");
}
- public boolean isDefault() {
- return equals(defaultName);
+ @Override
+ public int compareTo(TenantName that) {
+ return this.name.compareTo(that.name);
}
}
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/ApplicationIdTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/ApplicationIdTest.java
index 01904b5eece..c82230f7edf 100644
--- a/config-provisioning/src/test/java/com/yahoo/config/provision/ApplicationIdTest.java
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/ApplicationIdTest.java
@@ -106,7 +106,7 @@ public class ApplicationIdTest {
builder.tenant("a");
builder.application("b");
builder.instance("c");
- ApplicationId applicationId = ApplicationId.from(new ApplicationIdConfig(builder));
+ ApplicationId applicationId = new ApplicationId(new ApplicationIdConfig(builder));
assertEquals("a", applicationId.tenant().value());
assertEquals("b", applicationId.application().value());
assertEquals("c", applicationId.instance().value());
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/DelayedConfigResponses.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/DelayedConfigResponses.java
index 7e6fccb6d2f..d3976464bde 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/DelayedConfigResponses.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/DelayedConfigResponses.java
@@ -193,9 +193,10 @@ public class DelayedConfigResponses {
}
private synchronized void metricDelayedResponses(ApplicationId app, int elems) {
- metrics.computeIfAbsent(app, key -> rpcServer.metricUpdaterFactory()
- .getOrCreateMetricUpdater(Metrics.createDimensions(key)))
- .setDelayedResponses(elems);
+ if ( ! metrics.containsKey(app)) {
+ metrics.put(app, rpcServer.metricUpdaterFactory().getOrCreateMetricUpdater(Metrics.createDimensions(app)));
+ }
+ metrics.get(app).setDelayedResponses(elems);
}
private synchronized void createQueueIfNotExists(GetConfigContext context) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
index ebf1fb32141..99ffff6403b 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
@@ -243,9 +243,13 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
}
private ApplicationState getState(ApplicationId id) {
- return applicationStateMap.computeIfAbsent(id, __ -> new ApplicationState(0));
+ ApplicationState state = applicationStateMap.get(id);
+ if (state == null) {
+ applicationStateMap.putIfAbsent(id, new ApplicationState(0));
+ state = applicationStateMap.get(id);
+ }
+ return state;
}
-
boolean hasNewerGeneration(ApplicationId id, long generation) {
return getState(id).getActiveGeneration() > generation;
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java
index 68ebc5e86aa..fe7beb538da 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java
@@ -20,6 +20,6 @@ public class NodeRepoStats {
public Load load() { return load; }
public Load activeLoad() { return activeLoad; }
- public List<ApplicationStats> applicationStats() { return applicationStats; }
+ public List<ApplicationStats> applicationStats() { return applicationStats; }
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java
index 1a4a42cb521..158cc6caede 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java
@@ -30,7 +30,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.TreeMap;
import java.util.logging.Level;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -133,7 +132,7 @@ public class DeploymentApiHandler extends ThreadedHttpRequestHandler {
entry -> entry.getValue().instanceJobs().get(entry.getKey())));
Cursor productionArray = versionObject.setArray("productionApplications");
statistics.productionSuccesses().stream()
- .collect(groupingBy(run -> run.id().application(), TreeMap::new, toList()))
+ .collect(groupingBy(run -> run.id().application()))
.forEach((id, runs) -> {
Cursor applicationObject = productionArray.addObject();
toSlime(applicationObject, id, request);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java
index a464e3d7e9b..640e6860eb6 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java
@@ -264,38 +264,36 @@ public class ApplicationPackageBuilder {
xml.append(athenzIdentityAttributes);
}
xml.append(">\n");
- for (String instance : instances.split(",")) {
- xml.append(" <instance id='").append(instance).append("'>\n");
- if (upgradePolicy != null || revisionTarget != null || revisionChange != null || upgradeRollout != null) {
- xml.append(" <upgrade ");
- if (upgradePolicy != null) xml.append("policy='").append(upgradePolicy).append("' ");
- if (revisionTarget != null) xml.append("revision-target='").append(revisionTarget).append("' ");
- if (revisionChange != null) xml.append("revision-change='").append(revisionChange).append("' ");
- if (upgradeRollout != null) xml.append("rollout='").append(upgradeRollout).append("' ");
- xml.append("/>\n");
- }
- xml.append(notifications);
- if (explicitSystemTest)
- xml.append(" <test />\n");
- if (explicitStagingTest)
- xml.append(" <staging />\n");
- xml.append(blockChange);
- xml.append(" <prod");
- if (globalServiceId != null) {
- xml.append(" global-service-id='");
- xml.append(globalServiceId);
- xml.append("'");
- }
- xml.append(">\n");
- xml.append(prodBody);
- xml.append(" </prod>\n");
- if (endpointsBody.length() > 0) {
- xml.append(" <endpoints>\n");
- xml.append(endpointsBody);
- xml.append(" </endpoints>\n");
- }
- xml.append(" </instance>\n");
+ xml.append(" <instance id='").append(instances).append("'>\n");
+ if (upgradePolicy != null || revisionTarget != null || revisionChange != null || upgradeRollout != null) {
+ xml.append(" <upgrade ");
+ if (upgradePolicy != null) xml.append("policy='").append(upgradePolicy).append("' ");
+ if (revisionTarget != null) xml.append("revision-target='").append(revisionTarget).append("' ");
+ if (revisionChange != null) xml.append("revision-change='").append(revisionChange).append("' ");
+ if (upgradeRollout != null) xml.append("rollout='").append(upgradeRollout).append("' ");
+ xml.append("/>\n");
+ }
+ xml.append(notifications);
+ if (explicitSystemTest)
+ xml.append(" <test />\n");
+ if (explicitStagingTest)
+ xml.append(" <staging />\n");
+ xml.append(blockChange);
+ xml.append(" <prod");
+ if (globalServiceId != null) {
+ xml.append(" global-service-id='");
+ xml.append(globalServiceId);
+ xml.append("'");
+ }
+ xml.append(">\n");
+ xml.append(prodBody);
+ xml.append(" </prod>\n");
+ if (endpointsBody.length() > 0 ) {
+ xml.append(" <endpoints>\n");
+ xml.append(endpointsBody);
+ xml.append(" </endpoints>\n");
}
+ xml.append(" </instance>\n");
if (applicationEndpointsBody.length() > 0) {
xml.append(" <endpoints>\n");
xml.append(applicationEndpointsBody);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java
index 7b67db39350..a2a1b4ba0a1 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
-import java.util.TreeMap;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
@@ -225,7 +224,7 @@ public class NodeRepositoryMock implements NodeRepository {
}
public void putApplication(ZoneId zone, Application application) {
- applications.computeIfAbsent(zone, (k) -> new TreeMap<>())
+ applications.computeIfAbsent(zone, (k) -> new HashMap<>())
.put(application.id(), application);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
index a9abc352d8c..379bb2566df 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
@@ -43,8 +43,8 @@ import java.util.logging.Logger;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-import static com.yahoo.stream.CustomCollectors.toLinkedMap;
import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.toMap;
/**
* Client which reads and writes nodes to a curator database.
@@ -453,8 +453,7 @@ public class CuratorDatabaseClient {
.map(this::readLoadBalancer)
.filter(Optional::isPresent)
.map(Optional::get)
- .collect(collectingAndThen(toLinkedMap(LoadBalancer::id,
- Function.identity()),
+ .collect(collectingAndThen(toMap(LoadBalancer::id, Function.identity()),
Collections::unmodifiableMap));
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java
index 48ee23c7b60..cc121ba8104 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java
@@ -334,9 +334,6 @@ public class NodeSerializerTest {
" \"hostname\" : \"myHostname\",\n" +
" \"ipAddresses\" : [\"127.0.0.1\"],\n" +
" \"instance\": {\n" +
- " \"tenantId\":\"t\",\n" +
- " \"applicationId\":\"a\",\n" +
- " \"instanceId\":\"i\",\n" +
" \"serviceId\": \"content/myId/0/0/stateful\",\n" +
" \"wantedVespaVersion\": \"6.42.2\"\n" +
" }\n" +
diff --git a/routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/nginx/NginxMetricsReporter.java b/routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/nginx/NginxMetricsReporter.java
index b9ab1dbe9b6..79381b8c99e 100644
--- a/routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/nginx/NginxMetricsReporter.java
+++ b/routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/nginx/NginxMetricsReporter.java
@@ -58,7 +58,7 @@ public class NginxMetricsReporter extends AbstractComponent implements Runnable
@Inject
public NginxMetricsReporter(ApplicationIdConfig applicationId, Metric metric, HealthStatus healthStatus, RoutingGenerator routingGenerator) {
- this(ApplicationId.from(applicationId), metric, healthStatus, FileSystems.getDefault(), interval, routingGenerator::routingTable);
+ this(new ApplicationId(applicationId), metric, healthStatus, FileSystems.getDefault(), interval, routingGenerator::routingTable);
}
NginxMetricsReporter(ApplicationId application, Metric metric, HealthStatus healthStatus, FileSystem fileSystem, Duration interval,
diff --git a/testutil/src/main/java/com/yahoo/test/OrderTester.java b/testutil/src/main/java/com/yahoo/test/OrderTester.java
index cc28ca9f469..4acba4ee7fe 100644
--- a/testutil/src/main/java/com/yahoo/test/OrderTester.java
+++ b/testutil/src/main/java/com/yahoo/test/OrderTester.java
@@ -15,8 +15,8 @@ import java.util.List;
*
*/
-public abstract class OrderTester<T extends Comparable<? super T>> {
- private final ArrayList<List<T>> groups = new ArrayList<>();
+public abstract class OrderTester<T extends Comparable<T>> {
+ private ArrayList<List<T>> groups = new ArrayList<>();
abstract protected void lessTest(T a, T b);
abstract protected void greaterTest(T a, T b);
@@ -24,7 +24,7 @@ public abstract class OrderTester<T extends Comparable<? super T>> {
@SafeVarargs
@SuppressWarnings("varargs")
- private OrderTester<T> addGroup(T... group) {
+ private final OrderTester<T> addGroup(T... group) {
groups.add(Arrays.asList(group));
return this;
}
diff --git a/testutil/src/main/java/com/yahoo/test/TotalOrderTester.java b/testutil/src/main/java/com/yahoo/test/TotalOrderTester.java
index e95bc056ba8..850369fbc2e 100644
--- a/testutil/src/main/java/com/yahoo/test/TotalOrderTester.java
+++ b/testutil/src/main/java/com/yahoo/test/TotalOrderTester.java
@@ -20,7 +20,7 @@ import static org.junit.Assert.assertTrue;
* @author Vegard Sjonfjell
*/
-public class TotalOrderTester<T extends Comparable<? super T>> extends OrderTester<T> {
+public class TotalOrderTester<T extends Comparable<T>> extends OrderTester<T> {
protected void lessTest(T a, T b) throws AssertionError {
assertTrue(a + " must be less than " + b, a.compareTo(b) <= -1);
}
diff --git a/vespajlib/src/main/java/ai/vespa/validation/Name.java b/vespajlib/src/main/java/ai/vespa/validation/Name.java
index a6ab456c285..b275917dcff 100644
--- a/vespajlib/src/main/java/ai/vespa/validation/Name.java
+++ b/vespajlib/src/main/java/ai/vespa/validation/Name.java
@@ -3,6 +3,8 @@ package ai.vespa.validation;
import java.util.regex.Pattern;
+import static ai.vespa.validation.Validation.requireMatch;
+
/**
* A name has from 1 to 64 {@link String} characters which may be letters, numbers,
* dashes or underscores, and must start with a letter.
diff --git a/vespajlib/src/main/java/ai/vespa/validation/package-info.java b/vespajlib/src/main/java/ai/vespa/validation/package-info.java
deleted file mode 100644
index edbab3a6fd1..00000000000
--- a/vespajlib/src/main/java/ai/vespa/validation/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-@ExportPackage
-package ai.vespa.validation;
-
-import com.yahoo.osgi.annotation.ExportPackage;
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java
index 7c91e54dd4b..bd3389b8d4d 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java
@@ -36,7 +36,7 @@ public class MockCurator extends Curator {
/**
* Creates a mock curator
*
- * @param stableOrdering if true children of a node are returned in the same order each time they are queried.
+ * @param stableOrdering if true children of a node are returned in the same order each time they are queries.
* This is not what ZooKeeper does.
*/
public MockCurator(boolean stableOrdering) {