From 47eca27048399c3b1ccb317f0a66aef4ee43651c Mon Sep 17 00:00:00 2001 From: jonmv Date: Tue, 1 Nov 2022 23:46:29 +0100 Subject: Move file handling down into FileSource --- .../com/yahoo/config/subscription/DirSource.java | 4 ++-- .../com/yahoo/config/subscription/FileSource.java | 18 +++++++++++++++--- .../subscription/impl/ConfigSubscription.java | 9 +++++---- .../subscription/impl/FileConfigSubscription.java | 21 +++++++++------------ 4 files changed, 31 insertions(+), 21 deletions(-) (limited to 'config/src/main/java') diff --git a/config/src/main/java/com/yahoo/config/subscription/DirSource.java b/config/src/main/java/com/yahoo/config/subscription/DirSource.java index 5dfbd5f0bc4..87bf51af26f 100644 --- a/config/src/main/java/com/yahoo/config/subscription/DirSource.java +++ b/config/src/main/java/com/yahoo/config/subscription/DirSource.java @@ -15,8 +15,8 @@ public class DirSource implements ConfigSource { this.dir = dir; } - public File getDir() { - return dir; + public FileSource getFile(String name) { + return new FileSource(new File(dir, name)); } } diff --git a/config/src/main/java/com/yahoo/config/subscription/FileSource.java b/config/src/main/java/com/yahoo/config/subscription/FileSource.java index 2178c64cca3..9d3c6041f4b 100644 --- a/config/src/main/java/com/yahoo/config/subscription/FileSource.java +++ b/config/src/main/java/com/yahoo/config/subscription/FileSource.java @@ -2,23 +2,35 @@ package com.yahoo.config.subscription; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; /** * Source specifying config from one local file * * @author Vegard Havdal + * @author jonmv */ public class FileSource implements ConfigSource { private final File file; public FileSource(File file) { - if ( ! file.isFile()) throw new IllegalArgumentException("Not an ordinary file: "+file); this.file = file; + validateFile(); } - public File getFile() { - return file; + public long getLastModified() { + return file.lastModified(); + } + + public List getContent() throws IOException { + return Files.readAllLines(file.toPath()); + } + + public void validateFile() { + if ( ! file.isFile()) throw new IllegalArgumentException("Not a file: " + file); } } diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java index c1a6740b6da..2c4e3d40250 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java @@ -142,8 +142,8 @@ public abstract class ConfigSubscription { } private static ConfigSubscription getFileSub(ConfigKey key, ConfigSource source) { - File file = source instanceof FileSource fileSource ? fileSource.getFile() - : new File(key.getConfigId().replace("file:", "")); + FileSource file = source instanceof FileSource fileSource ? fileSource + : new FileSource(new File(key.getConfigId().replace("file:", ""))); return new FileConfigSubscription<>(key, file); } @@ -155,8 +155,9 @@ public abstract class ConfigSubscription { } private static ConfigSubscription getDirFileSub(ConfigKey key, ConfigSource source) { - File dir = source instanceof DirSource dirSource ? dirSource.getDir() : new File(key.getConfigId().replace("dir:", "")); - return new FileConfigSubscription<>(key, new File(dir, getConfigFilename(key))); + DirSource dir = source instanceof DirSource dirSource ? dirSource + : new DirSource(new File(key.getConfigId().replace("dir:", ""))); + return new FileConfigSubscription<>(key, dir.getFile(getConfigFilename(key))); } @Override diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/FileConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/FileConfigSubscription.java index 47ac0dfbf85..216657a6db3 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/FileConfigSubscription.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/FileConfigSubscription.java @@ -5,14 +5,11 @@ import com.yahoo.config.ConfigInstance; import com.yahoo.config.ConfigurationRuntimeException; import com.yahoo.config.subscription.CfgConfigPayloadBuilder; import com.yahoo.config.subscription.ConfigInterruptedException; -import com.yahoo.io.IOUtils; +import com.yahoo.config.subscription.FileSource; import com.yahoo.vespa.config.ConfigKey; import com.yahoo.vespa.config.ConfigPayload; -import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.util.Arrays; import static java.util.logging.Level.FINE; @@ -23,19 +20,19 @@ import static java.util.logging.Level.FINE; */ public class FileConfigSubscription extends ConfigSubscription { - final File file; + final FileSource file; long ts; - FileConfigSubscription(ConfigKey key, File f) { + FileConfigSubscription(ConfigKey key, FileSource file) { super(key); + file.validateFile(); setGeneration(0L); - file = f; - if ( ! file.isFile()) throw new IllegalArgumentException("Not a file: " + file); + this.file = file; } @Override public boolean nextConfig(long timeout) { - if ( ! file.isFile()) throw new IllegalArgumentException("Not a file: " + file); + file.validateFile(); if (checkReloaded()) { log.log(FINE, () -> "User forced config reload at " + System.currentTimeMillis()); // User forced reload @@ -45,7 +42,7 @@ public class FileConfigSubscription extends ConfigSubs log.log(FINE, () -> "Config: " + configState.getConfig().toString()); return true; } - if (file.lastModified() != ts) { + if (file.getLastModified() != ts) { setConfigIncGen(updateConfig()); return true; } @@ -59,9 +56,9 @@ public class FileConfigSubscription extends ConfigSubs } private T updateConfig() { - ts = file.lastModified(); + ts = file.getLastModified(); try { - ConfigPayload payload = new CfgConfigPayloadBuilder().deserialize(Files.readAllLines(file.toPath())); + ConfigPayload payload = new CfgConfigPayloadBuilder().deserialize(file.getContent()); return payload.toInstance(configClass, key.getConfigId()); } catch (IOException e) { throw new ConfigurationRuntimeException(e); -- cgit v1.2.3