You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2022/01/06 18:04:50 UTC

[brooklyn-server] branch master updated (b1f63f9 -> 46577f4)

This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git.


    from b1f63f9  bump cxf to 3.4.1, fix security vuln and standardize http components version
     new 9c5cc10  tidy logging esp for some edge case errors
     new f0a2860  exclude servicemix jersey-core from jclouds (we use jakarta)
     new 40f2cd0  don't use gson embedded by jclouds, use our own
     new 46577f4  slight rejigging of features

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../BrooklynComponentTemplateResolver.java         | 20 ++++++-----
 .../catalog/internal/BasicBrooklynCatalog.java     | 39 +++++++++++---------
 .../core/objs/BasicEntityTypeRegistry.java         |  4 +++
 .../core/typereg/TypePlanTransformers.java         | 14 +++++---
 karaf/features/src/main/feature/feature.xml        | 41 +++++++++++++++-------
 pom.xml                                            |  1 +
 6 files changed, 78 insertions(+), 41 deletions(-)

[brooklyn-server] 04/04: slight rejigging of features

Posted by he...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 46577f4dd2f236620ba7078707bf4f40e218b5ff
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Thu Jan 6 18:03:48 2022 +0000

    slight rejigging of features
    
    add jakarta.mail, bouncycastle jdk5on main
---
 karaf/features/src/main/feature/feature.xml | 18 +++++++++++-------
 pom.xml                                     |  1 +
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/karaf/features/src/main/feature/feature.xml b/karaf/features/src/main/feature/feature.xml
index cb16631..6e59733 100644
--- a/karaf/features/src/main/feature/feature.xml
+++ b/karaf/features/src/main/feature/feature.xml
@@ -61,6 +61,7 @@
 
         <feature prerequisite="true">wrap</feature>
 
+        <bundle>mvn:org.bouncycastle/bcutil-jdk15on/${bouncycastle.version}</bundle>
         <bundle>mvn:org.bouncycastle/bcprov-ext-jdk15on/${bouncycastle.version}</bundle>
         <bundle>mvn:org.bouncycastle/bcpkix-jdk15on/${bouncycastle.version}</bundle>
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jzlib/${jzlib.version}</bundle>
@@ -152,7 +153,8 @@
     </feature>
 
     <feature name="brooklyn-core" version="${project.version}" description="Brooklyn Core">
-        <feature>pax-jetty</feature>
+        <feature prerequisite="true">brooklyn-essential-deps</feature>
+
         <feature>brooklyn-api</feature>
 
         <bundle>mvn:org.apache.brooklyn/brooklyn-core/${project.version}</bundle>
@@ -225,12 +227,9 @@
 -->
 
     <feature name="brooklyn-rest-resources-prereqs" version="${project.version}" description="Brooklyn REST Resources Prerequisites">
-        <feature>brooklyn-core</feature>
-        <feature>brooklyn-rest-api</feature>
-        <feature>brooklyn-camp-brooklyn</feature>
-        <feature>brooklyn-camp-base</feature>
-
+        <feature>pax-jetty</feature>
         <feature>cxf-jaxrs-with-optional-dependencies</feature>
+
         <bundle dependency="true">mvn:org.apache.cxf/cxf-rt-rs-security-cors/${cxf.version}</bundle>
         <bundle dependency="true">mvn:org.apache.cxf/cxf-rt-frontend-jaxrs/${cxf.version}</bundle>
         <bundle dependency="true">mvn:org.apache.cxf.karaf/cxf-karaf-commands/${cxf.version}</bundle>
@@ -244,12 +243,17 @@
         <config name="org.apache.cxf.osgi">
             org.apache.cxf.servlet.context = /v1
         </config>
+
+        <feature>brooklyn-core</feature>
+        <feature>brooklyn-rest-api</feature>
+        <feature>brooklyn-camp-brooklyn</feature>
+        <feature>brooklyn-camp-base</feature>
     </feature>
 
     <feature name="cxf-jaxrs-with-optional-dependencies" version="${project.version}" description="cxf-jaxrs with optional dependencies">
         <feature>cxf-jaxrs</feature>
         
