aboutsummaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-04-04 11:48:26 +0200
committerGitHub <noreply@github.com>2022-04-04 11:48:26 +0200
commit290e299280f90fc122428906e51891fba6c50007 (patch)
tree3682bdf5fa46734b1d6575bf39e85f2f22fd1533 /config-provisioning
parent64d0102f9931a01d31976e85b585b9e63894f08e (diff)
Revert "Jonmv/misc 6"
Diffstat (limited to 'config-provisioning')
-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
5 files changed, 130 insertions, 55 deletions
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());