aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-11-28 16:16:39 +0100
committerGitHub <noreply@github.com>2022-11-28 16:16:39 +0100
commite5cb5862776f800d64fe95647456ee15de778fb3 (patch)
treeedc8b7f120a61a666ab0ad0734ca7d2cb9181b90
parent1626383a9d0a0e1ce584e7b2dcc8c59c3630dcd5 (diff)
Revert "Use a simple tokenizer and replace the larger than container-search [run-systemtest]"
-rw-r--r--config-model-fat/pom.xml2
-rw-r--r--config-model/pom.xml16
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java24
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java13
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java53
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java15
-rw-r--r--container-test/pom.xml4
-rw-r--r--vespa-dependencies-enforcer/allowed-maven-dependencies.txt2
8 files changed, 47 insertions, 82 deletions
diff --git a/config-model-fat/pom.xml b/config-model-fat/pom.xml
index f96ed28b94c..21e1a10103c 100644
--- a/config-model-fat/pom.xml
+++ b/config-model-fat/pom.xml
@@ -187,6 +187,8 @@
<!-- 3rd party artifacts embedded -->
<i>aopalliance:aopalliance:*:*</i>
+ <i>biz.aQute.bnd:biz.aQute.bnd.util:*:*</i>
+ <i>biz.aQute.bnd:biz.aQute.bndlib:*:*</i>
<i>com.fasterxml.jackson.core:jackson-annotations:*:*</i>
<i>com.fasterxml.jackson.core:jackson-core:*:*</i>
<i>com.fasterxml.jackson.core:jackson-databind:*:*</i>
diff --git a/config-model/pom.xml b/config-model/pom.xml
index 15dc9860ba7..a11e72fa1be 100644
--- a/config-model/pom.xml
+++ b/config-model/pom.xml
@@ -283,6 +283,22 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>biz.aQute.bndlib</artifactId>
+ <version>6.1.0</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <!-- These are not needed for our use of bndlib -->
+ <groupId>org.osgi</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
<groupId>org.lz4</groupId>
<artifactId>lz4-java</artifactId>
</dependency>
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
index c6b8ca981e7..9c0e7be452a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
@@ -1,6 +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.application.validation;
+import aQute.bnd.header.Parameters;
+import aQute.bnd.osgi.Domain;
+import aQute.bnd.version.VersionRange;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.ComponentInfo;
import com.yahoo.config.application.api.DeployLogger;
@@ -19,8 +22,8 @@ import javax.xml.xpath.XPathFactory;
import java.io.IOException;
import java.io.StringReader;
import java.nio.file.Paths;
-import java.util.List;
import java.util.Optional;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
@@ -76,17 +79,14 @@ public abstract class AbstractBundleValidator extends Validator {
}
}
- protected final void forEachImportPackage(Manifest mf, Consumer<String> consumer) {
- String importPackage = mf.getMainAttributes().getValue("Import-Package");
- List<String> tokens = new TokenizeAndDeQuote(";,=", "\"'").tokenize(importPackage);
- if (tokens.size() % 3 != 0) {
- throw new IllegalArgumentException("Number of tokens " + tokens.size() + " must be divisible by 3.\n" +
- "Import-Package = '" + importPackage + "'\n" +
- "Token = " + tokens);
- }
- for (int packageNum = 0; packageNum < tokens.size()/3; packageNum++) {
- consumer.accept(tokens.get(packageNum*3));
- }
+ protected final void forEachImportPackage(Manifest mf, BiConsumer<String, VersionRange> consumer) {
+ Parameters importPackage = Domain.domain(mf).getImportPackage();
+ importPackage.forEach((packageName, attrs) -> {
+ VersionRange versionRange = attrs.getVersion() != null
+ ? VersionRange.parseOSGiVersionRange(attrs.getVersion())
+ : null;
+ consumer.accept(packageName, versionRange);
+ });
}
protected final void log(DeployState state, Level level, String fmt, Object... args) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java
index 299e91f8ea2..1e3b27bc2fa 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.application.validation;
+import aQute.bnd.version.VersionRange;
import com.yahoo.config.model.deploy.DeployState;
import org.w3c.dom.Document;
@@ -62,10 +63,11 @@ public class BundleValidator extends AbstractBundleValidator {
private void validateImportedPackages(DeployState state, JarFile jar, Manifest manifest) {
Map<DeprecatedProvidedBundle, List<String>> deprecatedPackagesInUse = new HashMap<>();
- forEachImportPackage(manifest, (packageName) -> {
+ forEachImportPackage(manifest, (packageName, versionRange) -> {
for (DeprecatedProvidedBundle deprecatedBundle : DeprecatedProvidedBundle.values()) {
for (Predicate<String> matcher : deprecatedBundle.javaPackageMatchers) {
- if (matcher.test(packageName)) {
+ if (matcher.test(packageName)
+ && (versionRange == null || deprecatedBundle.versionDiscriminator.test(versionRange))) {
deprecatedPackagesInUse.computeIfAbsent(deprecatedBundle, __ -> new ArrayList<>())
.add(packageName);
}
@@ -89,15 +91,22 @@ public class BundleValidator extends AbstractBundleValidator {
final String name;
final Collection<Predicate<String>> javaPackageMatchers;
+ final Predicate<VersionRange> versionDiscriminator;
final String description;
+ DeprecatedProvidedBundle(String name, String description, Collection<String> javaPackagePatterns) {
+ this(name, description, __ -> true, javaPackagePatterns);
+ }
+
DeprecatedProvidedBundle(String name,
String description,
+ Predicate<VersionRange> versionDiscriminator,
Collection<String> javaPackagePatterns) {
this.name = name;
this.javaPackageMatchers = javaPackagePatterns.stream()
.map(s -> Pattern.compile(s).asMatchPredicate())
.collect(Collectors.toList());
+ this.versionDiscriminator = versionDiscriminator;
this.description = description;
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java
deleted file mode 100644
index 40d5e7a757c..00000000000
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.yahoo.vespa.model.application.validation;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Will tokenize based on the delimiters while dequoting any qouted text.
- * @author baldersheim
- */
-public class TokenizeAndDeQuote {
- private static final char ESCAPE = '\\';
- private final String delims;
- private final String quotes;
-
- public TokenizeAndDeQuote(String delims,String quotes) {
- this.delims = delims;
- this.quotes = quotes;
- }
-
- public List<String> tokenize(String string) {
- StringBuilder current = new StringBuilder();
- List<String> tokens = new ArrayList<>();
- char quote = 0;
-
- for (int i = 0; i < string.length(); i++) {
- char c = string.charAt(i);
-
- if ((c == ESCAPE) && (i + 1 < string.length())) {
- // Escaped, append next char
- current.append(string.charAt(++i));
- } else if ((quote == 0) && (delims.indexOf(c) >=0 )) {
- // Delimiter found outside quoted section, add token and start next
- tokens.add(current.toString());
- current.setLength(0);
- } else if ((quote == 0) && (quotes.indexOf(c) >= 0)) {
- // Start of quote
- quote = c;
- } else if (quote == c) {
- // End of quote
- quote = 0;
- } else {
- current.append(c);
- }
- }
-
- if ( ! current.isEmpty()) {
- // And then the last token if any
- tokens.add(current.toString());
- }
-
- return tokens;
- }
-}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java
index 5cd7880e22d..e26a8e8bac6 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java
@@ -11,7 +11,6 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
@@ -99,18 +98,4 @@ public class BundleValidatorTest {
return new JarFile(jarFile.toFile());
}
- private void verifyParsing(String text, List<String> expected) {
- TokenizeAndDeQuote tokenizer = new TokenizeAndDeQuote(";,=", "\"'");
- var words = tokenizer.tokenize(text);
- assertEquals(expected, words);
- }
-
- @Test
- void testImportPackagesParsing() {
- verifyParsing("org.json;version=\"[0.0.0,1)\",org.eclipse.jetty.client.api;version=\"[9.4.46,10)\"",
- List.of("org.json", "version", "[0.0.0,1)", "org.eclipse.jetty.client.api", "version", "[9.4.46,10)"));
- verifyParsing("org.json;version='[0.0.0,1)',org.eclipse.jetty.client.api;version='[9.4.46,10)'",
- List.of("org.json", "version", "[0.0.0,1)", "org.eclipse.jetty.client.api", "version", "[9.4.46,10)"));
- }
-
}
diff --git a/container-test/pom.xml b/container-test/pom.xml
index 7cee022d1c1..103c118b083 100644
--- a/container-test/pom.xml
+++ b/container-test/pom.xml
@@ -23,6 +23,10 @@
<version>${project.version}</version>
<exclusions>
<exclusion>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ <exclusion>
<groupId>com.yahoo.vespa</groupId>
<artifactId>vespajlib</artifactId>
</exclusion>
diff --git a/vespa-dependencies-enforcer/allowed-maven-dependencies.txt b/vespa-dependencies-enforcer/allowed-maven-dependencies.txt
index 1e893936d71..e3aa70b724d 100644
--- a/vespa-dependencies-enforcer/allowed-maven-dependencies.txt
+++ b/vespa-dependencies-enforcer/allowed-maven-dependencies.txt
@@ -4,6 +4,8 @@
# Contains dependencies that are not used exclusively in 'test' scope
aopalliance:aopalliance:1.0
backport-util-concurrent:backport-util-concurrent:3.1
+biz.aQute.bnd:biz.aQute.bnd.util:6.1.0
+biz.aQute.bnd:biz.aQute.bndlib:6.1.0
ch.qos.logback:logback-classic:1.2.10
ch.qos.logback:logback-core:1.2.10
classworlds:classworlds:1.1-alpha-2