JBoss ON log contains "Auto-calculation failure" error messages caused by Underflow or NaN IllegalArgumentException
Environment
- Red Hat JBoss Operations Network (ON) 3.3
- Oracle Database
Issue
-
Server logs contain following error during calculation of metric baselines:
ERROR [org.rhq.enterprise.server.scheduler.jobs.DataCalcJob] (RHQScheduler_Worker-4) Failed to auto-calculate baselines. Cause: javax.ejb.EJBException: java.lang.RuntimeException: Auto-calculation failure: javax.ejb.EJBException: java.lang.RuntimeException: Auto-calculation failure Caused by: org.hibernate.exception.GenericJDBCException: could not insert: [org.rhq.core.domain.measurement.MeasurementBaseline] Caused by: java.lang.IllegalArgumentException: Underflow
-
server.log contains error similar to:
ERROR [org.jboss.as.ejb3.invocation] (RHQScheduler_Worker-2) JBAS014134: EJB Invocation failed on component MeasurementBaselineManagerBean for method public abstract void org.rhq.enterprise.server.measurement.MeasurementBaselineManagerLocal.saveNewBaselines(java.util.Set,java.util.Map): javax.ejb.EJBTransactionRolledbackException: Transaction rolled back ... Caused by: javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction. ... Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not insert: [org.rhq.core.domain.measurement.MeasurementBaseline] ... Caused by: org.hibernate.exception.GenericJDBCException: could not insert: [org.rhq.core.domain.measurement.MeasurementBaseline] ... Caused by: java.sql.SQLException: Error ... Caused by: java.lang.IllegalArgumentException: NaN at oracle.jdbc.driver.OraclePreparedStatement.setDoubleInternal(OraclePreparedStatement.java:5621) [ojdbc6-12.1.0.1.0.jar:12.1.0.1.0] at oracle.jdbc.driver.OraclePreparedStatement.setDouble(OraclePreparedStatement.java:5596) [ojdbc6-12.1.0.1.0.jar:12.1.0.1.0] at oracle.jdbc.driver.OraclePreparedStatementWrapper.setDouble(OraclePreparedStatementWrapper.java:193) [ojdbc6-12.1.0.1.0.jar:12.1.0.1.0] at org.jboss.jca.adapters.jdbc.CachedPreparedStatement.setDouble(CachedPreparedStatement.java:179) at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.setDouble(WrappedPreparedStatement.java:287) ... 265 more
Resolution
This issue is resolved in JBoss ON 3.3 Update-09 (3.3.9) and later.
If unable to apply the update, the NaN messages can be ignored.
Root Cause
This issue appears to be a result of the org.rhq.core.domain.measurement.MeasurementBaseline containing entity values that are marked with the annotation property nullable = false. For more details see This content is not included.Red Hat Bugzilla 1315314 and This content is not included.Red Hat Bugzilla 1431097.
Diagnostic Steps
-
Review the server log for the following error message:
ERROR [org.rhq.enterprise.server.measurement.MeasurementBaselineManagerBean] (RHQScheduler_Worker-4) Failed to auto-calculate baselines: javax.ejb.EJBTransactionRolledbackException: Transaction rolled back at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleEndTransactionException(CMTTxInterceptor.java:138) [jboss-as-ejb3-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] at org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:118) [jboss-as-ejb3-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] ... at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerLocal$$$view12.saveNewBaselines(Unknown Source) [rhq-server.jar:4.12.0.JON330GA] at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerBean.saveNewBaselinesChunk(MeasurementBaselineManagerBean.java:311) [rhq-server.jar:4.12.0.JON330GA] at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerBean.saveNewBaselines(MeasurementBaselineManagerBean.java:301) [rhq-server.jar:4.12.0.JON330GA] at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerBean.calculateBaselines(MeasurementBaselineManagerBean.java:280) [rhq-server.jar:4.12.0.JON330GA] ... at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerLocal$$$view12.calculateBaselines(Unknown Source) [rhq-server.jar:4.12.0.JON330GA] at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerBean.calculateAutoBaselines(MeasurementBaselineManagerBean.java:206) [rhq-server.jar:4.12.0.JON330GA] ... at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerLocal$$$view12.calculateAutoBaselines(Unknown Source) [rhq-server.jar:4.12.0.JON330GA] at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerBean.calculateAutoBaselines(MeasurementBaselineManagerBean.java:134) [rhq-server.jar:4.12.0.JON330GA] ... at org.rhq.enterprise.server.measurement.MeasurementBaselineManagerLocal$$$view12.calculateAutoBaselines(Unknown Source) [rhq-server.jar:4.12.0.JON330GA] at org.rhq.enterprise.server.scheduler.jobs.DataCalcJob.calculateAutoBaselines(DataCalcJob.java:116) [rhq-server.jar:4.12.0.JON330GA] at org.rhq.enterprise.server.scheduler.jobs.DataCalcJob.executeJobCode(DataCalcJob.java:84) [rhq-server.jar:4.12.0.JON330GA] at org.rhq.enterprise.server.scheduler.jobs.AbstractStatefulJob.execute(AbstractStatefulJob.java:48) [rhq-server.jar:4.12.0.JON330GA] at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [quartz-1.6.5.jar:1.6.5] at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525) [quartz-1.6.5.jar:1.6.5] ... Caused by: org.hibernate.exception.GenericJDBCException: could not insert: [org.rhq.core.domain.measurement.MeasurementBaseline] at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) [hibernate-core-4.2.14.SP1-redhat-1.jar:4.2.14.SP1-redhat-1] at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:124) [hibernate-core-4.2.14.SP1-redhat-1.jar:4.2.14.SP1-redhat-1] ... Caused by: java.sql.SQLException: Error at org.jboss.jca.adapters.jdbc.WrappedConnection.checkException(WrappedConnection.java:1648) at org.jboss.jca.adapters.jdbc.WrappedStatement.checkException(WrappedStatement.java:1267) at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.setDouble(WrappedPreparedStatement.java:291) at org.hibernate.type.descriptor.sql.DoubleTypeDescriptor$1.doBind(DoubleTypeDescriptor.java:57) [hibernate-core-4.2.14.SP1-redhat-1.jar:4.2.14.SP1-redhat-1] at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:93) [hibernate-core-4.2.14.SP1-redhat-1.jar:4.2.14.SP1-redhat-1] ... Caused by: java.lang.IllegalArgumentException: Underflow at oracle.jdbc.driver.OraclePreparedStatement.setDoubleInternal(OraclePreparedStatement.java:5626) [ojdbc6-12.1.0.1.0.jar:12.1.0.1.0] at oracle.jdbc.driver.OraclePreparedStatement.setDouble(OraclePreparedStatement.java:5596) [ojdbc6-12.1.0.1.0.jar:12.1.0.1.0] at oracle.jdbc.driver.OraclePreparedStatementWrapper.setDouble(OraclePreparedStatementWrapper.java:193) [ojdbc6-12.1.0.1.0.jar:12.1.0.1.0] at org.jboss.jca.adapters.jdbc.CachedPreparedStatement.setDouble(CachedPreparedStatement.java:179) at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.setDouble(WrappedPreparedStatement.java:287) ... 259 more -
Use the following Content from byteman.jboss.org is not included.JBoss Byteman rule file to log the calculated baseline values:
######################################################################## # To the extent possible under law, Red Hat, Inc. has dedicated all # copyright to this software to the public domain worldwide, pursuant # to the CC0 Public Domain Dedication. This software is distributed # without any warranty. # # See <http://creativecommons.org/publicdomain/zero/1.0/>. # # # JBM-KBS1469933 Rule File # # This JBoss Byteman rule set may be helpful in determining if a bad # measurement baseline value is being sent to the database. # RULE Log baselines for saveNewBaselines request INTERFACE org.rhq.enterprise.server.measurement.MeasurementBaselineManagerLocal METHOD void saveNewBaselines(java.util.Set, java.util.Map) AT ENTRY BIND log:org.apache.commons.logging.Log = org.apache.commons.logging.LogFactory.getLog(org.rhq.enterprise.server.measurement.MeasurementBaselineManagerBean.class); IF $1 != null DO log.info("JBM-KBS1469933: saveNewBaselines invoked with baselines [" + $2 + "]"); ENDRULEWhen the error reoccurs, you should see an INFO message in the server log immediately before the error that includes the baseline values that were being written to the database. The log message will include the keyword
JBM-KBS1469933. This data may be helpful in understanding why a database error may have occurred.
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.