diff options
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 |
commit | e8f8420eab675350e61260578bd10228645c51f1 (patch) | |
tree | 6d37b1f22b7ce6717b485f6c9452267fa98e0ec4 /flags | |
parent | 58a92e118482272de89bb6b9046daaaab00f42ac (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')
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); + } +} |