aboutsummaryrefslogtreecommitdiffstats
path: root/config/src/main/java
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-09-07 12:25:37 +0200
committerHarald Musum <musum@yahooinc.com>2023-09-07 12:25:37 +0200
commitcac205f35b56d0bd584013b79b88a6635dee5ab4 (patch)
treebcf8461b3091c44ae78e5d9355a2109ba7d6a77a /config/src/main/java
parentdaba552c567f1fcb9e300ae65825c1d97cedbb5e (diff)
Support optional 'path' config type
Initial work needed for this to work (config definition and config library)
Diffstat (limited to 'config/src/main/java')
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java b/config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java
index e86b13b2c98..0dbc40a246c 100644
--- a/config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java
+++ b/config/src/main/java/com/yahoo/vespa/config/ConfigPayloadApplier.java
@@ -21,6 +21,7 @@ import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.logging.Logger;
@@ -213,7 +214,10 @@ public class ConfigPayloadApplier<T extends ConfigInstance.Builder> {
Inspector value = (Inspector)rawValue;
if (isPathField(builder, methodName))
return resolvePath(value.asString());
- else if (isUrlField(builder, methodName))
+ if (isOptionalPathField(builder, methodName)) {
+ String v = value.asString();
+ return resolvePath(v.isEmpty() ? Optional.empty() : Optional.of(v));
+ } else if (isUrlField(builder, methodName))
return value.asString().isEmpty() ? "" : resolveUrl(value.asString());
else if (isModelField(builder, methodName))
return value.asString().isEmpty() ? "" : resolveModel(value.asString());
@@ -234,6 +238,10 @@ public class ConfigPayloadApplier<T extends ConfigInstance.Builder> {
return new FileReference(path.toString());
}
+ private Optional<FileReference> resolvePath(Optional<String> value) {
+ return value.isEmpty() ? Optional.empty() : Optional.of(resolvePath(value.get()));
+ }
+
private UrlReference resolveUrl(String url) {
if ( ! isClientside()) return new UrlReference(url);
File file = urlDownloader.waitFor(new UrlReference(url), 60 * 60);
@@ -319,6 +327,16 @@ public class ConfigPayloadApplier<T extends ConfigInstance.Builder> {
return isFieldType(pathFieldSet, builder, methodName, FileReference.class);
}
+ /**
+ * Checks if this field is of type 'path', in which
+ * case some special handling might be needed. Caches the result.
+ */
+ private final Set<String> optionalPathFieldSet = new HashSet<>();
+ private boolean isOptionalPathField(Object builder, String methodName) {
+ // Paths are stored as Optional<FileReference> in Builder.
+ return isFieldType(optionalPathFieldSet, builder, methodName, Optional.class);
+ }
+
private final Set<String> urlFieldSet = new HashSet<>();
private boolean isUrlField(Object builder, String methodName) {
// Urls are stored as UrlReference in Builder.