summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-11-01 23:46:29 +0100
committerjonmv <venstad@gmail.com>2022-11-01 23:46:29 +0100
commit47eca27048399c3b1ccb317f0a66aef4ee43651c (patch)
tree96c1640104180e127d57407f0f3922282687d19b /config
parent2619a4060c8b0e5cbb653942762313394ec6c59e (diff)
Move file handling down into FileSource
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/DirSource.java4
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/FileSource.java18
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java9
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/FileConfigSubscription.java21
-rw-r--r--config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java8
5 files changed, 36 insertions, 24 deletions
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<String> 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<T extends ConfigInstance> {
}
private static <T extends ConfigInstance> ConfigSubscription<T> getFileSub(ConfigKey<T> 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<T extends ConfigInstance> {
}
private static <T extends ConfigInstance> ConfigSubscription<T> getDirFileSub(ConfigKey<T> 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<T extends ConfigInstance> extends ConfigSubscription<T> {
- final File file;
+ final FileSource file;
long ts;
- FileConfigSubscription(ConfigKey<T> key, File f) {
+ FileConfigSubscription(ConfigKey<T> 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<T extends ConfigInstance> 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<T extends ConfigInstance> 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);
diff --git a/config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java b/config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java
index e37a5d7b36b..aa948f2f0ae 100644
--- a/config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java
@@ -2,6 +2,7 @@
package com.yahoo.config.subscription.impl;
import com.yahoo.config.subscription.DirSource;
+import com.yahoo.config.subscription.FileSource;
import com.yahoo.foo.SimpletypesConfig;
import com.yahoo.foo.TestReferenceConfig;
import com.yahoo.vespa.config.ConfigKey;
@@ -42,7 +43,7 @@ public class FileConfigSubscriptionTest {
writeConfig("intval", "23");
ConfigSubscription<SimpletypesConfig> sub = new FileConfigSubscription<>(
new ConfigKey<>(SimpletypesConfig.class, ""),
- TEST_TYPES_FILE);
+ new FileSource(TEST_TYPES_FILE));
assertTrue(sub.nextConfig(1000));
assertEquals(23, sub.getConfigState().getConfig().intval());
Thread.sleep(1000);
@@ -56,7 +57,7 @@ public class FileConfigSubscriptionTest {
writeConfig("intval", "23");
ConfigSubscription<SimpletypesConfig> sub = new FileConfigSubscription<>(
new ConfigKey<>(SimpletypesConfig.class, ""),
- TEST_TYPES_FILE);
+ new FileSource(TEST_TYPES_FILE));
assertTrue(sub.nextConfig(1000));
assertEquals(23, sub.getConfigState().getConfig().intval());
writeConfig("intval", "33");
@@ -110,9 +111,10 @@ public class FileConfigSubscriptionTest {
writeConfig("intval", "23");
ConfigSubscription<SimpletypesConfig> sub = new FileConfigSubscription<>(
new ConfigKey<>(SimpletypesConfig.class, ""),
- TEST_TYPES_FILE);
+ new FileSource(TEST_TYPES_FILE));
sub.reload(1);
Files.delete(TEST_TYPES_FILE.toPath()); // delete file so the below statement throws exception
sub.nextConfig(0);
}
+
}