JBoss ON log contains "Auto-calculation failure" error messages caused by Underflow or NaN IllegalArgumentException

Solution Verified - Updated

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 + "]");
      ENDRULE
    

    When 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.

SBR
Category

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.