[ 
https://issues.apache.org/jira/browse/BROOKLYN-201?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sam Corbett updated BROOKLYN-201:
---------------------------------
    Description: 
I observed a strange problem in which a Tomcat server appeared to be missing 
most sensor values.

Context:

Two-member dynamic cluster of Tomcat servers with identical member specs.
Member 1: GZKUwB3x
Member 2: l1LEYWIA

Each member has a mirror entity:
Member #1 mirror: cn7VfAGi
Member #2 mirror: nwVhOYzr  

#1 deployed normally.

#2 failed to start:
{code}
Failed after 4ms: Execution failed, invocation error for JMX_SETUP_PREINSTALL 
Tomcat8ServerImpl{id=l1LEYWIA}: jmx port must not be null for 
Tomcat8ServerImpl{id=l1LEYWIA}: java.lang.NullPointerException: jmx port must 
not be null for Tomcat8ServerImpl{id=l1LEYWIA}

java.lang.IllegalStateException: Execution failed, invocation error for 
JMX_SETUP_PREINSTALL Tomcat8ServerImpl{id=l1LEYWIA}: jmx port must not be null 
for Tomcat8ServerImpl{id=l1LEYWIA}
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.logWithDetailsAndThrow(ScriptHelper.java:387)
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.executeInternal(ScriptHelper.java:370)
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper$8.call(ScriptHelper.java:287)
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper$8.call(ScriptHelper.java:285)
        at 
org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:342)
        at 
org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:468)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: jmx port must not be null for 
Tomcat8ServerImpl{id=l1LEYWIA}
        at 
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:253)
        at 
org.apache.brooklyn.entity.java.JmxSupport.applyJmxJavaSystemProperties(JmxSupport.java:275)
        at 
org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJmxJavaSystemProperties(JavaSoftwareProcessSshDriver.java:258)
        at 
org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJavaSystemProperties(JavaSoftwareProcessSshDriver.java:205)
        at 
org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJavaOpts(JavaSoftwareProcessSshDriver.java:125)
        at 
org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getShellEnvironment(JavaSoftwareProcessSshDriver.java:105)
        at 
org.apache.brooklyn.entity.webapp.tomcat.TomcatSshDriver.getShellEnvironment(TomcatSshDriver.java:139)
        at 
org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessSshDriver.execute(AbstractSoftwareProcessSshDriver.java:261)
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.executeInternal(ScriptHelper.java:366)
        ... 8 more
{code}

This is the command that failed:
{code}
Integer jmxPort = Preconditions.checkNotNull(entity.getAttribute(JMX_PORT), 
"jmx port must not be null for %s", entity);
{code}

So for some reason the Tomcat entity with id l1LEYWIA has no jmx.port sensor.

In the debug log, before the exception is thrown:

{code}
2015-12-08 15:23:15,994 DEBUG o.a.b.c.s.PortAttributeSensorAndConfigKey 
[brooklyn-execmanager-C52UZvVL-147269]: Tomcat8ServerImpl{id=l1LEYWIA}: 
choosing port 31001 for jmx.direct.port
2015-12-08 15:23:16,116 DEBUG o.a.b.c.entity.AbstractEntity 
[brooklyn-execmanager-C52UZvVL-147272]: Emitting sensor notification 
entity.sensor.added value Sensor: jmx.direct.port (java.lang.Integer) on 
DelegateEntityImpl{id=nwVhOYzr}
2015-12-08 15:23:19,537 DEBUG o.a.b.c.s.PortAttributeSensorAndConfigKey 
[brooklyn-execmanager-C52UZvVL-147228]: Tomcat8ServerImpl{id=GZKUwB3x}: 
choosing port 31001 for jmx.direct.port
2015-12-08 15:23:19,537 DEBUG o.a.b.c.entity.AbstractEntity 
[brooklyn-execmanager-C52UZvVL-147136]: Emitting sensor notification 
entity.sensor.added value Sensor: jmx.direct.port (java.lang.Integer) on 
DelegateEntityImpl{id=cn7VfAGi}
{code}

But the attribute _had_ been set on the entity.

To make things more confusing, refer to the images attached to this issue.

Image 1 shows the senors for the running entity (GZKUwB3x)
Image 2 shows all sensors for the failed entity (l1LEYWIA, including those with 
no value)
Image 3 shows only the sensors on the failed entity (l1LEYWIA) that have a 
value set
Image 4 shows only the sensors on the failed entity's delegate (nwVhOYzr) that 
have a value set.
Image 5 shows the failed task.

2 and 4 are the most interesting. The real entity has no sensors set but its 
delegate does?! Note that the delegate entity has a value for jmx.direct.port 
and has none of the Clocker attributes like docker.host or 
docker.infrastructure.

As far as I can tell from the logs the sensor value for jmx.direct.port was not 
subequently unset. No sensor notifications were emitted for it after it was 
first set.



  was:
I observed a strange problem in which a Tomcat server appeared to be missing 
most sensor values.

Context:

Two-member dynamic cluster of Tomcat servers with identical member specs.
Member 1: GZKUwB3x
Member 2: l1LEYWIA

