Svetoslav Neykov created BROOKLYN-356:
-----------------------------------------
Summary: The sensor Transformer enricher fails to resolve its
targetValue indeterministically.
Key: BROOKLYN-356
URL: https://issues.apache.org/jira/browse/BROOKLYN-356
Project: Brooklyn
Issue Type: Bug
Reporter: Svetoslav Neykov
The sensor {{Transformer}} enricher fails to resolve its {{targetValue}}
indeterministically, especially so on loaded systems. This is especially
problematic if sourceSensor/triggerSensors change infrequently or do not change
ever (when using default values).
Bueprints using the {{Transformer}} behave perfectly fine during development
and on test setups, but will fail on production machines (i.e. under load).
The code [doing the value
resolving|https://github.com/apache/brooklyn-server/blob/b59e7463a9b337c2d0e7931cd420d5bac68d8549/core/src/main/java/org/apache/brooklyn/enricher/stock/Transformer.java#L90-L94]
tries to do so in a non-blocking fashion by spinning a thread to try to
resolve and cancelling it after a short while without guarantees it ever got
scheduled to run. It's more likely to fail when nesting DSLs, for example
nesting several levels of {{$brooklyn:formatString}} and ending with a
{{$brooklyn:attributeWhenRready}}. It's a common pattern in moderately complex
blueprints. It needs to schedule a thread for each nesting level thus
maximizing the chance that the value will not be resolved in the allotted time
even if resolvabe. This is especially bad for sensors which don't get updated,
for example {{PortAttributeSensorAndConfigKey} set only when initializing the
entity or any config values which are always resolvable.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)