You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ranger.apache.org by "Andrew Luo (Jira)" <ji...@apache.org> on 2023/02/23 17:06:00 UTC

[jira] [Commented] (RANGER-4107) Upgrade EclipseLink

    [ https://issues.apache.org/jira/browse/RANGER-4107?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17692787#comment-17692787 ] 

Andrew Luo commented on RANGER-4107:
------------------------------------

[https://reviews.apache.org/r/74318/]

[https://github.com/apache/ranger/pull/221]

 

> Upgrade EclipseLink
> -------------------
>
>                 Key: RANGER-4107
>                 URL: https://issues.apache.org/jira/browse/RANGER-4107
>             Project: Ranger
>          Issue Type: Improvement
>          Components: admin
>            Reporter: Andrew Luo
>            Priority: Minor
>         Attachments: 0001-RANGER-4107-Upgrade-EclipseLink-to-2.7.12.patch
>
>
> See this comment from [~madhan] on RANGER-4104:
> I was able to reproduce failures in execution of named query {{XXAuthSession.getRecentAuthFailureCountByLoginId}} using a script that calls Ranger REST APIs from multiple threads simultaneously with invalid credentials. I notice at least 3 different types of failures:
> 1. ArrayOutOfBoundsException
> {noformat}
> [EL Warning]: 2023-02-22 20:36:40.8--UnitOfWork(729158064)--Exception [EclipseLink-6168] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
> Exception Description: Query failed to prepare, unexpected error occurred: [java.lang.ArrayIndexOutOfBoundsException: 2].
> Internal Exception: java.lang.ArrayIndexOutOfBoundsException: 2
> Caused by: Exception [EclipseLink-6168] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
> Exception Description: Query failed to prepare, unexpected error occurred: [java.lang.ArrayIndexOutOfBoundsException: 2].
> Internal Exception: java.lang.ArrayIndexOutOfBoundsException: 2
> Query: ReportQuery(name="XXAuthSession.getRecentAuthFailureCountByLoginId" referenceClass=XXAuthSession sql="SELECT COUNT(?) FROM x_auth_sess t0 WHERE (((t0.LOGIN_ID = ?) AND (t0.AUTH_STATUS <> ?)) AND (t0.CREATE_TIME > COALESCE((SELECT MAX(t1.CREATE_TIME) FROM x_auth_sess t1 WHERE (((t1.LOGIN_ID = ?) AND (t1.AUTH_STATUS = ?)) AND (t1.CREATE_TIME > ?))),? )))")
>         at org.eclipse.persistence.exceptions.QueryException.prepareFailed(QueryException.java:1590)
>         at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:680)
>         at org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:901)
>         at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:613)
>         at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:867)
>         at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1127)
>         at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:403)
>         at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1215)
>         at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1751)
>         at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
>         at org.eclipse.persistence.internal.jpa.QueryImpl.getSingleResult(QueryImpl.java:517)
>         ... 66 more
> Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
>         at org.eclipse.persistence.expressions.ListExpressionOperator.getDatabaseStrings(ListExpressionOperator.java:75)
>         at org.eclipse.persistence.expressions.ExpressionOperator.printCollection(ExpressionOperator.java:2196)
>         at org.eclipse.persistence.internal.expressions.ArgumentListFunctionExpression.printSQL(ArgumentListFunctionExpression.java:99)
>         at org.eclipse.persistence.expressions.ExpressionOperator.printDuo(ExpressionOperator.java:2239)
>         at org.eclipse.persistence.internal.expressions.CompoundExpression.printSQL(CompoundExpression.java:286)
>         at org.eclipse.persistence.internal.expressions.RelationExpression.printSQL(RelationExpression.java:899)
>         at org.eclipse.persistence.expressions.ExpressionOperator.printDuo(ExpressionOperator.java:2239)
>         at org.eclipse.persistence.internal.expressions.CompoundExpression.printSQL(CompoundExpression.java:286)
>         at org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter.translateExpression(ExpressionSQLPrinter.java:306)
>         at org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter.printExpression(ExpressionSQLPrinter.java:129)
>         at org.eclipse.persistence.internal.expressions.SQLSelectStatement.printSQL(SQLSelectStatement.java:1683)
>         at org.eclipse.persistence.internal.databaseaccess.DatabasePlatform.printSQLSelectStatement(DatabasePlatform.java:3178)
>         at org.eclipse.persistence.platform.database.MySQLPlatform.printSQLSelectStatement(MySQLPlatform.java:673)
> {noformat}
> 2. NullPointerException
> {noformat}
>  [EL Warning]: 2023-02-22 20:36:40.8--UnitOfWork(305743338)--Exception [EclipseLink-6168] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
> Exception Description: Query failed to prepare, unexpected error occurred: [java.lang.NullPointerException].
> Internal Exception: java.lang.NullPointerException
> Query: ReportQuery(name="XXAuthSession.getRecentAuthFailureCountByLoginId" referenceClass=XXAuthSession sql="SELECT COUNT(?) FROM x_auth_sess t0 WHERE (((t0.LOGIN_ID = ?) AND (t0.AUTH_STATUS <> ?)) AND (t0.CREATE_TIME > COALESCE((SELECT MAX(t1.CREATE_TIME) FROM x_auth_sess t1 WHERE (((t1.LOGIN_ID = ?) AND (t1.AUTH_STATUS = ?)) AND (t1.CREATE_TIME > ?))),? )))")
> Feb 22, 2023 8:36:40 PM org.apache.catalina.core.StandardWrapperValve invoke
> SEVERE: Servlet.service() for servlet [REST Service] in context with path [] threw exception
> javax.persistence.PersistenceException: Exception [EclipseLink-6168] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
> Exception Description: Query failed to prepare, unexpected error occurred: [java.lang.NullPointerException].
> Internal Exception: java.lang.NullPointerException
> Caused by: Exception [EclipseLink-6168] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
> Exception Description: Query failed to prepare, unexpected error occurred: [java.lang.NullPointerException].
> Internal Exception: java.lang.NullPointerException
> Query: ReportQuery(name="XXAuthSession.getRecentAuthFailureCountByLoginId" referenceClass=XXAuthSession sql="SELECT COUNT(?) FROM x_auth_sess t0 WHERE (((t0.LOGIN_ID = ?) AND (t0.AUTH_STATUS <> ?)) AND (t0.CREATE_TIME > COALESCE((SELECT MAX(t1.CREATE_TIME) FROM x_auth_sess t1 WHERE (((t1.LOGIN_ID = ?) AND (t1.AUTH_STATUS = ?)) AND (t1.CREATE_TIME > ?))),? )))")
>         at org.eclipse.persistence.exceptions.QueryException.prepareFailed(QueryException.java:1590)
>         at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:680)
>         at org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:901)
>         at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:613)
>         at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:867)
>         at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1127)
>         at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:403)
>         at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1215)
>         at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1751)
>         at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
>         at org.eclipse.persistence.internal.jpa.QueryImpl.getSingleResult(QueryImpl.java:517)
>         ... 66 more
> Caused by: java.lang.NullPointerException
>         at java.io.Writer.write(Writer.java:157)
>         at org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter.printString(ExpressionSQLPrinter.java:188)
>         at org.eclipse.persistence.expressions.ExpressionOperator.printCollection(ExpressionOperator.java:2197)
>         at org.eclipse.persistence.internal.expressions.ArgumentListFunctionExpression.printSQL(ArgumentListFunctionExpression.java:99)
>         at org.eclipse.persistence.expressions.ExpressionOperator.printDuo(ExpressionOperator.java:2239)
>         at org.eclipse.persistence.internal.expressions.CompoundExpression.printSQL(CompoundExpression.java:286)
>         at org.eclipse.persistence.internal.expressions.RelationExpression.printSQL(RelationExpression.java:899)
>         at org.eclipse.persistence.expressions.ExpressionOperator.printDuo(ExpressionOperator.java:2239)
>         at org.eclipse.persistence.internal.expressions.CompoundExpression.printSQL(CompoundExpression.java:286)
>         at org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter.translateExpression(ExpressionSQLPrinter.java:306)
>         at org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter.printExpression(ExpressionSQLPrinter.java:129)
>         at org.eclipse.persistence.internal.expressions.SQLSelectStatement.printSQL(SQLSelectStatement.java:1683)
>         at org.eclipse.persistence.internal.databaseaccess.DatabasePlatform.printSQLSelectStatement(DatabasePlatform.java:3178)
>         at org.eclipse.persistence.platform.database.MySQLPlatform.printSQLSelectStatement(MySQLPlatform.java:673)
>         at org.eclipse.persistence.internal.expressions.SQLSelectStatement.buildCall(SQLSelectStatement.java:782)
>         at org.eclipse.persistence.internal.expressions.SQLSelectStatement.buildCall(SQLSelectStatement.java:792)
>         at org.eclipse.persistence.descriptors.ClassDescriptor.buildCallFromStatement(ClassDescriptor.java:813)
>         at org.eclipse.persistence.internal.queries.StatementQueryMechanism.setCallFromStatement(StatementQueryMechanism.java:390)
>         at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.prepareReportQuerySelectAllRows(ExpressionQueryMechanism.java:1696)
> {noformat}
> 3. SQLSyntaxErrorException
> {noformat}
> [EL Warning]: 2023-02-22 20:36:41.091--UnitOfWork(1275079713)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
> Internal Exception: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '))' at line 1
> Error Code: 1064
> Call: SELECT COUNT(?) FROM x_auth_sess t0 WHERE (((t0.LOGIN_ID = ?) AND (t0.AUTH_STATUS <> ?)) AND (t0.CREATE_TIME > COALESCE((SELECT MAX(t1.CREATE_TIME) FROM x_auth_sess t1 WHERE (((t1.LOGIN_ID = ?) AND (t1.AUTH_STATUS = ?)) AND (t1.CREATE_TIME > ?))),?,))
>         bind => [7 parameters bound]
> Query: ReportQuery(name="XXAuthSession.getRecentAuthFailureCountByLoginId" referenceClass=XXAuthSession sql="SELECT COUNT(?) FROM x_auth_sess t0 WHERE (((t0.LOGIN_ID = ?) AND (t0.AUTH_STATUS <> ?)) AND (t0.CREATE_TIME > COALESCE((SELECT MAX(t1.CREATE_TIME) FROM x_auth_sess t1 WHERE (((t1.LOGIN_ID = ?) AND (t1.AUTH_STATUS = ?)) AND (t1.CREATE_TIME > ?))),?,))")
>         at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340)
>         at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:682)
>         at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2002)
>         at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:298)
>         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:2738)
>         at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllReportQueryRows(ExpressionQueryMechanism.java:2675)
>         at org.eclipse.persistence.queries.ReportQuery.executeDatabaseQuery(ReportQuery.java:848)
>         at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
>         at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1127)
>         at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:403)
>         at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1215)
>         at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
>         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1751)
>         at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
>         ... 67 more
>  {noformat}
>  
> Different failure types suggest the issue might be due to JPA implementation that generates queries.
> Updating eclipselink library version from 2.5.2 to 2.7.12 (most recent in 2.x version) seems to resolve this issue. Above failures are not seen using the same script. I suggest to update eclipselink library version 2.7.12.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)