summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java6
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java46
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java3
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java3
4 files changed, 39 insertions, 19 deletions
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 64112a29a59..9a4f1faed03 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -29,6 +29,12 @@ public class Flags {
"Takes effect only at bootstrap of config server/controller",
HOSTNAME);
+ public static final UnboundIntFlag DROP_CACHES = defineIntFlag("drop-caches", 3,
+ "The int value to write into /proc/sys/vm/drop_caches for each tick. " +
+ "1 is page cache, 2 is dentries inodes, 3 is both page cache and dentries inodes, etc.",
+ "Takes effect on next tick.",
+ HOSTNAME);
+
public static final UnboundBooleanFlag ENABLE_CROWDSTRIKE = defineFeatureFlag(
"enable-crowdstrike", true,
"Whether to enable CrowdStrike.", "Takes effect on next host admin tick",
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java b/flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java
index 5e2afe39dd8..5ed1859b89b 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java
@@ -1,11 +1,6 @@
// Copyright 2018 Yahoo Holdings. 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.DoubleNode;
-import com.yahoo.vespa.flags.json.FlagData;
-import com.yahoo.vespa.flags.json.Rule;
-
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
@@ -13,29 +8,50 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* Basic in-memory flag source useful for testing
*
+ * Creates an empty flag source that will make all flags return their default values (from {@code value()}).
+ * The with* methods can be used to set a different return value.
+ *
* @author freva
*/
public class InMemoryFlagSource implements FlagSource {
- private final Map<FlagId, FlagData> flagDataById = new ConcurrentHashMap<>();
+ private final Map<FlagId, RawFlag> rawFlagsById = new ConcurrentHashMap<>();
- public InMemoryFlagSource withFlag(FlagId flagId) {
- flagDataById.put(flagId, new FlagData(flagId));
- return this;
+ public InMemoryFlagSource withBooleanFlag(FlagId flagId, boolean value) {
+ return withRawFlag(flagId, new UnboundBooleanFlag(flagId, value).serializer().serialize(value));
+ }
+
+ public InMemoryFlagSource withStringFlag(FlagId flagId, String value) {
+ return withRawFlag(flagId, new UnboundStringFlag(flagId, value).serializer().serialize(value));
+ }
+
+ public InMemoryFlagSource withIntFlag(FlagId flagId, int value) {
+ return withRawFlag(flagId, new UnboundIntFlag(flagId, value).serializer().serialize(value));
+ }
+
+ public InMemoryFlagSource withLongFlag(FlagId flagId, long value) {
+ return withRawFlag(flagId, new UnboundLongFlag(flagId, value).serializer().serialize(value));
}
public InMemoryFlagSource withDoubleFlag(FlagId flagId, double value) {
- return withRawFlag(flagId, new DoubleNode(value));
+ return withRawFlag(flagId, new UnboundDoubleFlag(flagId, value).serializer().serialize(value));
+ }
+
+ public <T> InMemoryFlagSource withJacksonFlag(FlagId flagId, T value, Class<T> jacksonClass) {
+ return withRawFlag(flagId, new UnboundJacksonFlag<>(flagId, value, jacksonClass).serializer().serialize(value));
+ }
+
+ public InMemoryFlagSource removeFlag(FlagId flagId) {
+ rawFlagsById.remove(flagId);
+ return this;
}
- private InMemoryFlagSource withRawFlag(FlagId flagId, JsonNode rawFlag) {
- Rule rule = new Rule(Optional.of(JsonNodeRawFlag.fromJsonNode(rawFlag)));
- flagDataById.put(flagId, new FlagData(flagId, new FetchVector(), rule));
+ private InMemoryFlagSource withRawFlag(FlagId flagId, RawFlag rawFlag) {
+ rawFlagsById.put(flagId, rawFlag);
return this;
}
@Override
public Optional<RawFlag> fetch(FlagId id, FetchVector vector) {
- return Optional.ofNullable(flagDataById.get(id))
- .flatMap(flagData -> flagData.resolve(vector));
+ return Optional.ofNullable(rawFlagsById.get(id));
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java
index 7ac74b190ad..88cc833f1f8 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java
@@ -6,7 +6,6 @@ import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
import com.yahoo.metrics.simple.MetricReceiver;
import com.yahoo.system.ProcessExecuter;
-import com.yahoo.vespa.flags.Flags;
import com.yahoo.vespa.flags.InMemoryFlagSource;
import com.yahoo.vespa.hosted.dockerapi.Docker;
import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
@@ -60,7 +59,7 @@ public class DockerTester implements AutoCloseable {
final Orchestrator orchestrator = mock(Orchestrator.class);
final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class);
final InOrder inOrder = Mockito.inOrder(docker, nodeRepository, orchestrator, storageMaintainer);
- final InMemoryFlagSource flagSource = new InMemoryFlagSource().withFlag(Flags.CONTAINER_CPU_CAP.id());
+ final InMemoryFlagSource flagSource = new InMemoryFlagSource();
final NodeAdminStateUpdater nodeAdminStateUpdater;
final NodeAdminImpl nodeAdmin;
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
index 1b116b304b2..d9255daf00b 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
@@ -82,8 +82,7 @@ public class NodeAgentImplTest {
private final ContainerStats emptyContainerStats = new ContainerStats(Collections.emptyMap(),
Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap());
private final AthenzCredentialsMaintainer athenzCredentialsMaintainer = mock(AthenzCredentialsMaintainer.class);
- private final InMemoryFlagSource flagSource = new InMemoryFlagSource()
- .withFlag(Flags.CONTAINER_CPU_CAP.id());
+ private final InMemoryFlagSource flagSource = new InMemoryFlagSource();
@Test