diff options
author | Harald Musum <musum@yahooinc.com> | 2023-09-11 09:10:42 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-09-11 09:10:42 +0200 |
commit | 06bff5e86cc1385fa181015b3aa0b67f9ead5050 (patch) | |
tree | b9ec9cbc904a674bbb45bedaa83ea9d3431c38cc /config-model | |
parent | 60e20617d200fccee0ab4be5e617f69d3b5a511e (diff) |
Handle optional paths in FileSender
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/utils/FileSender.java | 18 | ||||
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java | 10 |
2 files changed, 20 insertions, 8 deletions
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/utils/FileSender.java index 0e24c676b8f..2aa403791fc 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/utils/FileSender.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/utils/FileSender.java @@ -6,7 +6,6 @@ import com.yahoo.config.ModelReference; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.application.api.FileRegistry; import com.yahoo.config.model.producer.AnyConfigProducer; -import com.yahoo.config.model.producer.TreeConfigProducer; import com.yahoo.config.model.producer.UserConfigRepo; import com.yahoo.path.Path; import com.yahoo.vespa.config.ConfigDefinition; @@ -67,18 +66,19 @@ public class FileSender implements Serializable { // 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); // Inspect arrays for (Map.Entry<String, ConfigDefinition.ArrayDef> entry : configDefinition.getArrayDefs().entrySet()) { - if ( ! isAnyFileType(entry.getValue().getTypeSpec().getType())) continue; + if (isNotAnyFileType(entry.getValue().getTypeSpec().getType())) continue; ConfigPayloadBuilder.Array array = builder.getArray(entry.getKey()); sendFileEntries(array.getElements(), sentFiles, "model".equals(entry.getValue().getTypeSpec().getType())); } // Inspect maps for (Map.Entry<String, ConfigDefinition.LeafMapDef> entry : configDefinition.getLeafMapDefs().entrySet()) { - if ( ! isAnyFileType(entry.getValue().getTypeSpec().getType())) continue; + if (isNotAnyFileType(entry.getValue().getTypeSpec().getType())) continue; ConfigPayloadBuilder.MapBuilder map = builder.getMap(entry.getKey()); sendFileEntries(map.getElements(), sentFiles, "model".equals(entry.getValue().getTypeSpec().getType())); } @@ -101,16 +101,18 @@ public class FileSender implements Serializable { } } - private static boolean isAnyFileType(String type) { - return "file".equals(type) || "path".equals(type) || "model".equals(type); + private static boolean isNotAnyFileType(String type) { + return ! "file".equals(type) && ! "path".equals(type) && ! "model".equals(type); } private void sendEntries(ConfigPayloadBuilder builder, Map<Path, FileReference> sentFiles, Map<String, ?> entries, boolean isModelType) { - for (String name : entries.keySet()) { + for (Map.Entry<String, ?> entry : entries.entrySet()) { + String name = entry.getKey(); ConfigPayloadBuilder fileEntry = builder.getObject(name); + if (isEmptyOptionalPath(entry, fileEntry)) continue; if (fileEntry.getValue() == null) throw new IllegalArgumentException("Unable to send file for field '" + name + "': Invalid config value " + fileEntry.getValue()); @@ -118,6 +120,10 @@ public class FileSender implements Serializable { } } + private static boolean isEmptyOptionalPath(Map.Entry<String, ?> entry, ConfigPayloadBuilder fileEntry) { + return entry.getValue() instanceof ConfigDefinition.OptionalPathDef && fileEntry.getValue() == null; + } + private void sendFileEntries(Collection<ConfigPayloadBuilder> builders, Map<Path, FileReference> sentFiles, boolean isModelType) { for (ConfigPayloadBuilder builder : builders) { sendFileEntry(builder, sentFiles, 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/utils/FileSenderTest.java index c122aba9cf1..6dc9207a8cc 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.model.utils; 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; @@ -39,7 +40,6 @@ public class FileSenderTest { private List<AbstractService> serviceList; private final MyFileRegistry fileRegistry = new MyFileRegistry(); private ConfigDefinition def; - private TestService service; private static class MyFileRegistry implements FileRegistry { public Map<String, FileReference> pathToRef = new HashMap<>(); @@ -72,7 +72,7 @@ public class FileSenderTest { public void setup() { MockRoot root = new MockRoot(); producer = new SimpleConfigProducer<>(root, "test"); - service = new TestService(root, "service"); + TestService service = new TestService(root, "service"); serviceList = new ArrayList<>(); serviceList.add(service); ConfigDefinitionKey key = new ConfigDefinitionKey("myname", "mynamespace"); @@ -248,6 +248,12 @@ public class FileSenderTest { }); } + @Test + void require_that_empty_optional_paths_are_not_sent() { + def.addOptionalPathDef("optionalPathVal"); + fileSender().sendUserConfiguredFiles(producer); + } + private static class TestService extends AbstractService { public TestService(TreeConfigProducer<?> parent, String name) { |