diff options
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 |