brooklyn-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aledsage <...@git.apache.org>
Subject [GitHub] brooklyn-server issue #440: BROOKLYN-345: persist brooklyn.parameters (fixes...
Date Thu, 17 Nov 2016 12:48:27 GMT
Github user aledsage commented on the issue:

    https://github.com/apache/brooklyn-server/pull/440
  
    Thanks @neykov - `ConfigNestedYamlTest.testCatalogParameterFromSuperYamlTypeAsSoftware`
is a very annoying and valid failure!
    
    There is a `MapConfigKey` defined on the java type (`SoftwareProcess.TEMPLATE_SUBSTITUTIONS`).
In the yaml (`config-nested-tests,bom`), the super-type declares a brooklyn.parameters for
this: brooklyn.parameters: [ {name: template.substitutions, type: java.util.Map} ]`.
    
    Note the difference in type for the config keys: the first is a `MapConfigKey` and the
latter is a `BasicConfigKey<java.util.Map>`.
    
    When the config values are written into the entity's spec, it uses the `MapConfigKey`
so the value of `{field: val}` is actually written as `{template.substitutions.field: val}`.
    
    When the config value is later read, it uses the `BasicConfigKey<java.util.Map>`,
so it just looks up `template.substitutions` and thus returns an empty map.
    
    ---
    A few things spring to mind:
    1. don't try to change the type of a config key when you're overriding it in brooklyn.parameters.
(However, the user doesn't think they've done this - it's of type map!)
    2. write creating the spec, use the same config key as will subsequently be used for reading
the value back out again.
    3. I really don't like the `MapConfigKey` stuff. Particularly now that we have capabilities
for defining the merge-semantics of map config keys, the need for the `MapConfigKey` is greatly
reduced.
    
    Let's not try to tackle (3) right now, but that is one for the mailing list!
    
    (2) feels like the right thing to do. But it's fiddly. We're in the middle of the stacktrace
below for (one of the places?) where we're writing the config value using the `MapConfigKey`:
    ```
    "main" prio=5 tid=0x00007fdbab000000 nid=0x1703 at breakpoint[0x0000700000217000]
       java.lang.Thread.State: RUNNABLE
            at org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec.configure(AbstractBrooklynObjectSpec.java:293)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynComponentTemplateResolver.configureEntityConfig(BrooklynComponentTemplateResolver.java:337)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynComponentTemplateResolver.decorateSpec(BrooklynComponentTemplateResolver.java:259)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynComponentTemplateResolver.populateSpec(BrooklynComponentTemplateResolver.java:250)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynComponentTemplateResolver.resolveSpec(BrooklynComponentTemplateResolver.java:189)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynAssemblyTemplateInstantiator.buildTemplateServicesAsSpecs(BrooklynAssemblyTemplateInstantiator.java:114)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynAssemblyTemplateInstantiator.createServiceSpecs(BrooklynAssemblyTemplateInstantiator.java:73)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynAssemblyTemplateInstantiator.createApplicationSpec(BrooklynAssemblyTemplateInstantiator.java:90)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.CampResolver.createEntitySpecFromServicesBlock(CampResolver.java:145)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.CampResolver.createSpecFromFull(CampResolver.java:111)
            at org.apache.brooklyn.camp.brooklyn.spi.creation.CampToSpecTransformer.createCatalogSpec(CampToSpecTransformer.java:102)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog$1.apply(BasicBrooklynCatalog.java:331)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog$1.apply(BasicBrooklynCatalog.java:1)
            at org.apache.brooklyn.core.plan.PlanToSpecFactory.attemptWithLoaders(PlanToSpecFactory.java:126)
            at org.apache.brooklyn.core.plan.PlanToSpecFactory.attemptWithLoaders(PlanToSpecFactory.java:118)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.internalCreateSpecLegacy(BasicBrooklynCatalog.java:328)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog$PlanInterpreterGuessingType.attemptType(BasicBrooklynCatalog.java:808)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog$PlanInterpreterGuessingType.reconstruct(BasicBrooklynCatalog.java:735)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.collectCatalogItems(BasicBrooklynCatalog.java:508)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.collectCatalogItems(BasicBrooklynCatalog.java:476)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.collectCatalogItems(BasicBrooklynCatalog.java:383)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.collectCatalogItems(BasicBrooklynCatalog.java:372)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.addItems(BasicBrooklynCatalog.java:929)
            at org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.addItems(BasicBrooklynCatalog.java:1)
            at org.apache.brooklyn.camp.brooklyn.AbstractYamlTest.addCatalogItems(AbstractYamlTest.java:199)
            at org.apache.brooklyn.camp.brooklyn.ConfigNestedYamlTest.testCatalogParameterFromSuperYamlTypeAsSoftware(ConfigNestedYamlTest.java:89)
    ```
    
    Maybe this is one to document and defer? Thoughts?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message