Aled Sage created BROOKLYN-329:
----------------------------------
Summary: $brooklyn:config hangs, rather than getting default
brooklyn.parameter value
Key: BROOKLYN-329
URL: https://issues.apache.org/jira/browse/BROOKLYN-329
Project: Brooklyn
Issue Type: Bug
Reporter: Aled Sage
Priority: Minor
Using 0.10.0-SNAPSHOT...
I wrote a YAML entity where CouchDB was configured with an initial
username/password, and another app that included CouchDB would inject it.
In each blueprint, I defined a brooklyn.parameter with a default value for the
username/password. I used the same config key name in each.
However, when I ran my blueprint it hung. The CouchDB was waiting forever for
the username/password config value.
I recreated this behaviour in the simpler test case below (which I'll add to
{{ConfigParametersYamlTest}}).
The workaround is to use a different name for the config key in each blueprint.
For example, in the outer blueprint above if youchange the name to
{{my.param.key2}} then the test passes.
Debugging it, one surprising thing I noticed is that {{scopeRoot()}} evaluates
to be "entity-with-tests" rather than {{wrapper-entity}}.
{noformat}
public void testConfigParameterPassedFromOuterConfigParameter() throws
Exception {
addCatalogItems(
"brooklyn.catalog:",
" itemType: entity",
" items:",
" - id: entity-with-keys",
" item:",
" type: "+TestEntity.class.getName(),
" brooklyn.parameters:",
" - name: my.param.key",
" type: string",
" default: myDefaultVal",
" brooklyn.config:",
" my.other.key: $brooklyn:config(\"my.param.key\")");
addCatalogItems(
"brooklyn.catalog:",
" itemType: entity",
" items:",
" - id: wrapper-entity",
" item:",
" brooklyn.parameters:",
" - name: my.param.key",
" type: string",
" default: myDefaultValInOuter",
" type: entity-with-keys",
" brooklyn.config:",
" my.param.key:
$brooklyn:scopeRoot().config(\"my.param.key\")");
String yaml = Joiner.on("\n").join(
"services:",
"- type: wrapper-entity");
Entity app = createStartWaitAndLogApplication(yaml);
final TestEntity entity = (TestEntity)
Iterables.getOnlyElement(app.getChildren());
Asserts.assertReturnsEventually(new Runnable() {
public void run() {
assertEquals(entity.config().get(ConfigKeys.newStringConfigKey("my.other.key")),
"myDefaultValInOuter");
}},
Asserts.DEFAULT_LONG_TIMEOUT);
}
{noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)