aboutsummaryrefslogtreecommitdiffstats
path: root/flags/src/main/java
diff options
context:
space:
mode:
authorbjormel <bjormel@yahooinc.com>2023-10-01 12:23:12 +0000
committerbjormel <bjormel@yahooinc.com>2023-10-01 12:23:12 +0000
commite9058b555d4dfea2f6c872d9a677e8678b569569 (patch)
treefa1b67c6e39712c1e0d9f308b0dd55573b43f913 /flags/src/main/java
parent0ad931fa86658904fe9212b014d810236b0e00e4 (diff)
parent16030193ec04ee41e98779a3d7ee6a6c1d0d0d6f (diff)
Merge branch 'master' into bjormel/aws-main-controller
Diffstat (limited to 'flags/src/main/java')
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java3
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java38
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java51
3 files changed, 51 insertions, 41 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java b/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java
index b16d26a04a4..bbf932ab652 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java
@@ -22,6 +22,9 @@ public class FetchVector {
* Note: If this enum is changed, you must also change {@link DimensionHelper}.
*/
public enum Dimension {
+ /** Application id from ApplicationId::toSerializedForm(TenantName, ApplicationName) on the form tenant:applicationName. */
+ APPLICATION_ID,
+
/**
* Cloud from com.yahoo.config.provision.CloudName::value, e.g. yahoo, aws, gcp.
*
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
index 2e158f0f3ef..54a3ea4f2c2 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -13,6 +13,7 @@ import java.util.Optional;
import java.util.TreeMap;
import java.util.function.Predicate;
+import static com.yahoo.vespa.flags.FetchVector.Dimension.APPLICATION_ID;
import static com.yahoo.vespa.flags.FetchVector.Dimension.INSTANCE_ID;
import static com.yahoo.vespa.flags.FetchVector.Dimension.CLOUD_ACCOUNT;
import static com.yahoo.vespa.flags.FetchVector.Dimension.CLUSTER_ID;
@@ -62,6 +63,7 @@ public class Flags {
" latency-amortized-over-requests, latency-amortized-over-time",
"Takes effect at redeployment (requires restart)",
INSTANCE_ID);
+
public static final UnboundStringFlag SUMMARY_DECODE_POLICY = defineStringFlag(
"summary-decode-policy", "eager",
List.of("baldersheim"), "2023-03-30", "2023-12-31",
@@ -311,10 +313,10 @@ public class Flags {
"randomized-endpoint-names", false, List.of("andreer"), "2023-04-26", "2023-10-14",
"Whether to use randomized endpoint names",
"Takes effect on application deployment",
- INSTANCE_ID);
+ INSTANCE_ID, APPLICATION_ID, TENANT_ID);
public static final UnboundBooleanFlag ENABLE_THE_ONE_THAT_SHOULD_NOT_BE_NAMED = defineFeatureFlag(
- "enable-the-one-that-should-not-be-named", false, List.of("hmusum"), "2023-05-08", "2023-10-01",
+ "enable-the-one-that-should-not-be-named", false, List.of("hmusum"), "2023-05-08", "2023-11-01",
"Whether to enable the one program that should not be named",
"Takes effect at next host-admin tick");
@@ -340,13 +342,13 @@ public class Flags {
public static final UnboundBooleanFlag WRITE_CONFIG_SERVER_SESSION_DATA_AS_ONE_BLOB = defineFeatureFlag(
"write-config-server-session-data-as-blob", false,
- List.of("hmusum"), "2023-07-19", "2023-10-01",
+ List.of("hmusum"), "2023-07-19", "2023-11-01",
"Whether to write config server session data in one blob or as individual paths",
"Takes effect immediately");
public static final UnboundBooleanFlag READ_CONFIG_SERVER_SESSION_DATA_AS_ONE_BLOB = defineFeatureFlag(
"read-config-server-session-data-as-blob", false,
- List.of("hmusum"), "2023-07-19", "2023-10-01",
+ List.of("hmusum"), "2023-07-19", "2023-11-01",
"Whether to read config server session data from session data blob or from individual paths",
"Takes effect immediately");
@@ -371,12 +373,6 @@ public class Flags {
"Takes effect on next host provisioning / run of host-admin",
HOSTNAME, CLOUD_ACCOUNT);
- public static final UnboundBooleanFlag WRITE_APPLICATION_DATA_AS_JSON = defineFeatureFlag(
- "write-application-data-as-json", true,
- List.of("hmusum"), "2023-08-27", "2023-10-01",
- "Whether to write application data (active session id, last deployed session id etc. ) as json",
- "Takes effect immediately");
-
public static final UnboundIntFlag MIN_EXCLUSIVE_ADVERTISED_MEMORY_GB = defineIntFlag(
"min-exclusive-advertised-memory-gb", 8,
List.of("freva"), "2023-09-08", "2023-11-01",
@@ -385,7 +381,7 @@ public class Flags {
INSTANCE_ID, CLUSTER_ID, CLUSTER_TYPE);
public static final UnboundBooleanFlag ASSIGN_RANDOMIZED_ID = defineFeatureFlag(
- "assign-randomized-id", false,
+ "assign-randomized-id", true,
List.of("mortent"), "2023-08-31", "2024-02-01",
"Whether to assign randomized id to the application",
"Takes effect immediately",
@@ -406,6 +402,26 @@ public class Flags {
"Takes effect at redeployment",
INSTANCE_ID);
+ public static final UnboundBooleanFlag DYNAMIC_HEAP_SIZE = defineFeatureFlag(
+ "dynamic-heap-size", false,
+ List.of("bjorncs"), "2023-09-21", "2024-01-15",
+ "Whether to calculate JVM heap size based on predicted Onnx model memory requirements",
+ "Takes effect at redeployment",
+ INSTANCE_ID);
+
+ public static final UnboundStringFlag UNKNOWN_CONFIG_DEFINITION = defineStringFlag(
+ "unknown-config-definition", "warn",
+ List.of("hmusum"), "2023-09-25", "2023-11-01",
+ "How to handle user config referencing unknown config definitions. Valid values are log, warn, fail",
+ "Takes effect at redeployment",
+ INSTANCE_ID);
+
+ public static final UnboundBooleanFlag LEGACY_ENDPOINTS = defineFeatureFlag(
+ "legacy-endpoints", true, List.of("mpolden", "tokle"), "2023-09-29", "2024-03-01",
+ "Whether legacy (non-anonymized) endpoints should be created in DNS",
+ "Takes effect on redeployment through controller",
+ INSTANCE_ID, APPLICATION_ID, TENANT_ID);
+
/** WARNING: public for testing: All flags should be defined in {@link Flags}. */
public static UnboundBooleanFlag defineFeatureFlag(String flagId, boolean defaultValue, List<String> owners,
String createdAt, String expiresAt, String description,
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java b/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java
index f867daac245..04beec19d73 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java
@@ -7,28 +7,30 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* @author hakonhall
*/
public class DimensionHelper {
- private static final Map<FetchVector.Dimension, List<String>> serializedDimensions = new HashMap<>();
+ private static final Map<FetchVector.Dimension, String> serializedDimensions = new HashMap<>();
static {
- serializedDimensions.put(FetchVector.Dimension.CLOUD, List.of("cloud"));
- serializedDimensions.put(FetchVector.Dimension.CLOUD_ACCOUNT, List.of("cloud-account"));
- serializedDimensions.put(FetchVector.Dimension.CLUSTER_ID, List.of("cluster-id"));
- serializedDimensions.put(FetchVector.Dimension.CLUSTER_TYPE, List.of("cluster-type"));
- serializedDimensions.put(FetchVector.Dimension.CONSOLE_USER_EMAIL, List.of("console-user-email"));
- serializedDimensions.put(FetchVector.Dimension.ENVIRONMENT, List.of("environment"));
- serializedDimensions.put(FetchVector.Dimension.HOSTNAME, List.of("hostname"));
- serializedDimensions.put(FetchVector.Dimension.INSTANCE_ID, List.of("application", "instance"));
- serializedDimensions.put(FetchVector.Dimension.NODE_TYPE, List.of("node-type"));
- serializedDimensions.put(FetchVector.Dimension.SYSTEM, List.of("system"));
- serializedDimensions.put(FetchVector.Dimension.TENANT_ID, List.of("tenant"));
- serializedDimensions.put(FetchVector.Dimension.VESPA_VERSION, List.of("vespa-version"));
- serializedDimensions.put(FetchVector.Dimension.ZONE_ID, List.of("zone"));
+ serializedDimensions.put(FetchVector.Dimension.APPLICATION_ID, "application");
+ serializedDimensions.put(FetchVector.Dimension.CLOUD, "cloud");
+ serializedDimensions.put(FetchVector.Dimension.CLOUD_ACCOUNT, "cloud-account");
+ serializedDimensions.put(FetchVector.Dimension.CLUSTER_ID, "cluster-id");
+ serializedDimensions.put(FetchVector.Dimension.CLUSTER_TYPE, "cluster-type");
+ serializedDimensions.put(FetchVector.Dimension.CONSOLE_USER_EMAIL, "console-user-email");
+ serializedDimensions.put(FetchVector.Dimension.ENVIRONMENT, "environment");
+ serializedDimensions.put(FetchVector.Dimension.HOSTNAME, "hostname");
+ serializedDimensions.put(FetchVector.Dimension.INSTANCE_ID, "instance");
+ serializedDimensions.put(FetchVector.Dimension.NODE_TYPE, "node-type");
+ serializedDimensions.put(FetchVector.Dimension.SYSTEM, "system");
+ serializedDimensions.put(FetchVector.Dimension.TENANT_ID, "tenant");
+ serializedDimensions.put(FetchVector.Dimension.VESPA_VERSION, "vespa-version");
+ serializedDimensions.put(FetchVector.Dimension.ZONE_ID, "zone");
if (serializedDimensions.size() != FetchVector.Dimension.values().length) {
throw new IllegalStateException(FetchVectorHelper.class.getName() + " is not in sync with " +
@@ -36,27 +38,16 @@ public class DimensionHelper {
}
}
- private static final Map<String, FetchVector.Dimension> deserializedDimensions = reverseMapping(serializedDimensions);
-
- private static Map<String, FetchVector.Dimension> reverseMapping(Map<FetchVector.Dimension, List<String>> mapping) {
- Map<String, FetchVector.Dimension> reverseMapping = new LinkedHashMap<>();
- mapping.forEach((dimension, serializedDimensions) -> {
- serializedDimensions.forEach(serializedDimension -> {
- if (reverseMapping.put(serializedDimension, dimension) != null) {
- throw new IllegalStateException("Duplicate serialized dimension: '" + serializedDimension + "'");
- }
- });
- });
- return Map.copyOf(reverseMapping);
- }
+ private static final Map<String, FetchVector.Dimension> deserializedDimensions = serializedDimensions.
+ entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
public static String toWire(FetchVector.Dimension dimension) {
- List<String> serializedDimension = serializedDimensions.get(dimension);
- if (serializedDimension == null || serializedDimension.isEmpty()) {
+ String serializedDimension = serializedDimensions.get(dimension);
+ if (serializedDimension == null) {
throw new IllegalArgumentException("Unsupported dimension (please add it): '" + dimension + "'");
}
- return serializedDimension.get(0);
+ return serializedDimension;
}
public static FetchVector.Dimension fromWire(String serializedDimension) {