-        <!-- otherwise causes jackson-jaxrs-json-provider to be rewired when this optional dep is installed -->
+        <!-- do this here otherwise causes jackson-jaxrs-json-provider to be rewired when this optional dep is installed -->
         <bundle dependency="true" start-level="35">mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/${fasterxml.jackson.version}</bundle>
     </feature>
 
diff --git a/pom.xml b/pom.xml
index 86abc89..35a85f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -125,6 +125,7 @@
         <jaxb-runtime.version>${jaxb-api.version}</jaxb-runtime.version>   <!-- excluded -->
         <activator.servicemix.version>2.9.0</activator.servicemix.version>
         <jakarta.activation.version>1.2.2</jakarta.activation.version>
+        <jakarta.mail.version>1.6.5</jakarta.mail.version> <!-- used by karaf -->
         <!-- double-check downstream projects before changing jackson version -->
         <fasterxml.jackson.version>2.11.3</fasterxml.jackson.version>
         <cxf.version>3.4.1</cxf.version>

[brooklyn-server] 03/04: don't use gson embedded by jclouds, use our own

Posted by he...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 40f2cd0a9da5bd29ed8db1939b5962d785a1acd4
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Thu Jan 6 16:57:25 2022 +0000

    don't use gson embedded by jclouds, use our own
    
    provides consistency, speeds up wiring, and let's us control version, as 2.8.5 has a CVE but 2.8.9 fixes it
---
 karaf/features/src/main/feature/feature.xml | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/karaf/features/src/main/feature/feature.xml b/karaf/features/src/main/feature/feature.xml
index b13d1ab..cb16631 100644
--- a/karaf/features/src/main/feature/feature.xml
+++ b/karaf/features/src/main/feature/feature.xml
@@ -131,7 +131,7 @@
         <bundle dependency='true'>mvn:commons-codec/commons-codec/${commons-codec.version}</bundle>
 
         <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsr305/${jsr305.bundle.version}</bundle>
-        <bundle dependency='true'>mvn:com.google.code.gson/gson/${gson.version}</bundle>
+        <bundle dependency='true'>wrap:mvn:com.google.code.gson/gson/${gson.version}$overwrite=merge&amp;Export-Package=*;version=${gson.version}</bundle>
 
         <bundle dependency="true">mvn:commons-io/commons-io/${commons-io.version}</bundle>
         <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jcip-annotations/${jcip-annotations.bundle.version}</bundle>
@@ -159,7 +159,10 @@
         <bundle>mvn:org.apache.brooklyn/brooklyn-utils-groovy/${project.version}</bundle>
 
         <bundle>mvn:ch.qos.logback/logback-classic/${logback.version}</bundle> <!-- has an optional dep on groovy-all so refreshes when it is installed; just delay install till when it is -->
-        <bundle>mvn:com.google.code.gson/gson/${gson.version}</bundle>
+
+        <!-- export internal packages for use by jclouds -->
+        <bundle>wrap:mvn:com.google.code.gson/gson/${gson.version}$overwrite=merge&amp;Export-Package=*;version=${gson.version}</bundle>
+
         <bundle>mvn:com.jayway.jsonpath/json-path/${jsonPath.version}</bundle>
         <bundle>mvn:com.fasterxml.jackson.core/jackson-core/${fasterxml.jackson.version}</bundle>
         <bundle>mvn:com.fasterxml.jackson.core/jackson-databind/${fasterxml.jackson.version}</bundle>
@@ -320,7 +323,8 @@
         <bundle dependency="true">mvn:com.google.inject/guice/${guice.version}</bundle>
         <bundle dependency="true">mvn:com.google.inject.extensions/guice-assistedinject/${guice.version}</bundle>
         <bundle dependency="true">mvn:com.google.inject.extensions/guice-multibindings/${guice.version}</bundle>
