diff options
author | HÃ¥kon Hallingstad <hakon@verizonmedia.com> | 2020-04-20 10:36:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-20 10:36:33 +0200 |
commit | b105eead1fbbcefbb85bc962749f2a12fa660bbe (patch) | |
tree | 7a3c996c00b854066d32608a002335715fb98c96 /config-model-api | |
parent | f61f6c701dc91e839b865f158a6da56ff166def7 (diff) | |
parent | 9ab0ef70e9ed4f422df67603f26bcb0c7918fdc4 (diff) |
Merge branch 'master' into hakonhall/remove-use-bucket-space-metric-feature-flag
Diffstat (limited to 'config-model-api')
12 files changed, 120 insertions, 595 deletions
diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json index 0f5a5e6271d..1b5a8924fea 100644 --- a/config-model-api/abi-spec.json +++ b/config-model-api/abi-spec.json @@ -71,17 +71,13 @@ "public" ], "methods": [ - "public void <init>(java.io.File, java.lang.String, java.lang.String, java.lang.Long, boolean, java.lang.String, java.lang.Long, long)", - "public void <init>(java.lang.String, java.lang.String, java.lang.Long, boolean, java.lang.String, java.lang.String, java.lang.Long, long)", "public void <init>(java.lang.String, java.lang.String, java.lang.Long, boolean, com.yahoo.config.provision.ApplicationId, java.lang.String, java.lang.Long, long)", - "public java.lang.String getApplicationName()", "public java.lang.String getDeployedByUser()", "public java.lang.String getDeployPath()", "public com.yahoo.config.provision.ApplicationId getApplicationId()", "public java.lang.Long getDeployTimestamp()", "public java.lang.Long getGeneration()", "public boolean isInternalRedeploy()", - "public java.lang.String getCheckSum()", "public java.lang.String getChecksum()", "public long getPreviousActiveGeneration()", "public java.lang.String toString()", @@ -137,6 +133,7 @@ "fields": [ "public static final java.lang.String HOSTS", "public static final java.lang.String SERVICES", + "public static final com.yahoo.path.Path SCHEMAS_DIR", "public static final com.yahoo.path.Path SEARCH_DEFINITIONS_DIR", "public static final java.lang.String COMPONENT_DIR", "public static final java.lang.String SEARCHCHAINS_DIR", @@ -605,511 +602,5 @@ "public static final com.yahoo.config.application.api.ValidationOverrides empty", "public static final com.yahoo.config.application.api.ValidationOverrides all" ] - }, - "com.yahoo.config.model.api.ApplicationInfo": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(com.yahoo.config.provision.ApplicationId, long, com.yahoo.config.model.api.Model)", - "public com.yahoo.config.provision.ApplicationId getApplicationId()", - "public long getGeneration()", - "public com.yahoo.config.model.api.Model getModel()", - "public java.lang.String toString()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ConfigChangeAction$Type": { - "superClass": "java.lang.Enum", - "interfaces": [], - "attributes": [ - "public", - "final", - "enum" - ], - "methods": [ - "public static com.yahoo.config.model.api.ConfigChangeAction$Type[] values()", - "public static com.yahoo.config.model.api.ConfigChangeAction$Type valueOf(java.lang.String)", - "public java.lang.String toString()" - ], - "fields": [ - "public static final enum com.yahoo.config.model.api.ConfigChangeAction$Type RESTART", - "public static final enum com.yahoo.config.model.api.ConfigChangeAction$Type REFEED" - ] - }, - "com.yahoo.config.model.api.ConfigChangeAction": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract com.yahoo.config.model.api.ConfigChangeAction$Type getType()", - "public abstract java.lang.String getMessage()", - "public abstract java.util.List getServices()", - "public abstract boolean allowed()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ConfigChangeRefeedAction": { - "superClass": "java.lang.Object", - "interfaces": [ - "com.yahoo.config.model.api.ConfigChangeAction" - ], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public com.yahoo.config.model.api.ConfigChangeAction$Type getType()", - "public java.lang.String name()", - "public abstract java.lang.String getDocumentType()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ConfigChangeRestartAction": { - "superClass": "java.lang.Object", - "interfaces": [ - "com.yahoo.config.model.api.ConfigChangeAction" - ], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public com.yahoo.config.model.api.ConfigChangeAction$Type getType()", - "public boolean allowed()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ConfigDefinitionRepo": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract java.util.Map getConfigDefinitions()", - "public abstract com.yahoo.vespa.config.buildergen.ConfigDefinition get(com.yahoo.vespa.config.ConfigDefinitionKey)" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ConfigDefinitionStore": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract com.yahoo.vespa.config.ConfigDefinition getConfigDefinition(com.yahoo.vespa.config.ConfigDefinitionKey)" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ConfigModelPlugin": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [], - "fields": [] - }, - "com.yahoo.config.model.api.ConfigServerSpec": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract java.lang.String getHostName()", - "public abstract int getConfigServerPort()", - "public int getHttpPort()", - "public abstract int getZooKeeperPort()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ContainerEndpoint": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(java.lang.String, java.util.List)", - "public java.lang.String clusterId()", - "public java.util.List names()", - "public boolean equals(java.lang.Object)", - "public int hashCode()", - "public java.lang.String toString()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.EndpointCertificateMetadata": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(java.lang.String, java.lang.String, int)", - "public java.lang.String keyName()", - "public java.lang.String certName()", - "public int version()", - "public java.lang.String toString()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.EndpointCertificateSecrets": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(java.lang.String, java.lang.String)", - "public java.lang.String certificate()", - "public java.lang.String key()", - "public boolean isMissing()" - ], - "fields": [ - "public static final com.yahoo.config.model.api.EndpointCertificateSecrets MISSING" - ] - }, - "com.yahoo.config.model.api.FileDistribution": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract void startDownload(java.lang.String, int, java.util.Set)", - "public abstract java.io.File getFileReferencesDir()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.HostInfo": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(java.lang.String, java.util.Collection)", - "public java.lang.String getHostname()", - "public java.util.Collection getServices()", - "public boolean equals(java.lang.Object)", - "public int hashCode()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.HostProvisioner": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract com.yahoo.config.provision.HostSpec allocateHost(java.lang.String)", - "public abstract java.util.List prepare(com.yahoo.config.provision.ClusterSpec, com.yahoo.config.provision.Capacity, int, com.yahoo.config.provision.ProvisionLogger)" - ], - "fields": [] - }, - "com.yahoo.config.model.api.Model": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract com.yahoo.vespa.config.ConfigPayload getConfig(com.yahoo.vespa.config.ConfigKey, com.yahoo.vespa.config.buildergen.ConfigDefinition)", - "public abstract java.util.Set allConfigsProduced()", - "public abstract java.util.Collection getHosts()", - "public abstract java.util.Set allConfigIds()", - "public abstract void distributeFiles(com.yahoo.config.model.api.FileDistribution)", - "public abstract java.util.Set fileReferences()", - "public abstract com.yahoo.config.provision.AllocatedHosts allocatedHosts()", - "public boolean allowModelVersionMismatch(java.time.Instant)", - "public boolean skipOldConfigModels(java.time.Instant)", - "public com.yahoo.component.Version version()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ModelContext$Properties": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract boolean multitenant()", - "public abstract com.yahoo.config.provision.ApplicationId applicationId()", - "public abstract java.util.List configServerSpecs()", - "public abstract com.yahoo.config.provision.HostName loadBalancerName()", - "public abstract java.net.URI ztsUrl()", - "public abstract java.lang.String athenzDnsSuffix()", - "public abstract boolean hostedVespa()", - "public abstract com.yahoo.config.provision.Zone zone()", - "public abstract java.util.Set endpoints()", - "public abstract boolean isBootstrap()", - "public abstract boolean isFirstTimeDeployment()", - "public boolean useDedicatedNodeForLogserver()", - "public abstract boolean useAdaptiveDispatch()", - "public java.util.Optional tlsSecrets()", - "public java.util.Optional endpointCertificateSecrets()", - "public abstract double defaultTermwiseLimit()", - "public abstract boolean useBucketSpaceMetric()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ModelContext": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract com.yahoo.config.application.api.ApplicationPackage applicationPackage()", - "public abstract java.util.Optional previousModel()", - "public abstract java.util.Optional permanentApplicationPackage()", - "public abstract java.util.Optional hostProvisioner()", - "public abstract com.yahoo.config.application.api.DeployLogger deployLogger()", - "public abstract com.yahoo.config.model.api.ConfigDefinitionRepo configDefinitionRepo()", - "public abstract com.yahoo.config.application.api.FileRegistry getFileRegistry()", - "public abstract com.yahoo.config.model.api.ModelContext$Properties properties()", - "public java.util.Optional appDir()", - "public abstract com.yahoo.component.Version modelVespaVersion()", - "public abstract com.yahoo.component.Version wantedNodeVespaVersion()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ModelCreateResult": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(com.yahoo.config.model.api.Model, java.util.List)", - "public com.yahoo.config.model.api.Model getModel()", - "public java.util.List getConfigChangeActions()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ModelFactory": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract com.yahoo.component.Version version()", - "public abstract com.yahoo.config.model.api.Model createModel(com.yahoo.config.model.api.ModelContext)", - "public abstract com.yahoo.config.model.api.ModelCreateResult createAndValidateModel(com.yahoo.config.model.api.ModelContext, com.yahoo.config.model.api.ValidationParameters)" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ModelState": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract com.yahoo.config.model.api.Model getModel()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.PortInfo": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(int, java.util.Collection)", - "public int getPort()", - "public java.util.Collection getTags()", - "public boolean equals(java.lang.Object)", - "public int hashCode()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.ServiceInfo": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(java.lang.String, java.lang.String, java.util.Collection, java.util.Map, java.lang.String, java.lang.String)", - "public java.lang.String getServiceName()", - "public java.lang.String getConfigId()", - "public java.lang.String getServiceType()", - "public java.util.Optional getProperty(java.lang.String)", - "public java.util.Collection getPorts()", - "public java.lang.String getHostName()", - "public boolean equals(java.lang.Object)", - "public int hashCode()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.SuperModel": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>()", - "public void <init>(java.util.Map)", - "public java.util.Map getModelsPerTenant()", - "public java.util.Map getModels()", - "public java.util.List getAllApplicationInfos()", - "public java.util.Optional getApplicationInfo(com.yahoo.config.provision.ApplicationId)", - "public com.yahoo.config.model.api.SuperModel cloneAndSetApplication(com.yahoo.config.model.api.ApplicationInfo)", - "public com.yahoo.config.model.api.SuperModel cloneAndRemoveApplication(com.yahoo.config.provision.ApplicationId)" - ], - "fields": [] - }, - "com.yahoo.config.model.api.SuperModelListener": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract void applicationActivated(com.yahoo.config.model.api.SuperModel, com.yahoo.config.model.api.ApplicationInfo)", - "public abstract void applicationRemoved(com.yahoo.config.model.api.SuperModel, com.yahoo.config.provision.ApplicationId)" - ], - "fields": [] - }, - "com.yahoo.config.model.api.SuperModelProvider": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract void registerListener(com.yahoo.config.model.api.SuperModelListener)", - "public abstract com.yahoo.config.model.api.SuperModel getSuperModel()" - ], - "fields": [] - }, - "com.yahoo.config.model.api.TlsSecrets": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(java.lang.String, java.lang.String)", - "public void <init>(com.yahoo.config.model.api.EndpointCertificateSecrets)", - "public java.lang.String certificate()", - "public java.lang.String key()", - "public boolean isMissing()" - ], - "fields": [ - "public static final com.yahoo.config.model.api.TlsSecrets MISSING" - ] - }, - "com.yahoo.config.model.api.ValidationParameters$CheckRouting": { - "superClass": "java.lang.Enum", - "interfaces": [], - "attributes": [ - "public", - "final", - "enum" - ], - "methods": [ - "public static com.yahoo.config.model.api.ValidationParameters$CheckRouting[] values()", - "public static com.yahoo.config.model.api.ValidationParameters$CheckRouting valueOf(java.lang.String)" - ], - "fields": [ - "public static final enum com.yahoo.config.model.api.ValidationParameters$CheckRouting TRUE", - "public static final enum com.yahoo.config.model.api.ValidationParameters$CheckRouting FALSE" - ] - }, - "com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange": { - "superClass": "java.lang.Enum", - "interfaces": [], - "attributes": [ - "public", - "final", - "enum" - ], - "methods": [ - "public static com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange[] values()", - "public static com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange valueOf(java.lang.String)" - ], - "fields": [ - "public static final enum com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange TRUE", - "public static final enum com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange FALSE" - ] - }, - "com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors": { - "superClass": "java.lang.Enum", - "interfaces": [], - "attributes": [ - "public", - "final", - "enum" - ], - "methods": [ - "public static com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors[] values()", - "public static com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors valueOf(java.lang.String)" - ], - "fields": [ - "public static final enum com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors TRUE", - "public static final enum com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors FALSE" - ] - }, - "com.yahoo.config.model.api.ValidationParameters": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>()", - "public void <init>(com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors)", - "public void <init>(com.yahoo.config.model.api.ValidationParameters$CheckRouting)", - "public void <init>(com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors, com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange, com.yahoo.config.model.api.ValidationParameters$CheckRouting)", - "public boolean ignoreValidationErrors()", - "public boolean failOnIncompatibleChanges()", - "public boolean checkRouting()" - ], - "fields": [] } }
\ No newline at end of file diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java index c4dee70cd86..480d12b6700 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java @@ -2,14 +2,16 @@ package com.yahoo.config.application.api; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.ApplicationName; -import com.yahoo.config.provision.InstanceName; -import com.yahoo.config.provision.TenantName; -import com.yahoo.slime.*; - +import com.yahoo.slime.Cursor; +import com.yahoo.slime.Inspector; +import com.yahoo.slime.JsonDecoder; +import com.yahoo.slime.JsonFormat; +import com.yahoo.slime.Slime; import com.yahoo.text.Utf8; -import java.io.*; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; /** * Metadata about an application package. @@ -27,32 +29,6 @@ public class ApplicationMetaData { private final long generation; private final long previousActiveGeneration; - // TODO: Remove after September 2019 - public ApplicationMetaData(File appDir, - String deployedByUser, - String deployedFromDir, - Long deployTimestamp, - boolean internalRedeploy, - String checksum, - Long generation, - long previousActiveGeneration) { - this(deployedByUser, deployedFromDir, deployTimestamp, internalRedeploy, - appDir.getName(), checksum, generation, previousActiveGeneration); - } - - // TODO: Remove after September 2019 - public ApplicationMetaData(String deployedByUser, String deployedFromDir, Long deployTimestamp, boolean internalRedeploy, - String applicationName, String checksum, Long generation, long previousActiveGeneration) { - this(deployedByUser, - deployedFromDir, - deployTimestamp, - internalRedeploy, - ApplicationId.from(TenantName.defaultName(), ApplicationName.from(applicationName), InstanceName.from("default")), - checksum, - generation, - previousActiveGeneration); - } - public ApplicationMetaData(String deployedByUser, String deployedFromDir, Long deployTimestamp, boolean internalRedeploy, ApplicationId applicationId, String checksum, Long generation, long previousActiveGeneration) { this.deployedByUser = deployedByUser; @@ -66,15 +42,6 @@ public class ApplicationMetaData { } /** - * Gets the name of the application (name of the directory from which application was deployed. - * Will return null if a problem occurred while getting metadata - * - * @return application name - */ - // TODO: Remove after September 2019 - public String getApplicationName() { return applicationId.application().toString(); } - - /** * Gets the user who deployed the application. * Will return null if a problem occurred while getting metadata * @@ -117,10 +84,6 @@ public class ApplicationMetaData { public boolean isInternalRedeploy() { return internalRedeploy; } /** Returns an md5 hash of the contents of the application package */ - // TODO: Remove after September 2019 - public String getCheckSum() { return checksum; } - - /** Returns an md5 hash of the contents of the application package */ public String getChecksum() { return checksum; } /** Returns the previously active generation at the point when this application was created. */ @@ -140,18 +103,11 @@ public class ApplicationMetaData { Inspector deploy = root.field("deploy"); Inspector app = root.field("application"); - // TODO: Simplify to just ApplicationId.fromSerializedForm(app.field("id").asString()) after September 2019 - ApplicationId applicationId = app.field("id").valid() ? - ApplicationId.fromSerializedForm(app.field("id").asString()) : - ApplicationId.from(TenantName.defaultName(), - ApplicationName.from(app.field("name").asString()), - InstanceName.from("default")); - return new ApplicationMetaData(deploy.field("user").asString(), deploy.field("from").asString(), deploy.field("timestamp").asLong(), booleanField("internalRedeploy", false, deploy), - applicationId, + ApplicationId.fromSerializedForm(app.field("id").asString()), app.field("checksum").asString(), app.field("generation").asLong(), app.field("previousActiveGeneration").asLong()); @@ -170,7 +126,6 @@ public class ApplicationMetaData { deploy.setBool("internalRedeploy", internalRedeploy); Cursor app = meta.setObject("application"); app.setString("id", applicationId.serializedForm()); - app.setString("name", applicationId.application().value()); // TODO: Remove after September 2019 app.setString("checksum", checksum); app.setLong("generation", generation); app.setLong("previousActiveGeneration", previousActiveGeneration); @@ -188,7 +143,7 @@ public class ApplicationMetaData { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { new JsonFormat(false).encode(baos, slime); - return baos.toString("UTF-8"); + return baos.toString(StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException("Unable to encode metadata", e); } diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java index db3d391d19b..174f9bb54d7 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java @@ -36,8 +36,6 @@ import java.util.jar.JarFile; * The class hides detail as to whether the source is local files or ZooKeeper * data in config server. * - * Anyone wanting to access application data should use this interface. - * * @author Vegard Havdal */ public interface ApplicationPackage { @@ -47,7 +45,8 @@ public interface ApplicationPackage { String HOSTS = "hosts.xml"; String SERVICES = "services.xml"; - Path SEARCH_DEFINITIONS_DIR = Path.fromString("searchdefinitions"); + Path SCHEMAS_DIR = Path.fromString("schemas"); + Path SEARCH_DEFINITIONS_DIR = Path.fromString("searchdefinitions"); // Legacy addition to schemas String COMPONENT_DIR = "components"; String SEARCHCHAINS_DIR = "search/chains"; String DOCPROCCHAINS_DIR = "docproc/chains"; @@ -168,7 +167,7 @@ public interface ApplicationPackage { } /** - * Returns inforamtion about a file + * Returns information about a file * * @param relativePath the relative path of the file within this application package. * @return information abut the file, returned whether or not the file exists @@ -206,23 +205,26 @@ public interface ApplicationPackage { Reader getRankingExpression(String name); /** - * Returns the name-payload pairs of any sd files under path/searchdefinitions/ in the given jar bundle - * @param bundle The jar file, which will be closed afterwards by this method. - * @param path For example 'complex/' + * Returns the name-payload pairs of any sd files under path/schemas and path/searchdefinitions/ + * in the given jar bundle. + * + * @param bundle the jar file, which will be closed afterwards by this method + * @param path for example 'complex/' * @return map of the SD payloads * @throws IOException if it is reading sd files fails */ static Map<String, String> getBundleSdFiles(String path, JarFile bundle) throws IOException { - Map<String,String> ret = new LinkedHashMap<>(); + Map<String, String> schemas = new LinkedHashMap<>(); for (Enumeration<JarEntry> e = bundle.entries(); e.hasMoreElements();) { - JarEntry je=e.nextElement(); - if (je.getName().startsWith(path+SEARCH_DEFINITIONS_DIR+"/") && je.getName().endsWith(SD_NAME_SUFFIX)) { - String contents = IOUtils.readAll(new InputStreamReader(bundle.getInputStream(je))); - ret.put(getFileName(je), contents); + JarEntry entry = e.nextElement(); + if ((entry.getName().startsWith(path + SCHEMAS_DIR + "/") || entry.getName().startsWith(path + SEARCH_DEFINITIONS_DIR + "/")) + && entry.getName().endsWith(SD_NAME_SUFFIX)) { + String contents = IOUtils.readAll(new InputStreamReader(bundle.getInputStream(entry))); + schemas.put(getFileName(entry), contents); } } bundle.close(); - return ret; + return schemas; } /** diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigServerSpec.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigServerSpec.java index e63e4ce3af6..96e76e46cda 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigServerSpec.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigServerSpec.java @@ -10,8 +10,6 @@ public interface ConfigServerSpec { String getHostName(); int getConfigServerPort(); - // TODO: Remove when latest model version in use is 7.47 - default int getHttpPort() { return getConfigServerPort() + 1; } int getZooKeeperPort(); } diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java b/config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java index bf58000dd36..4edf3c455d0 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java @@ -18,15 +18,17 @@ public interface HostProvisioner { // TODO: Remove HostSpec allocateHost(String alias); + @Deprecated // TODO: Remove after April 2020 + List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger); + /** * Prepares allocation of a set of hosts with a given type, common id and the amount. * * @param cluster the cluster to allocate nodes to * @param capacity the capacity describing the capacity requested - * @param groups the number of groups to divide the nodes into * @param logger a logger to which messages to the deployer may be written * @return the specification of the allocated hosts */ - List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger); + List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger); } diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java index 843bce6de7c..8ebb449ceda 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java @@ -6,6 +6,7 @@ import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.application.api.FileRegistry; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.AthenzDomain; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.Zone; @@ -26,12 +27,16 @@ public interface ModelContext { Optional<Model> previousModel(); Optional<ApplicationPackage> permanentApplicationPackage(); Optional<HostProvisioner> hostProvisioner(); + Provisioned provisioned(); DeployLogger deployLogger(); ConfigDefinitionRepo configDefinitionRepo(); FileRegistry getFileRegistry(); Properties properties(); default Optional<File> appDir() { return Optional.empty();} + /** The Docker image repo we want to use for images for this deployment (optional, will use default if empty) */ + default Optional<String> wantedDockerImageRepository() { return Optional.empty(); } + /** The Vespa version this model is built for */ Version modelVespaVersion(); @@ -51,15 +56,40 @@ public interface ModelContext { Set<ContainerEndpoint> endpoints(); boolean isBootstrap(); boolean isFirstTimeDeployment(); - // TODO: Remove when Vespa 7.112 is the oldest config model in use + + // TODO: Only needed for LbServicesProducerTest default boolean useDedicatedNodeForLogserver() { return true; } + + // TODO Revisit in May or June 2020 boolean useAdaptiveDispatch(); - // TODO: Remove temporary default implementations + + // TODO: Remove after April 2020 default Optional<TlsSecrets> tlsSecrets() { return Optional.empty(); } + default Optional<EndpointCertificateSecrets> endpointCertificateSecrets() { return Optional.empty(); } + + // TODO Revisit in May or June 2020 double defaultTermwiseLimit(); + + // TODO Revisit in May or June 2020 + double defaultSoftStartSeconds(); + + // TODO Revisit in May or June 2020 + double defaultTopKProbability(); + // TODO: Remove once there are no Vespa versions below 7.170 boolean useBucketSpaceMetric(); + + default boolean useNewAthenzFilter() { return true; } // TODO bjorncs: Remove after end of April + + // TODO: Remove after April 2020 + default boolean usePhraseSegmenting() { return false; } + + default String proxyProtocol() { return "https-only"; } + default Optional<AthenzDomain> athenzDomain() { return Optional.empty(); } + + // TODO(mpolden): Remove after May 2020 + default boolean useDedicatedNodesWhenUnspecified() { return true; } } } diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/Provisioned.java b/config-model-api/src/main/java/com/yahoo/config/model/api/Provisioned.java new file mode 100644 index 00000000000..e4201836e57 --- /dev/null +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/Provisioned.java @@ -0,0 +1,28 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.model.api; + +import com.yahoo.config.provision.Capacity; +import com.yahoo.config.provision.ClusterSpec; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * A recording of the capacity requests issued during a model build. + * Requests are only recorded here if provision requests are issued to the node repo. + * + * @author bratseth + */ +public class Provisioned { + + private final Map<ClusterSpec.Id, Capacity> provisioned = new HashMap<>(); + + public void add(ClusterSpec.Id id, Capacity capacity) { + provisioned.put(id, capacity); + } + + /** Returns an unmodifiable map of all the provision requests recorded during build of the model this belongs to */ + public Map<ClusterSpec.Id, Capacity> all() { return Collections.unmodifiableMap(provisioned); } + +} diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModel.java b/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModel.java index 1735e08c930..50f1ea2336d 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModel.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModel.java @@ -20,13 +20,15 @@ import java.util.Set; public class SuperModel { private final Map<ApplicationId, ApplicationInfo> models; + private final boolean complete; public SuperModel() { - this.models = Collections.emptyMap(); + this(Collections.emptyMap(), false); } - public SuperModel(Map<ApplicationId, ApplicationInfo> models) { + public SuperModel(Map<ApplicationId, ApplicationInfo> models, boolean complete) { this.models = models; + this.complete = complete; } public Map<TenantName, Set<ApplicationInfo>> getModelsPerTenant() { @@ -45,6 +47,8 @@ public class SuperModel { return ImmutableMap.copyOf(models); } + public boolean isComplete() { return complete; } + public List<ApplicationInfo> getAllApplicationInfos() { return new ArrayList<>(models.values()); } @@ -57,17 +61,19 @@ public class SuperModel { public SuperModel cloneAndSetApplication(ApplicationInfo application) { Map<ApplicationId, ApplicationInfo> newModels = cloneModels(models); newModels.put(application.getApplicationId(), application); - - return new SuperModel(newModels); + return new SuperModel(newModels, complete); } public SuperModel cloneAndRemoveApplication(ApplicationId applicationId) { Map<ApplicationId, ApplicationInfo> newModels = cloneModels(models); newModels.remove(applicationId); - - return new SuperModel(newModels); + return new SuperModel(newModels, complete); } + public SuperModel cloneAsComplete() { return new SuperModel(models, true); } + + public Set<ApplicationId> getApplicationIds() { return models.keySet(); } + private static Map<ApplicationId, ApplicationInfo> cloneModels(Map<ApplicationId, ApplicationInfo> models) { return new LinkedHashMap<>(models); } diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModelListener.java b/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModelListener.java index 497c38af908..930c3c94907 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModelListener.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModelListener.java @@ -7,6 +7,7 @@ import com.yahoo.config.provision.ApplicationId; * Interface for those wanting to be notified about changes to the SuperModel. */ public interface SuperModelListener { + /** * Application has been activated: Either deployed the first time, * internally redeployed, or externally triggered redeploy. @@ -17,4 +18,12 @@ public interface SuperModelListener { * Application has been removed. */ void applicationRemoved(SuperModel superModel, ApplicationId id); + + /** + * Invoked once all applications that were supposed to be deployed on bootstrap + * have been activated (and the respective {@link #applicationActivated(SuperModel, ApplicationInfo) + * applicationActivated} have been invoked). The SuperModel is then said to be "complete". + */ + void notifyOfCompleteness(SuperModel superModel); + } diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java b/config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java index a3478026520..689e2524dde 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java @@ -1,6 +1,5 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. @ExportPackage -@PublicApi // Not really "public", only annotated as such to enable the ABI checker plugin package com.yahoo.config.model.api; import com.yahoo.osgi.annotation.ExportPackage; diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java index 5bf103d1836..32d903786dc 100644 --- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java +++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java @@ -1002,14 +1002,14 @@ public class DeploymentSpecTest { public void notificationsDefault() { StringReader r = new StringReader( "<deployment version='1.0'>" + - " <notifications when=\"failing-commit\">" + - " <email role=\"author\"/>" + + " <notifications>" + + " <email role=\"author\" when=\"failing\"/>" + " <email address=\"mary@dev\"/>" + " </notifications>" + " <instance id='instance1'>" + " <notifications when=\"failing\">" + " <email role=\"author\"/>" + - " <email address=\"john@operator\"/>" + + " <email address=\"john@operator\" when=\"failing-commit\"/>" + " </notifications>" + " </instance>" + " <instance id='instance2'>" + @@ -1020,9 +1020,13 @@ public class DeploymentSpecTest { DeploymentSpec spec = DeploymentSpec.fromXml(r); DeploymentInstanceSpec instance1 = spec.requireInstance("instance1"); assertEquals(Set.of(author), instance1.notifications().emailRolesFor(failing)); - assertEquals(Set.of("john@operator"), instance1.notifications().emailAddressesFor(failing)); + assertEquals(Set.of(), instance1.notifications().emailAddressesFor(failing)); + assertEquals(Set.of(author), instance1.notifications().emailRolesFor(failingCommit)); + assertEquals(Set.of("john@operator"), instance1.notifications().emailAddressesFor(failingCommit)); DeploymentInstanceSpec instance2 = spec.requireInstance("instance2"); + assertEquals(Set.of(author), instance2.notifications().emailRolesFor(failing)); + assertEquals(Set.of(), instance2.notifications().emailAddressesFor(failing)); assertEquals(Set.of(author), instance2.notifications().emailRolesFor(failingCommit)); assertEquals(Set.of("mary@dev"), instance2.notifications().emailAddressesFor(failingCommit)); } diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java index 6a815a467f5..4a7ef7b43f7 100644 --- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java +++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java @@ -318,6 +318,7 @@ public class DeploymentSpecWithoutInstanceTest { @Test public void testEmpty() { + assertEquals(DeploymentSpec.empty, DeploymentSpec.fromXml("<deployment version='1.0'>\n</deployment>")); assertEquals(0, DeploymentSpec.empty.steps().size()); assertTrue(DeploymentSpec.empty.athenzDomain().isEmpty()); assertTrue(DeploymentSpec.empty.athenzService().isEmpty()); |