Each member has a mirror entity:
Member #1 mirror: cn7VfAGi
Member #2 mirror: nwVhOYzr  

#1 deployed normally.

#2 failed to start:
{code}
Failed after 4ms: Execution failed, invocation error for JMX_SETUP_PREINSTALL 
Tomcat8ServerImpl{id=l1LEYWIA}: jmx port must not be null for 
Tomcat8ServerImpl{id=l1LEYWIA}: java.lang.NullPointerException: jmx port must 
not be null for Tomcat8ServerImpl{id=l1LEYWIA}

java.lang.IllegalStateException: Execution failed, invocation error for 
JMX_SETUP_PREINSTALL Tomcat8ServerImpl{id=l1LEYWIA}: jmx port must not be null 
for Tomcat8ServerImpl{id=l1LEYWIA}
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.logWithDetailsAndThrow(ScriptHelper.java:387)
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.executeInternal(ScriptHelper.java:370)
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper$8.call(ScriptHelper.java:287)
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper$8.call(ScriptHelper.java:285)
        at 
org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:342)
        at 
org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:468)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: jmx port must not be null for 
Tomcat8ServerImpl{id=l1LEYWIA}
        at 
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:253)
        at 
org.apache.brooklyn.entity.java.JmxSupport.applyJmxJavaSystemProperties(JmxSupport.java:275)
        at 
org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJmxJavaSystemProperties(JavaSoftwareProcessSshDriver.java:258)
        at 
org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJavaSystemProperties(JavaSoftwareProcessSshDriver.java:205)
        at 
org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJavaOpts(JavaSoftwareProcessSshDriver.java:125)
        at 
org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getShellEnvironment(JavaSoftwareProcessSshDriver.java:105)
        at 
org.apache.brooklyn.entity.webapp.tomcat.TomcatSshDriver.getShellEnvironment(TomcatSshDriver.java:139)
        at 
org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessSshDriver.execute(AbstractSoftwareProcessSshDriver.java:261)
        at 
org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.executeInternal(ScriptHelper.java:366)
        ... 8 more
{code}

This is the command that failed:
{code}
Integer jmxPort = Preconditions.checkNotNull(entity.getAttribute(JMX_PORT), 
"jmx port must not be null for %s", entity);
{code}

So for some reason the Tomcat entity with id l1LEYWIA has no jmx.port sensor.

In the debug log, before the exception is thrown:

{code}
2015-12-08 15:23:15,994 DEBUG o.a.b.c.s.PortAttributeSensorAndConfigKey 
[brooklyn-execmanager-C52UZvVL-147269]: Tomcat8ServerImpl{id=l1LEYWIA}: 
choosing port 31001 for jmx.direct.port
2015-12-08 15:23:16,116 DEBUG o.a.b.c.entity.AbstractEntity 
[brooklyn-execmanager-C52UZvVL-147272]: Emitting sensor notification 
entity.sensor.added value Sensor: jmx.direct.port (java.lang.Integer) on 
DelegateEntityImpl{id=nwVhOYzr}
2015-12-08 15:23:19,537 DEBUG o.a.b.c.s.PortAttributeSensorAndConfigKey 
[brooklyn-execmanager-C52UZvVL-147228]: Tomcat8ServerImpl{id=GZKUwB3x}: 
choosing port 31001 for jmx.direct.port
2015-12-08 15:23:19,537 DEBUG o.a.b.c.entity.AbstractEntity 
[brooklyn-execmanager-C52UZvVL-147136]: Emitting sensor notification 
entity.sensor.added value Sensor: jmx.direct.port (java.lang.Integer) on 
DelegateEntityImpl{id=cn7VfAGi}
{code}

But the attribute _had_ been set on the entity.

To make things more confusing, refer to the images attached to this issue.

Image 1 shows the senors for the running entity (GZKUwB3x)
Image 2 shows all sensors for the failed entity (l1LEYWIA, including those with 
no value)
Image 3 shows only the sensors on the failed entity (l1LEYWIA) that have a 
value set
Image 4 shows only the sensors on the failed entity's delegate (nwVhOYzr) that 
have a value set.
Image 5 shows the failed task.

3 and 4 are the most interesting. The real entity has no sensors set but its 
delegate does?! Note that the delegate entity has a value for jmx.direct.port 
and has none of the Clocker attributes like docker.host or 
docker.infrastructure.

As far as I can tell from the logs the sensor value for jmx.direct.port was not 
subequently unset. No sensor notifications were emitted for it after it was 
first set.




