You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2016/01/15 23:37:47 UTC
[3/5] incubator-brooklyn git commit: external-config in catalog:
avoid parsing items
external-config in catalog: avoid parsing items
Don’t parse the “item” or “items” section when populating the catalog.
The camp-yaml DSL section in that is only parsed when the blueprint is
actually being used, rather than when populating the catalog.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/4dbbc9ca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/4dbbc9ca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/4dbbc9ca
Branch: refs/heads/master
Commit: 4dbbc9cacb211193553eb3ddae9d1c080667508c
Parents: 786db04
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jan 11 15:17:15 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jan 11 15:17:15 2016 +0000
----------------------------------------------------------------------
.../catalog/internal/BasicBrooklynCatalog.java | 55 +++++++++++++-------
1 file changed, 36 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4dbbc9ca/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 4f44dab..7e0b69e 100644
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -362,8 +362,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
private List<CatalogItemDtoAbstract<?,?>> collectCatalogItems(String yaml) {
- Map<String,?> itemDef = Yamls.getAs(Yamls.parseAll(yaml), Map.class);
- Map<String,Object> catalogMetadata = (Map<String, Object>) getFirstAsMap(itemDef, "brooklyn.catalog").orNull();
+ Map<?,?> itemDef = Yamls.getAs(Yamls.parseAll(yaml), Map.class);
+ Map<?,?> catalogMetadata = getFirstAsMap(itemDef, "brooklyn.catalog").orNull();
if (catalogMetadata==null)
log.warn("No `brooklyn.catalog` supplied in catalog request; using legacy mode for "+itemDef);
catalogMetadata = MutableMap.copyOf(catalogMetadata);
@@ -378,7 +378,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
catalogMetadata.remove("items");
if (!itemDef.isEmpty()) {
log.debug("Reading brooklyn.catalog peer keys as item ('top-level syntax')");
- Map<String,Object> rootItem = MutableMap.of("item", (Object) itemDef);
+ Map<String,?> rootItem = MutableMap.of("item", (Object) itemDef);
String rootItemYaml = yaml;
YamlExtract yamlExtract = Yamls.getTextOfYamlAtPath(rootItemYaml, "brooklyn.catalog");
String match = yamlExtract.withOriginalIndentation(true).withKeyIncluded(true).getMatchedYamlTextOrWarn();
@@ -393,24 +393,41 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
@SuppressWarnings("unchecked")
- private void collectCatalogItems(String sourceYaml, Map<?,?> itemMetadata, List<CatalogItemDtoAbstract<?, ?>> result, Map<String,?> parentMetadata) {
+ private void collectCatalogItems(String sourceYaml, Map<?,?> itemMetadata, List<CatalogItemDtoAbstract<?, ?>> result, Map<?,?> parentMetadata) {
if (sourceYaml==null) sourceYaml = new Yaml().dump(itemMetadata);
- itemMetadata = mgmt.getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY).parse((Map<String, Object>) itemMetadata);
-
- try {
- itemMetadata = (Map<String, Object>) Tasks.resolveDeepValue(itemMetadata, Object.class, mgmt.getServerExecutionContext());
- } catch (Exception e) {
- throw Exceptions.propagate(e);
+ Map<?, ?> itemMetadataWithoutItemDef = MutableMap.builder()
+ .putAll(itemMetadata)
+ .remove("item")
+ .remove("items")
+ .build();
+
+ // Parse CAMP-YAML DSL in item metadata (but not in item or items - those will be parsed only when used).
+ CampYamlParser parser = mgmt.getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY);
+ if (parser != null) {
+ itemMetadataWithoutItemDef = parser.parse((Map<String, Object>) itemMetadataWithoutItemDef);
+ try {
+ itemMetadataWithoutItemDef = (Map<String, Object>) Tasks.resolveDeepValue(itemMetadataWithoutItemDef, Object.class, mgmt.getServerExecutionContext());
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+
+ } else {
+ log.info("No Camp-YAML parser regsitered for parsing catalog item DSL; skipping DSL-parsing");
}
- Map<String,Object> catalogMetadata = MutableMap.<String, Object>builder().putAll(parentMetadata).putAll((Map<? extends String, ?>) itemMetadata).build();
+ Map<Object,Object> catalogMetadata = MutableMap.<Object, Object>builder()
+ .putAll(parentMetadata)
+ .putAll(itemMetadataWithoutItemDef)
+ .putIfNotNull("item", itemMetadata.get("item"))
+ .putIfNotNull("items", itemMetadata.get("items"))
+ .build();
// brooklyn.libraries we treat specially, to append the list, with the child's list preferred in classloading order
// `libraries` is supported in some places as a legacy syntax; it should always be `brooklyn.libraries` for new apps
// TODO in 0.8.0 require brooklyn.libraries, don't allow "libraries" on its own
- List<?> librariesNew = MutableList.copyOf(getFirstAs(itemMetadata, List.class, "brooklyn.libraries", "libraries").orNull());
+ List<?> librariesNew = MutableList.copyOf(getFirstAs(itemMetadataWithoutItemDef, List.class, "brooklyn.libraries", "libraries").orNull());
Collection<CatalogBundle> libraryBundlesNew = CatalogItemDtoAbstract.parseLibraries(librariesNew);
List<?> librariesCombined = MutableList.copyOf(librariesNew)
@@ -423,7 +440,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
// (this load is required for the scan below and I think also for yaml resolution)
CatalogUtils.installLibraries(mgmt, libraryBundlesNew);
- Boolean scanJavaAnnotations = getFirstAs(itemMetadata, Boolean.class, "scanJavaAnnotations", "scan_java_annotations").orNull();
+ Boolean scanJavaAnnotations = getFirstAs(itemMetadataWithoutItemDef, Boolean.class, "scanJavaAnnotations", "scan_java_annotations").orNull();
if (scanJavaAnnotations==null || !scanJavaAnnotations) {
// don't scan
} else {
@@ -442,9 +459,9 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
if (items!=null) {
int count = 0;
- for (Map<?,?> i: ((List<Map<String,Object>>)items)) {
+ for (Map<?,?> i: ((List<Map<?,?>>)items)) {
collectCatalogItems(Yamls.getTextOfYamlAtPath(sourceYaml, "items", count).getMatchedYamlTextOrWarn(),
- i, result, catalogMetadata);
+ i, result, catalogMetadata);
count++;
}
}
@@ -592,12 +609,12 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return oldValue;
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromLocal(ManagementContext mgmt, Map<String, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromLocal(ManagementContext mgmt, Map<?, ?> catalogMetadata) {
CatalogDto dto = CatalogDto.newNamedInstance("Local Scanned Catalog", "All annotated Brooklyn entities detected in the classpath", "scanning-local-classpath");
return scanAnnotationsInternal(mgmt, new CatalogDo(dto), catalogMetadata);
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromBundles(ManagementContext mgmt, Collection<CatalogBundle> libraries, Map<String, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromBundles(ManagementContext mgmt, Collection<CatalogBundle> libraries, Map<?, ?> catalogMetadata) {
CatalogDto dto = CatalogDto.newNamedInstance("Bundles Scanned Catalog", "All annotated Brooklyn entities detected in bundles", "scanning-bundles-classpath-"+libraries.hashCode());
List<String> urls = MutableList.of();
for (CatalogBundle b: libraries) {
@@ -618,7 +635,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return scanAnnotationsInternal(mgmt, subCatalog, catalogMetadata);
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsInternal(ManagementContext mgmt, CatalogDo subCatalog, Map<String, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsInternal(ManagementContext mgmt, CatalogDo subCatalog, Map<?, ?> catalogMetadata) {
// TODO this does java-scanning only;
// the call when scanning bundles should use the CatalogItem instead and use OSGi when loading for scanning
// (or another scanning mechanism). see comments on CatalogClasspathDo.load
@@ -999,7 +1016,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
};
}
- private static <T,SpecT> Function<CatalogItemDo<T, SpecT>, CatalogItem<T,SpecT>> itemDoToDtoAddingSelectedMetadataDuringScan(final Map<String, Object> catalogMetadata) {
+ private static <T,SpecT> Function<CatalogItemDo<T, SpecT>, CatalogItem<T,SpecT>> itemDoToDtoAddingSelectedMetadataDuringScan(final Map<?, ?> catalogMetadata) {
return new Function<CatalogItemDo<T,SpecT>, CatalogItem<T,SpecT>>() {
@Override
public CatalogItem<T,SpecT> apply(@Nullable CatalogItemDo<T,SpecT> item) {