MangoAutomation / ma-core-public

Mango Automation Core public code
Other
77 stars 50 forks source link

Z-Wave Data Source Error Handling #447

Open terrypacker opened 8 years ago

terrypacker commented 8 years ago

During startup the Z-Wave Control Center can fail to start and cause problems if it cannot access the device library or load it JNI libs. There is no fail safe code to prevent this killing the RuntimeManager at startup.

We need to add logging and some event that is generated if this happens instead of just failing on NPE.

terrypacker commented 8 years ago

To test create a Zwave data source and set to enabled. Then modify the Zwave protocol library jar to not have native binaries for your system. Then restart and see errors logged but startup still happens without the datasource running.

Puckfist commented 8 years ago

Not resolved. A Zwave data source running and pointed at a serial port connection crashes Mango fast from wherever it is. This is not true if the port is actually a zwave device. This is caused in the libraries for zwave and seems to crash in a native method.

Puckfist commented 8 years ago

When I cleared out the native libs, I only got a RuntimeException at boot, NoClassDefFoundError at poll.

zwave stack traces.txt

terrypacker commented 8 years ago

I'm leaving this open and adding a note that the recent changes may have introduced a bug. I'm not uploading a new module to the store for 2.7.2 yet.

Stacktrace:

ERROR 2015-12-22 12:45:41,212 (com.infiniteautomation.zwave.rt.ZwaveDataSourceRT.onNotification:457) - java.io.StreamCorruptedException: invalid type code: 00 
com.serotonin.ShouldNeverHappenException: java.io.StreamCorruptedException: invalid type code: 00
 at com.serotonin.util.SerializationHelper.readObjectInContext(SerializationHelper.java:93)
 at com.serotonin.m2m2.db.dao.DataSourceDao$DataSourceRowMapper.mapRow(DataSourceDao.java:111)
 at com.serotonin.m2m2.db.dao.DataSourceDao$DataSourceRowMapper.mapRow(DataSourceDao.java:108)
 at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)
 at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)
 at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:693)
 at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:629)
 at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:680)
 at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
 at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
 at com.serotonin.db.spring.ExtendedJdbcTemplate.queryForObject(ExtendedJdbcTemplate.java:39)
 at com.serotonin.db.DaoUtils.queryForObject(DaoUtils.java:332)
 at com.serotonin.m2m2.db.dao.AbstractBasicDao.get(AbstractBasicDao.java:317)
 at com.serotonin.m2m2.vo.permission.Permissions.hasEventTypePermission(Permissions.java:253)
 at com.serotonin.m2m2.rt.EventManager.raiseEvent(EventManager.java:119)
 at com.serotonin.m2m2.rt.dataSource.DataSourceRT.raiseEvent(DataSourceRT.java:150)
 at com.infiniteautomation.zwave.rt.ZwaveDataSourceRT.onNotification(ZwaveDataSourceRT.java:174)
 at com.infiniteautomation.zwave.rt.MangoZwaveDriver.onNotification(MangoZwaveDriver.java:99)
 at com.infiniteautomation.zwave.rt.ZwaveControlCenter.onNotification(ZwaveControlCenter.java:93)
Caused by: java.io.StreamCorruptedException: invalid type code: 00
 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1379)
 at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
 at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
 at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
 at com.serotonin.util.SerializationHelper.readObjectInContext(SerializationHelper.java:90)
 ... 18 more