> Failure retrieving port sensor value for TomcatServer
> -----------------------------------------------------
>
>                 Key: BROOKLYN-201
>                 URL: https://issues.apache.org/jira/browse/BROOKLYN-201
>             Project: Brooklyn
>          Issue Type: Bug
>            Reporter: Sam Corbett
>         Attachments: 1-running-entity-sensors.png, 
> 2-failed-entity-all-sensors.png, 3-failed-entity-sensors-with-value.png, 
> 4-failed-entity-sensors-with-value-under-docker-app.png, 5-task-error.png
>
>
> I observed a strange problem in which a Tomcat server appeared to be missing 
> most sensor values.
> Context:
> Two-member dynamic cluster of Tomcat servers with identical member specs.
> Member 1: GZKUwB3x
> Member 2: l1LEYWIA
> Each member has a mirror entity:
> Member #1 mirror: cn7VfAGi
> Member #2 mirror: nwVhOYzr  
> #1 deployed normally.
> #2 failed to start:
> {code}
> Failed after 4ms: Execution failed, invocation error for JMX_SETUP_PREINSTALL 
> Tomcat8ServerImpl{id=l1LEYWIA}: jmx port must not be null for 
> Tomcat8ServerImpl{id=l1LEYWIA}: java.lang.NullPointerException: jmx port must 
> not be null for Tomcat8ServerImpl{id=l1LEYWIA}
> java.lang.IllegalStateException: Execution failed, invocation error for 
> JMX_SETUP_PREINSTALL Tomcat8ServerImpl{id=l1LEYWIA}: jmx port must not be 
> null for Tomcat8ServerImpl{id=l1LEYWIA}
>       at 
> org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.logWithDetailsAndThrow(ScriptHelper.java:387)
>       at 
> org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.executeInternal(ScriptHelper.java:370)
>       at 
> org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper$8.call(ScriptHelper.java:287)
>       at 
> org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper$8.call(ScriptHelper.java:285)
>       at 
> org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:342)
>       at 
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:468)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>       at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.NullPointerException: jmx port must not be null for 
> Tomcat8ServerImpl{id=l1LEYWIA}
>       at 
> com.google.common.base.Preconditions.checkNotNull(Preconditions.java:253)
>       at 
> org.apache.brooklyn.entity.java.JmxSupport.applyJmxJavaSystemProperties(JmxSupport.java:275)
>       at 
> org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJmxJavaSystemProperties(JavaSoftwareProcessSshDriver.java:258)
>       at 
> org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJavaSystemProperties(JavaSoftwareProcessSshDriver.java:205)
>       at 
> org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getJavaOpts(JavaSoftwareProcessSshDriver.java:125)
>       at 
> org.apache.brooklyn.entity.java.JavaSoftwareProcessSshDriver.getShellEnvironment(JavaSoftwareProcessSshDriver.java:105)
>       at 
> org.apache.brooklyn.entity.webapp.tomcat.TomcatSshDriver.getShellEnvironment(TomcatSshDriver.java:139)
>       at 
> org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessSshDriver.execute(AbstractSoftwareProcessSshDriver.java:261)
>       at 
> org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper.executeInternal(ScriptHelper.java:366)
>       ... 8 more
> {code}
> This is the command that failed:
> {code}
> Integer jmxPort = Preconditions.checkNotNull(entity.getAttribute(JMX_PORT), 
> "jmx port must not be null for %s", entity);
> {code}
> So for some reason the Tomcat entity with id l1LEYWIA has no jmx.port sensor.
> In the debug log, before the exception is thrown:
> {code}
> 2015-12-08 15:23:15,994 DEBUG o.a.b.c.s.PortAttributeSensorAndConfigKey 
> [brooklyn-execmanager-C52UZvVL-147269]: Tomcat8ServerImpl{id=l1LEYWIA}: 
> choosing port 31001 for jmx.direct.port
> 2015-12-08 15:23:16,116 DEBUG o.a.b.c.entity.AbstractEntity 
> [brooklyn-execmanager-C52UZvVL-147272]: Emitting sensor notification 
> entity.sensor.added value Sensor: jmx.direct.port (java.lang.Integer) on 
> DelegateEntityImpl{id=nwVhOYzr}
> 2015-12-08 15:23:19,537 DEBUG o.a.b.c.s.PortAttributeSensorAndConfigKey 
> [brooklyn-execmanager-C52UZvVL-147228]: Tomcat8ServerImpl{id=GZKUwB3x}: 
> choosing port 31001 for jmx.direct.port
> 2015-12-08 15:23:19,537 DEBUG o.a.b.c.entity.AbstractEntity 
> [brooklyn-execmanager-C52UZvVL-147136]: Emitting sensor notification 
> entity.sensor.added value Sensor: jmx.direct.port (java.lang.Integer) on 
> DelegateEntityImpl{id=cn7VfAGi}
> {code}
> But the attribute _had_ been set on the entity.
> To make things more confusing, refer to the images attached to this issue.
> Image 1 shows the senors for the running entity (GZKUwB3x)
> Image 2 shows all sensors for the failed entity (l1LEYWIA, including those 
> with no value)
> Image 3 shows only the sensors on the failed entity (l1LEYWIA) that have a 
> value set
> Image 4 shows only the sensors on the failed entity's delegate (nwVhOYzr) 
> that have a value set.
> Image 5 shows the failed task.
> 2 and 4 are the most interesting. The real entity has no sensors set but its 
> delegate does?! Note that the delegate entity has a value for jmx.direct.port 
> and has none of the Clocker attributes like docker.host or 
> docker.infrastructure.
> As far as I can tell from the logs the sensor value for jmx.direct.port was 
> not subequently unset. No sensor notifications were emitted for it after it 
> was first set.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to