-        <bundle>mvn:com.google.code.gson/gson/${gson.version}</bundle>
+        <!-- jclouds _embeds_ 2.8.5 but we ignore that and pull this in -->
+        <bundle>wrap:mvn:com.google.code.gson/gson/${gson.version}$overwrite=merge&amp;Export-Package=*;version=${gson.version}</bundle>
         <bundle>mvn:com.google.guava/guava/${guava.version}</bundle>
 
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsch/${jsch.bundle.version}</bundle>
@@ -373,12 +377,18 @@
         <bundle>mvn:org.apache.jclouds.driver/jclouds-sshj/${jclouds.version}</bundle>
         <bundle>mvn:org.apache.jclouds/jclouds-blobstore/${jclouds.version}</bundle>
         <bundle>mvn:org.apache.jclouds/jclouds-compute/${jclouds.version}</bundle>
-        <bundle>mvn:org.apache.jclouds/jclouds-core/${jclouds.version}</bundle>
+
+        <!-- <bundle>mvn:org.apache.jclouds/jclouds-core/${jclouds.version}</bundle> -->
+        <!-- jclouds-core embeds gson 2.8.5 which conflicts with our use of 2.8.9; we want to load gson earlier, and later version, so suppress jclouds' classpath access and export; extra needed as . is default and so ignored -->
+        <bundle>wrap:mvn:org.apache.jclouds/jclouds-core/${jclouds.version}$overwrite=merge&amp;Export-Package=org.jclouds.*;version=${jclouds.version};-noimport:=true&amp;Bundle-ClassPath=.,extra</bundle>
+
         <bundle>mvn:org.apache.jclouds/jclouds-loadbalancer/${jclouds.version}</bundle>
         <bundle>mvn:org.apache.jclouds/jclouds-scriptbuilder/${jclouds.version}</bundle>
         <bundle>mvn:org.apache.jclouds.provider/aws-ec2/${jclouds.version}</bundle>
+
         <!-- <bundle>mvn:org.apache.jclouds.provider/aws-s3/${jclouds.version}</bundle> add visibility to options so guice can resolve, below -->
         <bundle>wrap:mvn:org.apache.jclouds.provider/aws-s3/${jclouds.version}$overwrite=merge&amp;Import-Package=org.jclouds.http.options,*</bundle>
+
         <bundle>mvn:org.apache.jclouds.provider/azureblob/${jclouds.version}</bundle>
         <bundle>mvn:org.apache.jclouds.provider/azurecompute-arm/${jclouds.version}</bundle>
         <bundle>mvn:org.apache.jclouds.provider/b2/${jclouds.version}</bundle>

[brooklyn-server] 01/04: tidy logging esp for some edge case errors

Posted by he...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 9c5cc10af7520316b8fbfd630d8cdc48448d2581
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Thu Jan 6 16:43:21 2022 +0000

    tidy logging esp for some edge case errors
---
 .../BrooklynComponentTemplateResolver.java         | 20 ++++++-----
 .../catalog/internal/BasicBrooklynCatalog.java     | 39 +++++++++++++---------
 .../core/objs/BasicEntityTypeRegistry.java         |  4 +++
 .../core/typereg/TypePlanTransformers.java         | 14 +++++---
 4 files changed, 48 insertions(+), 29 deletions(-)

diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index f8c9844..eacb289 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -199,15 +199,17 @@ public class BrooklynComponentTemplateResolver {
             }
             throw new IllegalStateException("Unable to create spec for type " + type + ". " + msgDetails);
         }
