Funs, Santhosh fixed this problem yesterday. 
https://issues.apache.org/jira/browse/CLOUDSTACK-7079 has more details.

Thanks,
Likitha

-----Original Message-----
From: Funs Kessen [mailto:fkes...@schubergphilis.com] 
Sent: Thursday, July 10, 2014 2:10 PM
To: dev@cloudstack.apache.org
Cc: Daan Hoogland
Subject: "Bug" introduced by part of commit 
a600d8408ea86782318139c17cf346c8497943d0

Hi Devs,

I recently noticed on master that after starting, stopping and starting the 
management server again I get stacktraces about every second.
After some digging with Daan we found that part of the 
a600d8408ea86782318139c17cf346c84979943d0 commit causes this. The problem is 
however deeper rooted, as the code is supposed to update the mshost table, but 
because another Session ID (actually _runId from ClusterManagerImpl.java from 
the previous run)  is already in there the update fails. The Session ID is 
based on time in milliseconds, and offcourse changes when you stop and start 
the management server again.
Prior to the commit it failed silently, and has done so since the initial 
checkin it seems. The real question is what the original idea is behind the 
_runId, and is it something that requires fixing ?

I've pasted part of the commit, sql and stacktrace below.

Cheers,

Funs

===
mysql> select * from mshost;
+----+----------------+---------------+---------+-------+----------------+------------+--------------+---------------------+---------+-------------+
| id | msid           | runid         | name    | state | version        | 
service_ip | service_port | last_update         | removed | alert_count |
+----+----------------+---------------+---------+-------+----------------+------------+--------------+---------------------+---------+-------------+
|  1 | 90520734207775 | 1404924979461 | cs-mgmt | Up    | 4.5.0-SNAPSHOT | 
127.0.0.1  |         9090 | 2014-07-09 16:58:07 | NULL    |           0 |
+----+----------------+---------------+---------+-------+----------------+------------+--------------+---------------------+---------+-------------+
1 row in set (0.00 sec)

===
commit a600d8408ea86782318139c17cf346c8497943d0
Author: Santhosh Edukulla <santhosh.eduku...@gmail.com> 2014-07-02 10:38:16
Committer: Santhosh Edukulla <santhosh.eduku...@gmail.com> 2014-07-04 12:47:58

Fixed Resource Leaks, null dereferences, few other issues reported by coverity

- framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java 
diff --git 
a/framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java 
b/framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java
index 3d0c3f5..89d7d27 100644
--- 
a/framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java
+++ 
b/framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java
@@ -53,15 +53,14 @@
     @Override
     public void invalidateRunSession(long id, long runid) {
         TransactionLegacy txn = TransactionLegacy.currentTxn();
-        PreparedStatement pstmt = null;
-        try {
-            pstmt = txn.prepareAutoCloseStatement("update mshost set runid=0, 
state='Down' where id=? and runid=?");
-            pstmt.setLong(1, id);
-            pstmt.setLong(2, runid);
-
-            pstmt.executeUpdate();
+        try (PreparedStatement pstmt = txn.prepareStatement("update mshost set 
runid=0, state='Down' where id=? and runid=?");){
+            if(pstmt != null) {
+                pstmt.setLong(1, id);
+                pstmt.setLong(2, runid);
+                pstmt.executeUpdate();
+            }
         } catch (SQLException e) {
-            throw new CloudRuntimeException("DB exception on " + 
pstmt.toString(), e);
+            throw new CloudRuntimeException("invalidateRunSession:Exception:"+ 
e.getMessage(), e);
         }
     }

===
2014-07-09 18:45:06,541 WARN  [c.c.c.d.ManagementServerHostDaoImpl] 
(Cluster-Heartbeat-1:ctx-5f2f8ad5) update:Exception:Invalid cluster session 
detected
com.cloud.utils.exception.CloudRuntimeException: Invalid cluster session 
detected
        at 
com.cloud.cluster.dao.ManagementServerHostDaoImpl.update(ManagementServerHostDaoImpl.java:147)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
com.cloud.utils.db.TransactionContextInterceptor.invoke(TransactionContextInterceptor.java:34)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
        at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at com.sun.proxy.$Proxy158.update(Unknown Source)
        at 
com.cloud.cluster.ClusterManagerImpl$4.runInContext(ClusterManagerImpl.java:545)
        at 
org.apache.cloudstack.managed.context.ManagedContextRunnable$1.run(ManagedContextRunnable.java:49)
        at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
        at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
        at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
        at 
org.apache.cloudstack.managed.context.ManagedContextRunnable.run(ManagedContextRunnable.java:46)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        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:744)
Caused by: com.cloud.cluster.ClusterInvalidSessionException: runid 
1404924278923 is no longer valid
        at 
com.cloud.cluster.dao.ManagementServerHostDaoImpl.update(ManagementServerHostDaoImpl.java:147)
        ... 26 more
2014-07-09 18:45:06,543 ERROR [c.c.c.ClusterManagerImpl] 
(Cluster-Heartbeat-1:ctx-5f2f8ad5) Unexpected exception in cluster heartbeat
java.lang.RuntimeException: update:Exception:Invalid cluster session detected
        at 
com.cloud.cluster.dao.ManagementServerHostDaoImpl.update(ManagementServerHostDaoImpl.java:155)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
com.cloud.utils.db.TransactionContextInterceptor.invoke(TransactionContextInterceptor.java:34)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
        at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at com.sun.proxy.$Proxy158.update(Unknown Source)
        at 
com.cloud.cluster.ClusterManagerImpl$4.runInContext(ClusterManagerImpl.java:545)
        at 
org.apache.cloudstack.managed.context.ManagedContextRunnable$1.run(ManagedContextRunnable.java:49)
        at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
        at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
        at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
        at 
org.apache.cloudstack.managed.context.ManagedContextRunnable.run(ManagedContextRunnable.java:46)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        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:744)
Caused by: com.cloud.utils.exception.CloudRuntimeException: Invalid cluster 
session detected
        at 
com.cloud.cluster.dao.ManagementServerHostDaoImpl.update(ManagementServerHostDaoImpl.java:147)
        ... 26 more
Caused by: com.cloud.cluster.ClusterInvalidSessionException: runid 
1404924278923 is no longer valid
        at 
com.cloud.cluster.dao.ManagementServerHostDaoImpl.update(ManagementServerHostDaoImpl.java:147)
        ... 26 more



Reply via email to