diff options
author | HÃ¥kon Hallingstad <hakon@oath.com> | 2019-01-26 11:06:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-26 11:06:34 +0100 |
commit | 8e700d0078e1015756a23781efc461913dc87419 (patch) | |
tree | a310e85085feaf5624f826215af766dd4e704b42 /configserver-flags/src/main | |
parent | 5d126afb33df13888c58e5b43a79c893c23fb65b (diff) | |
parent | 5b51470fdf2eb245d509984047dc84ef3a7fae83 (diff) |
Merge pull request #8244 from vespa-engine/hakonhall/read-override-file-flags-from-file-only-once-for-config-server
Read override file flags from file only once for config server
Diffstat (limited to 'configserver-flags/src/main')
2 files changed, 45 insertions, 2 deletions
diff --git a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java index d452d8a4aad..b1ffc05e70c 100644 --- a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java +++ b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java @@ -2,16 +2,23 @@ package com.yahoo.vespa.configserver.flags; import com.google.inject.Inject; +import com.yahoo.vespa.configserver.flags.db.BootstrapFlagSource; import com.yahoo.vespa.configserver.flags.db.ZooKeeperFlagSource; -import com.yahoo.vespa.flags.FileFlagSource; import com.yahoo.vespa.flags.OrderedFlagSource; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; + /** * @author hakonhall */ public class ConfigServerFlagSource extends OrderedFlagSource { @Inject public ConfigServerFlagSource(FlagsDb flagsDb) { - super(new FileFlagSource(), new ZooKeeperFlagSource(flagsDb)); + this(FileSystems.getDefault(), flagsDb); + } + + ConfigServerFlagSource(FileSystem fileSystem, FlagsDb flagsDb) { + super(new BootstrapFlagSource(fileSystem), new ZooKeeperFlagSource(flagsDb)); } } diff --git a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/BootstrapFlagSource.java b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/BootstrapFlagSource.java new file mode 100644 index 00000000000..0c467a0e7c8 --- /dev/null +++ b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/BootstrapFlagSource.java @@ -0,0 +1,36 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.configserver.flags.db; + +import com.yahoo.vespa.flags.FetchVector; +import com.yahoo.vespa.flags.FlagId; +import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.RawFlag; +import com.yahoo.vespa.flags.file.FlagDbFile; +import com.yahoo.vespa.flags.json.FlagData; + +import java.nio.file.FileSystem; +import java.util.Map; +import java.util.Optional; + +/** + * A flag source that can be used in emergencies, see test for path and format of file. + * + * <p>Use file if the ZooKeeper flag makes it difficult to start the config server, would make irreparable damage, + * or is impossible to change through ZooKeeper due to a bug. This flag source should take precedence over ZooKeeper + * whenever it has specified the value for a flag. + * + * @author hakonhall + */ +public class BootstrapFlagSource implements FlagSource { + private final Map<FlagId, FlagData> flagData; + + public BootstrapFlagSource(FileSystem fileSystem) { + // The flags on disk is read once now and never again. + this.flagData = new FlagDbFile(fileSystem).read(); + } + + @Override + public Optional<RawFlag> fetch(FlagId id, FetchVector vector) { + return Optional.ofNullable(flagData.get(id)).flatMap(data -> data.resolve(vector)); + } +} |