-        spec = EntityManagementUtils.unwrapEntity(spec);
-
-        CampResolver.fixScopeRootAtRoot(mgmt, spec);
-
-        populateSpec(spec, encounteredRegisteredTypeSymbolicNames);
-
-        @SuppressWarnings("unchecked")
-        EntitySpec<T> typedSpec = (EntitySpec<T>) spec;
-        return typedSpec;
+        try {
+            spec = EntityManagementUtils.unwrapEntity(spec);
+            CampResolver.fixScopeRootAtRoot(mgmt, spec);
+            populateSpec(spec, encounteredRegisteredTypeSymbolicNames);
+
+            @SuppressWarnings("unchecked")
+            EntitySpec<T> typedSpec = (EntitySpec<T>) spec;
+            return typedSpec;
+        } catch (Exception e) {
+            throw Exceptions.propagateAnnotated("Error populating spec "+spec, e);
+        }
     }
 
     private List<EntitySpecResolver> getServiceTypeResolverOverrides() {
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 4cde1de..64b578f 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -843,7 +843,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
         // if version not set, infer from: id, then from name, then item version
         if (versionFromId!=null) {
             if (Strings.isNonBlank(version) && !versionFromId.equals(version)) {
-                throw new IllegalArgumentException("Discrepency between version set in id " + versionFromId + " and version property " + version);
+                throw new IllegalArgumentException("Discrepancy between version set in id " + versionFromId + " and version property " + version);
             }
             version = versionFromId;
         }
@@ -857,8 +857,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
             if (Strings.isBlank(version)) {
                 version = setFromItemIfUnset(version, itemAsMap, "version");
                 version = setFromItemIfUnset(version, itemAsMap, "template_version");
-                if (version==null) {
-                    log.debug("No version specified for catalog item " + symbolicName + ". Using default value.");
+                if (Strings.isBlank(version)) {
+                    if (log.isTraceEnabled()) log.trace("No version specified for catalog item " + symbolicName + " or BOM ancestors. Using default/bundle value.");
                     version = null;
                 }
             }
@@ -958,6 +958,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
                 }
                 if (version==null) {
                     // use this as default version when nothing specified or inferrable from containing bundle
+                    log.debug("No version specified for catalog item " + symbolicName + " or BOM ancestors and not available from bundle. Using default value "+BasicBrooklynCatalog.NO_VERSION+".");
                     version = BasicBrooklynCatalog.NO_VERSION;
                 }
             }
@@ -1605,7 +1606,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
      * primarily used to downgrade log messages when trying to resolve with different strategies.
      * can also be used to say which item is being currently resolved.
      */
