summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-11-28 16:19:08 +0100
committerGitHub <noreply@github.com>2022-11-28 16:19:08 +0100
commitc53520c4c8419d10d3e6c94aa70e15cbf2ae799f (patch)
tree1ecbe14c18bdfae856f6c2c848e5a367963653f0
parent70223708bff9507e684354d6e7ce72cff710de90 (diff)
Revert "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, 82 insertions, 47 deletions
diff --git a/config-model-fat/pom.xml b/config-model-fat/pom.xml
index 21e1a10103c..f96ed28b94c 100644
--- a/config-model-fat/pom.xml
+++ b/config-model-fat/pom.xml
@@ -187,8 +187,6 @@
<!-- 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 a11e72fa1be..15dc9860ba7 100644
--- a/config-model/pom.xml
+++ b/config-model/pom.xml
@@ -283,22 +283,6 @@
<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 9c0e7be452a..c6b8ca981e7 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,9 +1,6 @@
// 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;
@@ -22,8 +19,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;
@@ -79,14 +76,17 @@ public abstract class AbstractBundleValidator extends Validator {
}
}
- 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 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 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 1e3b27bc2fa..299e91f8ea2 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,7 +1,6 @@
// 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;
@@ -63,11 +62,10 @@ public class BundleValidator extends AbstractBundleValidator {
private void validateImportedPackages(DeployState state, JarFile jar, Manifest manifest) {
Map<DeprecatedProvidedBundle, List<String>> deprecatedPackagesInUse = new HashMap<>();
- forEachImportPackage(manifest, (packageName, versionRange) -> {
+ forEachImportPackage(manifest, (packageName) -> {
for (DeprecatedProvidedBundle deprecatedBundle : DeprecatedProvidedBundle.values()) {
for (Predicate<String> matcher : deprecatedBundle.javaPackageMatchers) {
- if (matcher.test(packageName)
- && (versionRange == null || deprecatedBundle.versionDiscriminator.test(versionRange))) {
+ if (matcher.test(packageName)) {
deprecatedPackagesInUse.computeIfAbsent(deprecatedBundle, __ -> new ArrayList<>())
.add(packageName);
}
@@ -91,22 +89,15 @@ 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
new file mode 100644
index 00000000000..40d5e7a757c
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/TokenizeAndDeQuote.java
@@ -0,0 +1,53 @@
+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 e26a8e8bac6..5cd7880e22d 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,6 +11,7 @@ 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;
@@ -98,4 +99,18 @@ 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 103c118b083..7cee022d1c1 100644
--- a/container-test/pom.xml
+++ b/container-test/pom.xml
@@ -23,10 +23,6 @@
<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 e3aa70b724d..1e893936d71 100644
--- a/vespa-dependencies-enforcer/allowed-maven-dependencies.txt
+++ b/vespa-dependencies-enforcer/allowed-maven-dependencies.txt
@@ -4,8 +4,6 @@
# 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