summaryrefslogtreecommitdiffstats
path: root/config-model-api
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-11-03 16:01:00 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-11-03 17:04:31 +0100
commit85a325e97a82e61a7d124f1fc6fb333693a43225 (patch)
treef896041f01dea7a88c793954f5fe649c15489649 /config-model-api
parentc3c0c67621ec2ad422e69159fe46698e45e2cac1 (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.java16
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/model/api/ModelContextTest.java36
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