Uploaded image for project: 'Ambari'
  1. Ambari
  2. AMBARI-22827

db-purge-history operation fails with large DB size in postgres.

    XMLWordPrintableJSON

Details

    Description

      When the ambari DB size is too large (around 1+ GB) then the db-purge-history may fail with the postgres error Tried to send an out-of-range integer as a 2-byte value

       

      Following error trace is from Ambari 2.5.2 however the same might cause in higher version as well.

      Internal Exception: org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
      Error Code: 0
      Call: SELECT DISTINCT host_task_id FROM topology_logical_task WHERE (physical_task_id IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
      ....
      ....
      .....
      ......
      ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?))
      
      Query: ReportQuery(name="TopologyLogicalTaskEntity.findHostTaskIdsByPhysicalTaskIds" referenceClass=TopologyLogicalTaskEntity sql="SELECT DISTINCT host_task_id FROM topology_logical_task WHERE (physical_task_id IN ?)")
       at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processExceptionForCommError(DatabaseAccessor.java:1620)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:676)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:560)
       at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2055)
       at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
       at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242)
       at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
       at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:299)
       at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:694)
       at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2740)
       at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllReportQueryRows(ExpressionQueryMechanism.java:2677)
       at org.eclipse.persistence.queries.ReportQuery.executeDatabaseQuery(ReportQuery.java:852)
       at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:904)
       at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1134)
       at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:460)
       at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1222)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1857)
       at org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1927)
       at org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:694)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.retryQuery(UnitOfWorkImpl.java:5536)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1893)
       at org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1927)
       at org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:694)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.retryQuery(UnitOfWorkImpl.java:5536)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1893)
       at org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1927)
       at org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:694)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.retryQuery(UnitOfWorkImpl.java:5536)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1893)
       at org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1927)
       at org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:694)
       at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.retryQuery(UnitOfWorkImpl.java:5536)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1893)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1839)
       at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
       at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
       at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:473)
       at org.apache.ambari.server.orm.dao.DaoUtils.selectList(DaoUtils.java:60)
       at org.apache.ambari.server.orm.dao.TopologyLogicalTaskDAO.findHostTaskIdsByPhysicalTaskIds(TopologyLogicalTaskDAO.java:56)
       at org.apache.ambari.server.orm.AmbariLocalSessionInterceptor.invoke(AmbariLocalSessionInterceptor.java:53)
       at org.apache.ambari.server.orm.dao.RequestDAO.cleanup(RequestDAO.java:403)
       at org.apache.ambari.server.orm.AmbariJpaLocalTxnInterceptor.invoke(AmbariJpaLocalTxnInterceptor.java:128)
       at org.apache.ambari.server.cleanup.CleanupServiceImpl.cleanup(CleanupServiceImpl.java:82)
       at org.apache.ambari.server.cleanup.CleanupDriver.main(CleanupDriver.java:89)
      Caused by: org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
       at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:281)
       at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:559)
       at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
       at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:1009)
       at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644)
      ... 43 more
      Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 43222
       at org.postgresql.core.PGStream.SendInteger2(PGStream.java:196)
       at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1242)
       at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1547)
       at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1100)
       at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:253)
      ... 48 more
      

      Looks like Postgres side limitation of around 32k parameters. However Ambari can send the large number of parameters in batch instead of sending it as bunch.

      Attachments

        Activity

          People

            smolnar Sandor Molnar
            jaysensharma Jay SenSharma
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 2h
                2h