summaryrefslogtreecommitdiffstats
path: root/flags
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2020-10-01 12:23:53 +0200
committerØyvind Grønnesby <oyving@verizonmedia.com>2020-10-01 12:23:53 +0200
commite8f8420eab675350e61260578bd10228645c51f1 (patch)
tree6d37b1f22b7ce6717b485f6c9452267fa98e0ec4 /flags
parent58a92e118482272de89bb6b9046daaaab00f42ac (diff)
Quota as BigDecimals in the controller
- Added support for BigDecimal flags - Changed internal representation of quota budget to BigDecimal - Changed flag type for TENANT_BUDGET_QUOTA to BigDecimal. Since flag is not in use this should not cause any issues.
Diffstat (limited to 'flags')
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/BigDecimalFlag.java15
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java11
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/UnboundBigDecimalFlag.java18
3 files changed, 42 insertions, 2 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/BigDecimalFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/BigDecimalFlag.java
new file mode 100644
index 00000000000..f5273719275
--- /dev/null
+++ b/flags/src/main/java/com/yahoo/vespa/flags/BigDecimalFlag.java
@@ -0,0 +1,15 @@
+// Copyright 2020 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.flags;
+
+import java.math.BigDecimal;
+
+/**
+ * @author ogronnesby
+ */
+public class BigDecimalFlag extends FlagImpl<BigDecimal, BigDecimalFlag> {
+ public BigDecimalFlag(FlagId id, BigDecimal defaultValue, FetchVector fetchVector, FlagSerializer<BigDecimal> serializer, FlagSource source) {
+ super(id, defaultValue, fetchVector, serializer, source, BigDecimalFlag::new);
+ }
+
+ public BigDecimal value() { return boxedValue(); }
+}
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 291011f91d9..ed65dde98d4 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -5,6 +5,7 @@ import com.yahoo.component.Vtag;
import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.flags.custom.HostCapacity;
+import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
import java.util.TreeMap;
@@ -330,8 +331,8 @@ public class Flags {
APPLICATION_ID
);
- public static final UnboundIntFlag TENANT_BUDGET_QUOTA = defineIntFlag(
- "tenant-budget-quota", 5,
+ public static final UnboundBigDecimalFlag TENANT_BUDGET_QUOTA = defineBigDecimalFlag(
+ "tenant-budget-quota", new BigDecimal("5.00"),
"The budget in $/hr a tenant is allowed spend per instance, as calculated by NodeResources",
"Only takes effect on next deployment, if set to a value other than the default for flag!",
APPLICATION_ID
@@ -447,6 +448,12 @@ public class Flags {
}
/** WARNING: public for testing: All flags should be defined in {@link Flags}. */
+ public static UnboundBigDecimalFlag defineBigDecimalFlag(String flagId, BigDecimal defaultValue, String description,
+ String modificationEffect, FetchVector.Dimension... dimensions) {
+ return define(UnboundBigDecimalFlag::new, flagId, defaultValue, description, modificationEffect, dimensions);
+ }
+
+ /** WARNING: public for testing: All flags should be defined in {@link Flags}. */
public static <T> UnboundJacksonFlag<T> defineJacksonFlag(String flagId, T defaultValue, Class<T> jacksonClass, String description,
String modificationEffect, FetchVector.Dimension... dimensions) {
return define((id2, defaultValue2, vector2) -> new UnboundJacksonFlag<>(id2, defaultValue2, vector2, jacksonClass),
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/UnboundBigDecimalFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/UnboundBigDecimalFlag.java
new file mode 100644
index 00000000000..0b26046c777
--- /dev/null
+++ b/flags/src/main/java/com/yahoo/vespa/flags/UnboundBigDecimalFlag.java
@@ -0,0 +1,18 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.flags;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.DecimalNode;
+
+import java.math.BigDecimal;
+
+/**
+ * @author ogronnesby
+ */
+public class UnboundBigDecimalFlag extends UnboundFlagImpl<BigDecimal, BigDecimalFlag, UnboundBigDecimalFlag> {
+ public UnboundBigDecimalFlag(FlagId id, BigDecimal defaultValue, FetchVector defaultFetchVector) {
+ super(id, defaultValue, defaultFetchVector,
+ new SimpleFlagSerializer<>(DecimalNode::valueOf, JsonNode::isBigDecimal, JsonNode::decimalValue),
+ UnboundBigDecimalFlag::new, BigDecimalFlag::new);
+ }
+}