diff options
author | jonmv <venstad@gmail.com> | 2022-11-01 22:11:07 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-11-01 22:11:07 +0100 |
commit | 116afffc4920705f8d0ce2b016700216a2a0cbb3 (patch) | |
tree | 59219dc968c7c6addbed5375e062d835a34a6f0d | |
parent | 4984373de8e6b5b4b6d62d13e7efbaf0f025b2c5 (diff) |
No real changes
16 files changed, 57 insertions, 94 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/ConfigSet.java b/config/src/main/java/com/yahoo/config/subscription/ConfigSet.java index 1b86db6b299..0fb0462e84e 100644 --- a/config/src/main/java/com/yahoo/config/subscription/ConfigSet.java +++ b/config/src/main/java/com/yahoo/config/subscription/ConfigSet.java @@ -23,7 +23,6 @@ public class ConfigSet implements ConfigSource { @SuppressWarnings({"unchecked", "rawtypes"}) public void addBuilder(String configId, ConfigInstance.Builder builder) { Class<?> configClass = builder.getClass().getDeclaringClass(); - //System.out.println("Declaring class for builder " + builder + " is " + configClass); ConfigKey<?> key = new ConfigKey(configClass, configId); configs.put(key, builder); } @@ -56,4 +55,5 @@ public class ConfigSet implements ConfigSource { } return sb.toString(); } + } diff --git a/config/src/main/java/com/yahoo/config/subscription/ConfigSourceSet.java b/config/src/main/java/com/yahoo/config/subscription/ConfigSourceSet.java index 81aeda52b54..597f83a605c 100755 --- a/config/src/main/java/com/yahoo/config/subscription/ConfigSourceSet.java +++ b/config/src/main/java/com/yahoo/config/subscription/ConfigSourceSet.java @@ -58,7 +58,7 @@ public class ConfigSourceSet implements ConfigSource { * @param address Connection endpoint on the format "tcp/host:port". */ public ConfigSourceSet(String address) { - this(new String[] {address}); + this(new String[] { address }); } /** diff --git a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java index 5d5ad1f1edc..e2b53879d92 100644 --- a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java +++ b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java @@ -275,7 +275,7 @@ public class ConfigSubscriber implements AutoCloseable { ConfigSubscription<? extends ConfigInstance> subscription = h.subscription(); log.log(Level.FINEST, () -> "Calling nextConfig for " + subscription.getKey()); if ( ! subscription.nextConfig(timeLeftMillis)) { - // This subscriber has no new state and we know it has exhausted all time + // This subscriber has no new state, and we know it has exhausted the timeout log.log(Level.FINEST, () -> "No new config for " + subscription.getKey()); return false; } @@ -407,15 +407,6 @@ public class ConfigSubscriber implements AutoCloseable { } } - /** - * The source used by this subscriber. - * - * @return the {@link ConfigSource} used by this subscriber - */ - public ConfigSource getSource() { - return source; - } - public boolean isClosed() { synchronized (monitor) { return state == State.CLOSED; diff --git a/config/src/main/java/com/yahoo/config/subscription/ConfigURI.java b/config/src/main/java/com/yahoo/config/subscription/ConfigURI.java index f0257457902..aa8a8c4a4c2 100644 --- a/config/src/main/java/com/yahoo/config/subscription/ConfigURI.java +++ b/config/src/main/java/com/yahoo/config/subscription/ConfigURI.java @@ -12,8 +12,8 @@ import java.io.File; */ public class ConfigURI { - private String configId; - private ConfigSource source; + private final String configId; + private final ConfigSource source; private ConfigURI(String configId, ConfigSource source) { this.configId = configId; 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 fbd65ccf597..9172048fe7b 100644 --- a/config/src/main/java/com/yahoo/config/subscription/DirSource.java +++ b/config/src/main/java/com/yahoo/config/subscription/DirSource.java @@ -11,7 +11,7 @@ public class DirSource implements ConfigSource { private final File dir; public DirSource(File dir) { - if (!dir.isDirectory()) throw new IllegalArgumentException("Not a directory: "+dir); + if (!dir.isDirectory()) throw new IllegalArgumentException("Not a directory: " + dir); this.dir = dir; } diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java index 68f1dc2df17..15c6ce2441e 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java @@ -18,11 +18,10 @@ public class ConfigSetSubscription<T extends ConfigInstance> extends ConfigSubsc private final ConfigSet set; private final ConfigKey<T> subKey; - ConfigSetSubscription(ConfigKey<T> key, ConfigSource cset) { + ConfigSetSubscription(ConfigKey<T> key, ConfigSet cset) { super(key); - if (!(cset instanceof ConfigSet)) throw new IllegalArgumentException("Source is not a ConfigSet: " + cset); - this.set = (ConfigSet) cset; - subKey = new ConfigKey<>(configClass, key.getConfigId()); + this.set = cset; + this.subKey = new ConfigKey<>(configClass, key.getConfigId()); if (!set.contains(subKey)) { throw new IllegalArgumentException("The given ConfigSet " + set + " does not contain a config for " + subKey); } 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 5d720a74b15..2c5899df461 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 @@ -121,10 +121,9 @@ public abstract class ConfigSubscription<T extends ConfigInstance> { if (source instanceof FileSource || configId.startsWith("file:")) return getFileSub(key, source); if (source instanceof DirSource || configId.startsWith("dir:")) return getDirFileSub(key, source); if (source instanceof JarSource || configId.startsWith("jar:")) return getJarSub(key, source); - if (source instanceof ConfigSet) return new ConfigSetSubscription<>(key, source); - if (source instanceof ConfigSourceSet) { - JRTConfigRequester requester = requesters.getRequester((ConfigSourceSet) source, timingValues); - return new JRTConfigSubscription<>(key, requester, timingValues); + if (source instanceof ConfigSet cset) return new ConfigSetSubscription<>(key, cset); + if (source instanceof ConfigSourceSet csset) { + return new JRTConfigSubscription<>(key, requesters.getRequester(csset, timingValues), timingValues); } throw new IllegalArgumentException("Unknown source type: " + source); } @@ -132,21 +131,19 @@ public abstract class ConfigSubscription<T extends ConfigInstance> { private static <T extends ConfigInstance> JarConfigSubscription<T> getJarSub(ConfigKey<T> key, ConfigSource source) { String jarName; String path = "config/"; - if (source instanceof JarSource) { - JarSource js = (JarSource) source; + if (source instanceof JarSource js) { jarName = js.getJarFile().getName(); if (js.getPath() != null) path = js.getPath(); } else { - jarName = key.getConfigId().replace("jar:", "").replaceFirst("\\!/.*", ""); - if (key.getConfigId().contains("!/")) path = key.getConfigId().replaceFirst(".*\\!/", ""); + jarName = key.getConfigId().replace("jar:", "").replaceFirst("!/.*", ""); + if (key.getConfigId().contains("!/")) path = key.getConfigId().replaceFirst(".*!/", ""); } return new JarConfigSubscription<>(key, jarName, path); } private static <T extends ConfigInstance> ConfigSubscription<T> getFileSub(ConfigKey<T> key, ConfigSource source) { - File file = ((source instanceof FileSource)) - ? ((FileSource) source).getFile() - : new File(key.getConfigId().replace("file:", "")); + File file = source instanceof FileSource fileSource ? fileSource.getFile() + : new File(key.getConfigId().replace("file:", "")); return new FileConfigSubscription<>(key, file); } @@ -158,17 +155,8 @@ public abstract class ConfigSubscription<T extends ConfigInstance> { } private static <T extends ConfigInstance> ConfigSubscription<T> getDirFileSub(ConfigKey<T> key, ConfigSource source) { - String dir = key.getConfigId().replace("dir:", ""); - if (source instanceof DirSource) { - dir = ((DirSource) source).getDir().toString(); - } - if (!dir.endsWith(File.separator)) dir = dir + File.separator; - String name = getConfigFilename(key); - File file = new File(dir + name); - if (!file.exists()) { - throw new IllegalArgumentException("Could not find a config file for '" + key.getName() + "' in '" + dir + "'"); - } - return new FileConfigSubscription<>(key, file); + File dir = source instanceof DirSource dirSource ? dirSource.getDir() : new File(key.getConfigId().replace("dir:", "")); + return new FileConfigSubscription<>(key, new File(dir, getConfigFilename(key))); } @SuppressWarnings("unchecked") 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 5311b91c31f..47ac0dfbf85 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 @@ -11,6 +11,7 @@ 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; @@ -29,13 +30,12 @@ public class FileConfigSubscription<T extends ConfigInstance> extends ConfigSubs super(key); setGeneration(0L); file = f; - if (!file.exists() && !file.isFile()) - throw new IllegalArgumentException("Not a file: " + file); + if ( ! file.isFile()) throw new IllegalArgumentException("Not a file: " + file); } @Override public boolean nextConfig(long timeout) { - if (!file.exists() && !file.isFile()) throw new IllegalArgumentException("Not a file: " + file); + if ( ! file.isFile()) throw new IllegalArgumentException("Not a file: " + file); if (checkReloaded()) { log.log(FINE, () -> "User forced config reload at " + System.currentTimeMillis()); // User forced reload @@ -61,7 +61,7 @@ public class FileConfigSubscription<T extends ConfigInstance> extends ConfigSubs private T updateConfig() { ts = file.lastModified(); try { - ConfigPayload payload = new CfgConfigPayloadBuilder().deserialize(Arrays.asList(IOUtils.readFile(file).split("\n"))); + ConfigPayload payload = new CfgConfigPayloadBuilder().deserialize(Files.readAllLines(file.toPath())); return payload.toInstance(configClass, key.getConfigId()); } catch (IOException e) { throw new ConfigurationRuntimeException(e); diff --git a/config/src/main/java/com/yahoo/config/subscription/package-info.java b/config/src/main/java/com/yahoo/config/subscription/package-info.java index bda7649d184..58a47fa4249 100644 --- a/config/src/main/java/com/yahoo/config/subscription/package-info.java +++ b/config/src/main/java/com/yahoo/config/subscription/package-info.java @@ -1,8 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +/** Classes for subscribing to Vespa config. */ @ExportPackage -/** - * Classes for subscribing to Vespa config. - */ package com.yahoo.config.subscription; import com.yahoo.osgi.annotation.ExportPackage; diff --git a/container-core/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java b/container-core/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java index 942555e391d..2bf33888569 100644 --- a/container-core/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java +++ b/container-core/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java @@ -42,11 +42,6 @@ public class ConfigRetrieverTest { dirConfigSource = new DirConfigSource(tmpDir, "ConfigRetrieverTest-"); } - @AfterEach - public void cleanup() { - dirConfigSource.cleanup(); - } - @Test void require_that_bootstrap_configs_come_first() { writeConfigs(); @@ -54,6 +49,7 @@ public class ConfigRetrieverTest { ConfigSnapshot bootstrapConfigs = retriever.getConfigs(Collections.emptySet(), 0, true); assertTrue(bootstrapConfigs instanceof BootstrapConfigs); + retriever.shutdown(); } @Test @@ -71,12 +67,12 @@ public class ConfigRetrieverTest { } else { fail("ComponentsConfigs has unexpected type: " + componentsConfigs); } + retriever.shutdown(); } @Disabled @SuppressWarnings("unused") public void require_exception_upon_modified_components_keys_without_bootstrap() { - writeConfigs(); ConfigRetriever retriever = createConfigRetriever(); ConfigKey<? extends ConfigInstance> testConfigKey = new ConfigKey<>(TestConfig.class, dirConfigSource.configId()); @@ -99,6 +95,7 @@ public class ConfigRetrieverTest { ConfigRetriever retriever = createConfigRetriever(); assertTrue(retriever.getConfigs(Collections.emptySet(), 0, true) instanceof BootstrapConfigs); assertTrue(retriever.getConfigs(Collections.emptySet(), 0, true) instanceof ComponentsConfigs); + retriever.shutdown(); } public void writeConfigs() { diff --git a/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java b/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java index c0d691c8a5a..6d95ba9c344 100644 --- a/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java +++ b/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java @@ -112,10 +112,8 @@ public class ContainerTest extends ContainerTestBase { // bundle-2 is installed, bundle-1 has been uninstalled assertEquals(1, osgi.getBundles().length); assertEquals("bundle-2", osgi.getBundles()[0].getSymbolicName()); - } - //@Test TODO - public void deconstructor_is_given_guice_components() { + container.shutdownConfigRetriever(); } @Test @@ -131,9 +129,11 @@ public class ContainerTest extends ContainerTestBase { container.reloadConfig(2); getNewComponentGraph(container, oldGraph); assertTrue(componentToDestruct.deconstructed); + + container.shutdownConfigRetriever(); } - @Disabled // because logAndDie is impossible(?) to verify programmatically + @Disabled("because logAndDie is impossible(?) to verify programmatically") @Test void manually_verify_what_happens_when_first_graph_contains_component_that_throws_exception_in_ctor() { writeBootstrapConfigs("thrower", ComponentThrowingExceptionInConstructor.class); @@ -144,6 +144,8 @@ public class ContainerTest extends ContainerTestBase { } catch (Throwable t) { fail("Expected to log and die"); } + + container.shutdownConfigRetriever(); } // Failure in component construction phase @@ -172,6 +174,8 @@ public class ContainerTest extends ContainerTestBase { assertEquals(3, currentGraph.generation()); assertSame(simpleComponent, currentGraph.getInstance(SimpleComponent.class)); assertNotNull(currentGraph.getInstance(ComponentTakingConfig.class)); + + container.shutdownConfigRetriever(); } @Test @@ -195,6 +199,8 @@ public class ContainerTest extends ContainerTestBase { // bundle-1 is kept, bundle-2 has been uninstalled assertEquals(1, osgi.getBundles().length); assertEquals("bundle-1", osgi.getBundles()[0].getSymbolicName()); + + container.shutdownConfigRetriever(); } // Failure in graph creation phase @@ -213,6 +219,8 @@ public class ContainerTest extends ContainerTestBase { container.reloadConfig(2); assertNewComponentGraphFails(container, currentGraph, IllegalArgumentException.class); assertEquals(1, currentGraph.generation()); + + container.shutdownConfigRetriever(); } @Test @@ -238,6 +246,8 @@ public class ContainerTest extends ContainerTestBase { // bundle-1 is kept, bundle-2 has been uninstalled assertEquals(1, osgi.getBundles().length); assertEquals("bundle-1", osgi.getBundles()[0].getSymbolicName()); + + container.shutdownConfigRetriever(); } private void assertNewComponentGraphFails(Container container, ComponentGraph currentGraph, Class<? extends RuntimeException> exception) { @@ -261,7 +271,7 @@ public class ContainerTest extends ContainerTestBase { container.reloadConfig(2); assertThrows(IllegalArgumentException.class, - () -> getNewComponentGraph(container, currentGraph)); + () -> getNewComponentGraph(container, currentGraph)); ExecutorService exec = Executors.newFixedThreadPool(1); Future<ComponentGraph> newGraph = exec.submit(() -> getNewComponentGraph(container, currentGraph)); @@ -277,10 +287,12 @@ public class ContainerTest extends ContainerTestBase { container.reloadConfig(3); assertNotNull(newGraph.get(5, TimeUnit.MINUTES)); + + container.shutdownConfigRetriever(); } @Test - void providers_are_destructed() { + void providers_are_destroyed() { writeBootstrapConfigs("id1", DestructableProvider.class); ComponentDeconstructor deconstructor = (generation, components, bundles) -> { @@ -304,6 +316,8 @@ public class ContainerTest extends ContainerTestBase { getNewComponentGraph(container, oldGraph); assertTrue(destructableEntity.deconstructed); + + container.shutdownConfigRetriever(); } @Test diff --git a/container-core/src/test/java/com/yahoo/container/di/ContainerTestBase.java b/container-core/src/test/java/com/yahoo/container/di/ContainerTestBase.java index 7442eb2068d..54e5c54438b 100644 --- a/container-core/src/test/java/com/yahoo/container/di/ContainerTestBase.java +++ b/container-core/src/test/java/com/yahoo/container/di/ContainerTestBase.java @@ -36,12 +36,6 @@ public class ContainerTestBase { osgi = new TestOsgi(BundleTestUtil.testBundles()); } - @AfterEach - public void cleanup() { - dirConfigSource.cleanup(); - } - - protected Container newContainer(DirConfigSource dirConfigSource, ComponentDeconstructor deconstructor) { return new Container(new CloudSubscriberFactory(dirConfigSource.configSource), diff --git a/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java b/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java index db7e93f7c6e..39b50c66244 100644 --- a/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java +++ b/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java @@ -3,13 +3,17 @@ package com.yahoo.container.di; import com.yahoo.config.subscription.ConfigSource; import com.yahoo.config.subscription.ConfigSourceSet; +import org.junit.jupiter.api.Assertions; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.util.Random; +import static java.nio.charset.StandardCharsets.UTF_8; + /** * @author Tony Vaagenes * @author gjoranv @@ -18,7 +22,7 @@ import java.util.Random; public class DirConfigSource { private final File tempFolder; - public final ConfigSource configSource; + public final ConfigSource configSource; // TODO jonmv: remove, unused public DirConfigSource(File tmpDir, String testSourcePrefix) { this.tempFolder = tmpDir; @@ -46,13 +50,9 @@ public class DirConfigSource { return configSource; } - public void cleanup() { - tempFolder.delete(); - } - private static void printFile(File f, String content) { try (OutputStream out = new FileOutputStream(f)) { - out.write(content.getBytes("UTF-8")); + out.write(content.getBytes(UTF_8)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/ContainerThreadFactory.java b/container-disc/src/main/java/com/yahoo/container/jdisc/ContainerThreadFactory.java index 92969ef9e97..b087c4e80b3 100644 --- a/container-disc/src/main/java/com/yahoo/container/jdisc/ContainerThreadFactory.java +++ b/container-disc/src/main/java/com/yahoo/container/jdisc/ContainerThreadFactory.java @@ -3,7 +3,6 @@ package com.yahoo.container.jdisc; import com.yahoo.container.jdisc.metric.MetricConsumerProvider; import com.yahoo.jdisc.application.ContainerThread; -import com.yahoo.jdisc.application.MetricConsumer; import java.util.concurrent.ThreadFactory; @@ -15,14 +14,7 @@ public class ContainerThreadFactory implements ThreadFactory { private final ThreadFactory delegate; public ContainerThreadFactory(MetricConsumerProvider metricConsumerProvider) { - metricConsumerProvider.getClass(); // throws NullPointerException - delegate = new ContainerThread.Factory(new com.google.inject.Provider<MetricConsumer>() { - - @Override - public MetricConsumer get() { - return metricConsumerProvider.newInstance(); - } - }); + delegate = new ContainerThread.Factory(metricConsumerProvider::newInstance); } @Override diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricProvider.java b/container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricProvider.java index b547b3dd897..1afe152a420 100644 --- a/container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricProvider.java +++ b/container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricProvider.java @@ -3,7 +3,6 @@ package com.yahoo.container.jdisc.metric; import com.yahoo.container.di.componentgraph.Provider; import com.yahoo.jdisc.Metric; -import com.yahoo.jdisc.application.MetricConsumer; /** * An implementation of {@link Provider} component of <code>Metric</code>. Because this class depends on {@link @@ -17,13 +16,7 @@ public final class MetricProvider implements Provider<Metric> { private final Metric metric; public MetricProvider(MetricConsumerProvider provider) { - metric = new com.yahoo.jdisc.application.MetricProvider(new com.google.inject.Provider<MetricConsumer>() { - - @Override - public MetricConsumer get() { - return provider.newInstance(); - } - }).get(); + metric = new com.yahoo.jdisc.application.MetricProvider(provider::newInstance).get(); } @Override diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/application/MetricImpl.java b/jdisc_core/src/main/java/com/yahoo/jdisc/application/MetricImpl.java index 5a6a1f96bad..994bfc0fc3f 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/application/MetricImpl.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/application/MetricImpl.java @@ -45,11 +45,7 @@ class MetricImpl implements Metric { } private MetricConsumer currentConsumer() { - Thread thread = Thread.currentThread(); - if (thread instanceof ContainerThread) { - return ((ContainerThread)thread).consumer(); - } - return consumer.get(); + return Thread.currentThread() instanceof ContainerThread thread ? thread.consumer() : consumer.get(); } private static class LocalConsumer extends ThreadLocal<MetricConsumer> { |