diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-11-03 16:01:00 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-11-03 17:04:31 +0100 |
commit | 85a325e97a82e61a7d124f1fc6fb333693a43225 (patch) | |
tree | f896041f01dea7a88c793954f5fe649c15489649 /config-model-api | |
parent | c3c0c67621ec2ad422e69159fe46698e45e2cac1 (diff) |
Add a separate construct in ModelContext.Properties for feature flags
Diffstat (limited to 'config-model-api')
-rw-r--r-- | config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java | 16 | ||||
-rw-r--r-- | config-model-api/src/test/java/com/yahoo/config/model/api/ModelContextTest.java | 36 |
2 files changed, 52 insertions, 0 deletions
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 2e78da0dc91..ab6a6660ebe 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 @@ -12,6 +12,10 @@ import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.Zone; import java.io.File; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.net.URI; import java.time.Duration; import java.util.List; @@ -45,8 +49,13 @@ public interface ModelContext { /** The Vespa version we want nodes to become */ Version wantedNodeVespaVersion(); + interface FeatureFlags { + + } + /** Warning: As elsewhere in this package, do not make backwards incompatible changes that will break old config models! */ interface Properties { + FeatureFlags featureFlags(); boolean multitenant(); ApplicationId applicationId(); List<ConfigServerSpec> configServerSpecs(); @@ -135,4 +144,11 @@ public interface ModelContext { } + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @interface ModelFeatureFlag { + String owner(); + String comment() default ""; + } + } diff --git a/config-model-api/src/test/java/com/yahoo/config/model/api/ModelContextTest.java b/config-model-api/src/test/java/com/yahoo/config/model/api/ModelContextTest.java new file mode 100644 index 00000000000..68b6b9f814f --- /dev/null +++ b/config-model-api/src/test/java/com/yahoo/config/model/api/ModelContextTest.java @@ -0,0 +1,36 @@ +// 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 org.junit.Test; + +import java.lang.reflect.Method; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +/** + * @author bjorncs + */ +public class ModelContextTest { + + @Test + public void verify_all_feature_flag_methods_have_annotation() { + for (Method method : ModelContext.FeatureFlags.class.getDeclaredMethods()) { + assertNotNull( + String.format( + "Method '%s' is not annotated with '%s'", + method.getName(), ModelContext.ModelFeatureFlag.class.getSimpleName()), + method.getDeclaredAnnotation(ModelContext.ModelFeatureFlag.class)); + } + } + + @Test + public void verify_all_feature_flag_methods_have_default_implementation() { + for (Method method : ModelContext.FeatureFlags.class.getDeclaredMethods()) { + assertTrue( + String.format("Method '%s' has no default implementation", method.getName()), + method.isDefault()); + } + } + +}
\ No newline at end of file |