-    public static ThreadLocal<String> currentlyResolvingType = new ThreadLocal<String>();
+    public static ThreadLocal<String> currentlyResolvingType = new ThreadLocal<>();
+    public static ThreadLocal<RegisteredType> currentlyValidatingType = new ThreadLocal<>();
 
     private String makeAsIndentedList(String yaml) {
         String[] lines = yaml.split("\n");
@@ -1790,20 +1792,25 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
     
     @Override @Beta
     public Collection<Throwable> validateType(RegisteredType typeToValidate, RegisteredTypeLoadingContext constraint, boolean allowUnresolved) {
-        ReferenceWithError<RegisteredType> result = validateResolve(typeToValidate, constraint);
-        if (result.hasError()) {
-            if (allowUnresolved && RegisteredTypes.isTemplate(typeToValidate)) {
-                // ignore for templates
-                return Collections.emptySet();
-            }
-            if (result.getError() instanceof CompoundRuntimeException) {
-                return ((CompoundRuntimeException)result.getError()).getAllCauses();
+        try {
+            currentlyValidatingType.set(typeToValidate);
+            ReferenceWithError<RegisteredType> result = validateResolve(typeToValidate, constraint);
+            if (result.hasError()) {
+                if (allowUnresolved && RegisteredTypes.isTemplate(typeToValidate)) {
+                    // ignore for templates
+                    return Collections.emptySet();
+                }
+                if (result.getError() instanceof CompoundRuntimeException) {
+                    return ((CompoundRuntimeException)result.getError()).getAllCauses();
+                }
+                return Collections.singleton(result.getError());
             }
-            return Collections.singleton(result.getError());
+            // replace what's in catalog with resolved+validated version
+            ((BasicBrooklynTypeRegistry) mgmt.getTypeRegistry()).addToLocalUnpersistedTypeRegistry(result.get(), true);
+            return Collections.emptySet();
+        } finally {
+            currentlyValidatingType.set(null);
         }
-        // replace what's in catalog with resolved+validated version
-        ((BasicBrooklynTypeRegistry) mgmt.getTypeRegistry()).addToLocalUnpersistedTypeRegistry(result.get(), true);
-        return Collections.emptySet();
     }
 
     /** 
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/BasicEntityTypeRegistry.java b/core/src/main/java/org/apache/brooklyn/core/objs/BasicEntityTypeRegistry.java
index 720241c..206f84d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/BasicEntityTypeRegistry.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/BasicEntityTypeRegistry.java
@@ -105,12 +105,16 @@ public class BasicEntityTypeRegistry implements EntityTypeRegistry {
     }
 
     private <T extends Entity> Class<? extends T> getFromAnnotation(Class<T> type) {
+      try {
         ImplementedBy annotation = type.getAnnotation(org.apache.brooklyn.api.entity.ImplementedBy.class);
         if (annotation == null) 
             return null;
         Class<? extends Entity> value = annotation.value();
         checkIsImplementation(type, value);
         return (Class<? extends T>) value;
+      } catch (Exception e) {
+        throw Exceptions.propagateAnnotated("Error reading ImplementedBy on "+type, e);
+      }
     }
 
     private <T extends Entity> Class<? super T> getInterfaceWithAnnotationMatching(Class<T> implClazz) {
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/TypePlanTransformers.java b/core/src/main/java/org/apache/brooklyn/core/typereg/TypePlanTransformers.java
index 94d2b57..8de3d51 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/TypePlanTransformers.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/TypePlanTransformers.java
@@ -138,14 +138,20 @@ public class TypePlanTransformers {
         }
         
         if (log.isDebugEnabled()) {
-            Supplier<String> s = () -> "Failure transforming plan; returning summary failure, but for reference "
+            Supplier<String> s = () -> "Interim failure transforming plan "
+                + BasicBrooklynCatalog.currentlyResolvingType.get()+"/"+BasicBrooklynCatalog.currentlyValidatingType.get()
+                + "; will throw/return summary failure and catalog routines often wrap and retry, "
+                + "but for reference in the event this failure is unexpected: "
                 + "potentially applicable transformers were "+transformers+", "
                 + "available ones are "+MutableList.builder().addAll(all(mgmt)).build()+"; "
-                + "failures: "+failuresFromTransformers +"; "
-                + "unsupported by: "+transformersWhoDontSupport;
-            if (BasicBrooklynCatalog.currentlyResolvingType.get()==null) {
+                + "unsupported by: "+transformersWhoDontSupport+"; "
+                + "failures: "+failuresFromTransformers
+                ;
+            if (BasicBrooklynCatalog.currentlyResolvingType.get()==null && BasicBrooklynCatalog.currentlyValidatingType.get()==null) {
+                // if both are null, we don't know who is calling us, so log it as debug
                 log.debug(s.get());
             } else if (log.isTraceEnabled()) {
+                // trace can be enabled to get more information if this is occurring unexpectedly
                 log.trace(s.get());
             }
         }

[brooklyn-server] 02/04: exclude servicemix jersey-core from jclouds (we use jakarta)

Posted by he...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit f0a2860da9c16ce1942f1cfd902c9da6c3af6379
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Thu Jan 6 16:52:15 2022 +0000

    exclude servicemix jersey-core from jclouds (we use jakarta)
    
    doesn't break, but causes extra wiring pain
---
 karaf/features/src/main/feature/feature.xml | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/karaf/features/src/main/feature/feature.xml b/karaf/features/src/main/feature/feature.xml
index f624072..b13d1ab 100644
--- a/karaf/features/src/main/feature/feature.xml
+++ b/karaf/features/src/main/feature/feature.xml
@@ -337,7 +337,10 @@
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.javax-inject/1_1</bundle>
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/1.0_5</bundle>
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.oauth-commons/20100527_1</bundle>
-        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jersey-core/1.11_1</bundle>
+
+        <!-- <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jersey-core/1.11_1</bundle> --> <!-- appears not to be used, and conflicts with jakarta.rs.ws -->
+        <bundle dependency="true">mvn:jakarta.ws.rs/jakarta.ws.rs-api/${jakarta.rs-api.version}</bundle>             <!-- used (elsewhere) instead of above, but insist on here also -->
+
         <!-- <bundle>mvn:org.yaml/snakeyaml/${snakeyaml.jclouds.version}</bundle> --> <!-- prefer our version -->
         <bundle>mvn:org.yaml/snakeyaml/${snakeyaml.version}</bundle>