summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-09-12 09:36:13 +0200
committerHarald Musum <musum@yahooinc.com>2023-09-12 09:36:13 +0200
commit647054248636089bc687f9af25f9c158cabba23a (patch)
tree54ce206f57fcab7b2290ad7c43210c4bd10fd917 /config-model
parentc38fcd2e6f09273459ade724fd571e615ff3f6c9 (diff)
Rename and move some classes and methods related to file distribution
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java18
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/UserConfiguredFiles.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/utils/FileSender.java)64
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/filedistribution/UserConfiguredFilesTest.java (renamed from config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java)33
3 files changed, 58 insertions, 57 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
index 07983c7c85a..4adc6131803 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
@@ -38,7 +38,7 @@ import com.yahoo.vespa.model.container.component.Component;
import com.yahoo.vespa.model.container.component.Handler;
import com.yahoo.vespa.model.container.component.SystemBindingPattern;
import com.yahoo.vespa.model.container.configserver.ConfigserverCluster;
-import com.yahoo.vespa.model.utils.FileSender;
+import com.yahoo.vespa.model.filedistribution.UserConfiguredFiles;
import java.util.ArrayList;
import java.util.Collection;
@@ -130,23 +130,24 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat
@Override
protected void doPrepare(DeployState deployState) {
super.doPrepare(deployState);
- addAndSendApplicationBundles(deployState);
- sendUserConfiguredFiles(deployState);
+ // Register bundles and files for file distribution
+ registerApplicationBundles(deployState);
+ registerUserConfiguredFiles(deployState);
createEndpoints(deployState);
}
- private void addAndSendApplicationBundles(DeployState deployState) {
+ private void registerApplicationBundles(DeployState deployState) {
for (ComponentInfo component : deployState.getApplicationPackage().getComponentsInfo(deployState.getVespaVersion())) {
FileReference reference = deployState.getFileRegistry().addFile(component.getPathRelativeToAppDir());
applicationBundles.add(reference);
}
}
- private void sendUserConfiguredFiles(DeployState deployState) {
+ private void registerUserConfiguredFiles(DeployState deployState) {
// Files referenced from user configs to all components.
- FileSender fileSender = new FileSender(containers, deployState.getFileRegistry(), deployState.getDeployLogger());
+ UserConfiguredFiles files = new UserConfiguredFiles(containers, deployState.getFileRegistry(), deployState.getDeployLogger());
for (Component<?, ?> component : getAllComponents()) {
- fileSender.sendUserConfiguredFiles(component);
+ files.register(component);
}
}
@@ -156,8 +157,7 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat
}
private void addMetricsHandler(String handlerClass, BindingPattern rootBinding, BindingPattern innerBinding) {
- Handler handler = new Handler(
- new ComponentModel(handlerClass, null, null, null));
+ Handler handler = new Handler(new ComponentModel(handlerClass, null, null, null));
handler.addServerBindings(rootBinding, innerBinding);
addComponent(handler);
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/utils/FileSender.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/UserConfiguredFiles.java
index 2aa403791fc..bf1abdce49b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/utils/FileSender.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/UserConfiguredFiles.java
@@ -1,5 +1,5 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.utils;
+package com.yahoo.vespa.model.filedistribution;
import com.yahoo.config.FileReference;
import com.yahoo.config.ModelReference;
@@ -21,82 +21,84 @@ import java.util.Optional;
import java.util.logging.Level;
/**
- * Utility methods for sending files to a collection of nodes.
+ * Utility methods for registering file distribution of files/paths/urls/models defined by the user
+ * to a collection of nodes.
*
* @author gjoranv
*/
-public class FileSender implements Serializable {
+public class UserConfiguredFiles implements Serializable {
private final Collection<? extends AbstractService> services;
private final FileRegistry fileRegistry;
private final DeployLogger logger;
- public FileSender(Collection<? extends AbstractService> services, FileRegistry fileRegistry, DeployLogger logger) {
+ public UserConfiguredFiles(Collection<? extends AbstractService> services, FileRegistry fileRegistry, DeployLogger logger) {
this.services = services;
this.fileRegistry = fileRegistry;
this.logger = logger;
}
/**
- * Sends all user configured files for a producer to all given services.
+ * Registers user configured files for a producer for file distribution.
*/
- public <PRODUCER extends AnyConfigProducer> void sendUserConfiguredFiles(PRODUCER producer) {
+ public <PRODUCER extends AnyConfigProducer> void register(PRODUCER producer) {
if (services.isEmpty()) return;
UserConfigRepo userConfigs = producer.getUserConfigs();
- Map<Path, FileReference> sentFiles = new HashMap<>();
+ Map<Path, FileReference> registeredFiles = new HashMap<>();
for (ConfigDefinitionKey key : userConfigs.configsProduced()) {
ConfigPayloadBuilder builder = userConfigs.get(key);
try {
- sendUserConfiguredFiles(builder, sentFiles, key);
+ register(builder, registeredFiles, key);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Unable to send file specified in " + key, e);
}
}
}
- private void sendUserConfiguredFiles(ConfigPayloadBuilder builder, Map<Path, FileReference> sentFiles, ConfigDefinitionKey key) {
+ private void register(ConfigPayloadBuilder builder, Map<Path, FileReference> registeredFiles, ConfigDefinitionKey key) {
ConfigDefinition configDefinition = builder.getConfigDefinition();
if (configDefinition == null) {
- // TODO: throw new IllegalArgumentException("Not able to find config definition for " + builder);
- logger.logApplicationPackage(Level.FINE, "Not able to find config definition for " + key +
- ". Will not send files for this config");
+ // TODO: throw new IllegalArgumentException("Unable to find config definition for " + builder);
+ logger.logApplicationPackage(Level.FINE, "Unable to find config definition " + key +
+ ". Will not register files for file distribution for this config");
return;
}
+
// Inspect fields at this level
- sendEntries(builder, sentFiles, configDefinition.getFileDefs(), false);
- sendEntries(builder, sentFiles, configDefinition.getPathDefs(), false);
- sendEntries(builder, sentFiles, configDefinition.getOptionalPathDefs(), false);
- sendEntries(builder, sentFiles, configDefinition.getModelDefs(), true);
+ registerEntries(builder, registeredFiles, configDefinition.getFileDefs(), false);
+ registerEntries(builder, registeredFiles, configDefinition.getPathDefs(), false);
+ registerEntries(builder, registeredFiles, configDefinition.getOptionalPathDefs(), false);
+ registerEntries(builder, registeredFiles, configDefinition.getModelDefs(), true);
// Inspect arrays
for (Map.Entry<String, ConfigDefinition.ArrayDef> entry : configDefinition.getArrayDefs().entrySet()) {
if (isNotAnyFileType(entry.getValue().getTypeSpec().getType())) continue;
ConfigPayloadBuilder.Array array = builder.getArray(entry.getKey());
- sendFileEntries(array.getElements(), sentFiles, "model".equals(entry.getValue().getTypeSpec().getType()));
+ registerFileEntries(array.getElements(), registeredFiles, "model".equals(entry.getValue().getTypeSpec().getType()));
}
// Inspect maps
for (Map.Entry<String, ConfigDefinition.LeafMapDef> entry : configDefinition.getLeafMapDefs().entrySet()) {
if (isNotAnyFileType(entry.getValue().getTypeSpec().getType())) continue;
ConfigPayloadBuilder.MapBuilder map = builder.getMap(entry.getKey());
- sendFileEntries(map.getElements(), sentFiles, "model".equals(entry.getValue().getTypeSpec().getType()));
+ registerFileEntries(map.getElements(), registeredFiles, "model".equals(entry.getValue().getTypeSpec().getType()));
}
// Inspect inner fields
for (String name : configDefinition.getStructDefs().keySet()) {
- sendUserConfiguredFiles(builder.getObject(name), sentFiles, key);
+ register(builder.getObject(name), registeredFiles, key);
}
for (String name : configDefinition.getInnerArrayDefs().keySet()) {
ConfigPayloadBuilder.Array array = builder.getArray(name);
for (ConfigPayloadBuilder element : array.getElements()) {
- sendUserConfiguredFiles(element, sentFiles, key);
+ register(element, registeredFiles, key);
}
}
for (String name : configDefinition.getStructMapDefs().keySet()) {
ConfigPayloadBuilder.MapBuilder map = builder.getMap(name);
for (ConfigPayloadBuilder element : map.getElements()) {
- sendUserConfiguredFiles(element, sentFiles, key);
+ register(element, registeredFiles, key);
}
}
}
@@ -105,10 +107,10 @@ public class FileSender implements Serializable {
return ! "file".equals(type) && ! "path".equals(type) && ! "model".equals(type);
}
- private void sendEntries(ConfigPayloadBuilder builder,
- Map<Path, FileReference> sentFiles,
- Map<String, ?> entries,
- boolean isModelType) {
+ private void registerEntries(ConfigPayloadBuilder builder,
+ Map<Path, FileReference> registeredFiles,
+ Map<String, ?> entries,
+ boolean isModelType) {
for (Map.Entry<String, ?> entry : entries.entrySet()) {
String name = entry.getKey();
ConfigPayloadBuilder fileEntry = builder.getObject(name);
@@ -116,7 +118,7 @@ public class FileSender implements Serializable {
if (fileEntry.getValue() == null)
throw new IllegalArgumentException("Unable to send file for field '" + name +
"': Invalid config value " + fileEntry.getValue());
- sendFileEntry(fileEntry, sentFiles, isModelType);
+ registerFileEntry(fileEntry, registeredFiles, isModelType);
}
}
@@ -124,13 +126,13 @@ public class FileSender implements Serializable {
return entry.getValue() instanceof ConfigDefinition.OptionalPathDef && fileEntry.getValue() == null;
}
- private void sendFileEntries(Collection<ConfigPayloadBuilder> builders, Map<Path, FileReference> sentFiles, boolean isModelType) {
+ private void registerFileEntries(Collection<ConfigPayloadBuilder> builders, Map<Path, FileReference> registeredFiles, boolean isModelType) {
for (ConfigPayloadBuilder builder : builders) {
- sendFileEntry(builder, sentFiles, isModelType);
+ registerFileEntry(builder, registeredFiles, isModelType);
}
}
- private void sendFileEntry(ConfigPayloadBuilder builder, Map<Path, FileReference> sentFiles, boolean isModelType) {
+ private void registerFileEntry(ConfigPayloadBuilder builder, Map<Path, FileReference> registeredFiles, boolean isModelType) {
Path path;
if (isModelType) {
var modelReference = ModelReference.valueOf(builder.getValue());
@@ -141,10 +143,10 @@ public class FileSender implements Serializable {
path = Path.fromString(builder.getValue());
}
- FileReference reference = sentFiles.get(path);
+ FileReference reference = registeredFiles.get(path);
if (reference == null) {
reference = fileRegistry.addFile(path.getRelative());
- sentFiles.put(path, reference);
+ registeredFiles.put(path, reference);
}
if (isModelType) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/filedistribution/UserConfiguredFilesTest.java
index 6dc9207a8cc..93e693ebc02 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/filedistribution/UserConfiguredFilesTest.java
@@ -1,10 +1,9 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.utils;
+package com.yahoo.vespa.model.filedistribution;
import com.yahoo.config.FileNode;
import com.yahoo.config.FileReference;
import com.yahoo.config.ModelReference;
-import com.yahoo.config.OptionalPathNode;
import com.yahoo.config.UrlReference;
import com.yahoo.config.application.api.FileRegistry;
import com.yahoo.config.model.application.provider.BaseDeployLogger;
@@ -33,7 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* @author Ulf Lilleengen
*/
-public class FileSenderTest {
+public class UserConfiguredFilesTest {
private SimpleConfigProducer<?> producer;
private ConfigPayloadBuilder builder;
@@ -64,8 +63,8 @@ public class FileSenderTest {
}
}
- private FileSender fileSender() {
- return new FileSender(serviceList, fileRegistry, new BaseDeployLogger());
+ private UserConfiguredFiles userConfiguredFiles() {
+ return new UserConfiguredFiles(serviceList, fileRegistry, new BaseDeployLogger());
}
@BeforeEach
@@ -91,7 +90,7 @@ public class FileSenderTest {
builder.setField("fileVal", "foo.txt");
builder.setField("stringVal", "foo.txt");
fileRegistry.pathToRef.put("foo.txt", new FileNode("fooshash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals("fooshash", builder.getObject("fileVal").getValue());
assertEquals("foo.txt", builder.getObject("stringVal").getValue());
}
@@ -103,7 +102,7 @@ public class FileSenderTest {
builder.setField("fileVal", "foo.txt");
builder.setField("stringVal", "foo.txt");
fileRegistry.pathToRef.put("foo.txt", new FileNode("fooshash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals("fooshash", builder.getObject("fileVal").getValue());
assertEquals("foo.txt", builder.getObject("stringVal").getValue());
}
@@ -131,13 +130,13 @@ public class FileSenderTest {
var originalValue = ModelReference.unresolved(new UrlReference("myUrl"));
def.addModelDef("modelVal");
builder.setField("modelVal",originalValue.toString());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals(originalValue, ModelReference.valueOf(builder.getObject("modelVal").getValue()));
}
private void assertFileSent(String path, ModelReference originalValue) {
fileRegistry.pathToRef.put(path, new FileNode("myModelHash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
var expected = ModelReference.unresolved(originalValue.modelId(),
originalValue.url(),
Optional.of(new FileReference("myModelHash")));
@@ -152,7 +151,7 @@ public class FileSenderTest {
inner.setField("fileVal", "bar.txt");
inner.setField("stringVal", "bar.txt");
fileRegistry.pathToRef.put("bar.txt", new FileNode("barhash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals("barhash", builder.getArray("inner").get(0).getObject("fileVal").getValue());
assertEquals("bar.txt", builder.getArray("inner").get(0).getObject("stringVal").getValue());
}
@@ -169,7 +168,7 @@ public class FileSenderTest {
fileRegistry.pathToRef.put("foo.txt", new FileNode("foohash").value());
fileRegistry.pathToRef.put("bar.txt", new FileNode("barhash").value());
fileRegistry.pathToRef.put("path.txt", new FileNode("pathhash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals("foohash", builder.getArray("fileArray").get(0).getValue());
assertEquals("barhash", builder.getArray("fileArray").get(1).getValue());
assertEquals("pathhash", builder.getArray("pathArray").get(0).getValue());
@@ -188,7 +187,7 @@ public class FileSenderTest {
fileRegistry.pathToRef.put("foo.txt", new FileNode("foohash").value());
fileRegistry.pathToRef.put("bar.txt", new FileNode("barhash").value());
fileRegistry.pathToRef.put("path.txt", new FileNode("pathhash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals("foohash", builder.getArray("fileArray").get(0).getValue());
assertEquals("barhash", builder.getArray("fileArray").get(1).getValue());
assertEquals("pathhash", builder.getArray("pathArray").get(0).getValue());
@@ -202,7 +201,7 @@ public class FileSenderTest {
builder.getObject("struct").setField("fileVal", "foo.txt");
builder.getObject("struct").setField("stringVal", "foo.txt");
fileRegistry.pathToRef.put("foo.txt", new FileNode("foohash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals("foohash", builder.getObject("struct").getObject("fileVal").getValue());
assertEquals("foo.txt", builder.getObject("struct").getObject("stringVal").getValue());
}
@@ -219,7 +218,7 @@ public class FileSenderTest {
fileRegistry.pathToRef.put("foo.txt", new FileNode("foohash").value());
fileRegistry.pathToRef.put("bar.txt", new FileNode("barhash").value());
fileRegistry.pathToRef.put("path.txt", new FileNode("pathhash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals("foohash", builder.getMap("fileMap").get("foo").getValue());
assertEquals("barhash", builder.getMap("fileMap").get("bar").getValue());
assertEquals("pathhash", builder.getMap("pathMap").get("path").getValue());
@@ -234,7 +233,7 @@ public class FileSenderTest {
inner.setField("fileVal", "bar.txt");
inner.setField("stringVal", "bar.txt");
fileRegistry.pathToRef.put("bar.txt", new FileNode("barhash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
assertEquals("barhash", builder.getMap("inner").get("foo").getObject("fileVal").getValue());
assertEquals("bar.txt", builder.getMap("inner").get("foo").getObject("stringVal").getValue());
}
@@ -244,14 +243,14 @@ public class FileSenderTest {
assertThrows(IllegalArgumentException.class, () -> {
def.addFileDef("fileVal");
fileRegistry.pathToRef.put("foo.txt", new FileNode("fooshash").value());
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
});
}
@Test
void require_that_empty_optional_paths_are_not_sent() {
def.addOptionalPathDef("optionalPathVal");
- fileSender().sendUserConfiguredFiles(producer);
+ userConfiguredFiles().register(producer);
}