diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-28 16:16:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-28 16:16:39 +0100 |
commit | e5cb5862776f800d64fe95647456ee15de778fb3 (patch) | |
tree | edc8b7f120a61a666ab0ad0734ca7d2cb9181b90 | |
parent | 1626383a9d0a0e1ce584e7b2dcc8c59c3630dcd5 (diff) |
Revert "Use a simple tokenizer and replace the larger than container-search [run-systemtest]"
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 |