aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2019-01-23 22:02:48 +0100
committerGitHub <noreply@github.com>2019-01-23 22:02:48 +0100
commit47521adeb37d8d0bc68c90bc67ca994b3a04e2a5 (patch)
tree64760442352f098a47b97c64e4a1065a3e994da9
parent6ca04ddc2b74153473c8f5d7ececa2105bf284b8 (diff)
parent9fb45e03476aa9b5c676b28a52f08701d9552839 (diff)
Merge pull request #8184 from vespa-engine/balder/control-environment-var
Balder/control environment var MERGEOK
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java7
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java16
-rw-r--r--config-model/src/main/resources/schema/containercluster.rnc5
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java19
-rw-r--r--container-search/src/main/resources/configdefinitions/qr-start.def2
5 files changed, 47 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java
index b90f18d4f24..a6de284f4b7 100755
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java
@@ -182,6 +182,7 @@ public final class ContainerCluster
private String hostClusterId = null;
private String jvmGCOptions = null;
+ private String environmentVars = null;
private Integer memoryPercentage = null;
private static class AcceptAllVerifier implements ContainerClusterVerifier {
@@ -631,6 +632,11 @@ public final class ContainerCluster
} else {
jvmBuilder.gcopts(G1GC);
}
+ if (environmentVars != null) {
+ QrStartConfig.Qrs.Builder qrsBuilder = new QrStartConfig.Qrs.Builder();
+ qrsBuilder.env(environmentVars);
+ builder.qrs(qrsBuilder);
+ }
builder.jvm(jvmBuilder);
}
@@ -779,6 +785,7 @@ public final class ContainerCluster
public void setMemoryPercentage(Integer memoryPercentage) { this.memoryPercentage = memoryPercentage; }
public void setJvmGCOptions(String opts) { this.jvmGCOptions = opts; }
+ public void setEnvironmentVars(String environmentVars) { this.environmentVars = environmentVars; }
public Optional<String> getJvmGCOptions() { return Optional.ofNullable(jvmGCOptions); }
/**
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
index 4401bfa08dd..bb35b66edef 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
@@ -21,7 +21,6 @@ import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Rotation;
import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
@@ -95,6 +94,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
* Path to vip status file for container in Hosted Vespa. Only used if set, else use HOSTED_VESPA_STATUS_FILE
*/
private static final String HOSTED_VESPA_STATUS_FILE_INSTALL_SETTING = "cloudconfig_server__tenant_vip_status_file";
+ private static final String ENVIRONMENT_VARIABLES_ELEMENT = "environment-variables";
public enum Networking { disable, enable }
@@ -484,6 +484,10 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
applyRoutingAliasProperties(nodes, cluster);
applyDefaultPreload(nodes, nodesElement);
+ String environmentVars = getEnvironmentVariables(XML.getChild(nodesElement, ENVIRONMENT_VARIABLES_ELEMENT));
+ if (environmentVars != null && !environmentVars.isEmpty()) {
+ cluster.setEnvironmentVars(environmentVars);
+ }
applyMemoryPercentage(cluster, nodesElement.getAttribute(VespaDomBuilder.Allocated_MEMORY_ATTRIB_NAME));
if (useCpuSocketAffinity(nodesElement))
AbstractService.distributeCpuSocketAffinity(nodes);
@@ -491,6 +495,16 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
cluster.addContainers(nodes);
}
}
+
+ private static String getEnvironmentVariables(Element environmentVariables) {
+ StringBuilder sb = new StringBuilder();
+ if (environmentVariables != null) {
+ for (Element var: XML.getChildren(environmentVariables)) {
+ sb.append(var.getNodeName()).append('=').append(var.getTextContent()).append(' ');
+ }
+ }
+ return sb.toString();
+ }
private List<Container> createNodes(ContainerCluster cluster, Element nodesElement, ConfigModelContext context) {
if (nodesElement.hasAttribute("count")) // regular, hosted node spec
diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc
index a30f61809ad..2f40a090678 100644
--- a/config-model/src/main/resources/schema/containercluster.rnc
+++ b/config-model/src/main/resources/schema/containercluster.rnc
@@ -212,6 +212,7 @@ NodesOfContainerCluster = element nodes {
attribute jvm-options { text }? &
attribute jvm-gc-options { text }? &
attribute preload { text }? &
+ attribute environment-vars { text }? &
attribute allocated-memory { text }? &
attribute cpu-socket-affinity { xsd:boolean }? &
(
@@ -230,6 +231,10 @@ NodesOfContainerCluster = element nodes {
attribute docker-image { xsd:string }?
)
|
+ element environment-variables {
+ anyElement +
+ }
+ |
element node {
attribute hostalias { xsd:NCName } &
attribute cpu-socket { xsd:positiveInteger }? &
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
index ee829607da1..15c017d86e3 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
@@ -702,6 +702,25 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
assertEquals("env1", secretStore.getGroups().get(0).environment);
}
+ @Test
+ public void honours_environment_vars() {
+ Element clusterElem = DomBuilderTest.parse(
+ "<container version='1.0'>",
+ " <nodes>",
+ " <environment-variables>",
+ " <KMP_SETTING>1</KMP_SETTING>",
+ " <KMP_AFFINITY>granularity=fine,verbose,compact,1,0</KMP_AFFINITY>",
+ " </environment-variables>",
+ " <node hostalias='mockhost'/>",
+ " </nodes>",
+ "</container>" );
+ createModel(root, clusterElem);
+ QrStartConfig.Builder qrStartBuilder = new QrStartConfig.Builder();
+ root.getConfig(qrStartBuilder, "container/container.0");
+ QrStartConfig qrStartConfig = new QrStartConfig(qrStartBuilder);
+ assertEquals("KMP_SETTING=1 KMP_AFFINITY=granularity=fine,verbose,compact,1,0 ", qrStartConfig.qrs().env());
+ }
+
private Element generateContainerElementWithRenderer(String rendererId) {
return DomBuilderTest.parse(
"<jdisc id='default' version='1.0'>",
diff --git a/container-search/src/main/resources/configdefinitions/qr-start.def b/container-search/src/main/resources/configdefinitions/qr-start.def
index 8547ad08458..30983b4bcc7 100644
--- a/container-search/src/main/resources/configdefinitions/qr-start.def
+++ b/container-search/src/main/resources/configdefinitions/qr-start.def
@@ -32,7 +32,7 @@ jvm.heapSizeAsPercentageOfPhysicalMemory int default=0 restart
jvm.availableProcessors int default=0 restart
## Extra environment variables
-qrs.env string default="YELL_MA_EURO=INXIGHT" restart
+qrs.env string default="" restart
## Set ulimit -v in start script? this is mainly a safeguard against JNI stuff leaking memory.
ulimitv string default="" restart