000036667 - In RSA Identity Governance & Lifecycle, HXTT error causes collection to hang when a query in the collection refers to a missing column in the csv file

Document created by RSA Customer Support Employee on Sep 14, 2018
Version 1Show Document
  • View in full screen mode

Article Content

Article Number000036667
Applies ToRSA Product Set: Identity Governance & Lifecycle
RSA Version/Condition: 7.0.2, 7.1.0
IssueAccount Data Collection hangs when the User Account Mappings Data Query contains a SQL query where string manipulation is performed on a missing/non-existent column in the csv source.

For instance,
  1. You have the User Account Mappings Data Query shown below of the collector with a SQL query that performs string manipulation to the UserID column which is NOT in the source csv file.


SELECT DISTINCT 
ACCOUNTNAME as Account_ID, 
CASE WHEN (LEN(UserID) = 8 AND ((RIGHT(UserID,1) ='a') OR RIGHT(UserID,1) ='A')) THEN LEFT(UserID,7) 
ELSE UserID END AS UserID
FROM t_my_test_ACCOUNTS_USERS


  1. Then afterwards, you run the Account Data Collector.
  2. You will observe that the Account Data Collection is running for a long time and you will also notice the StackOverflowError error thrown in the aveksaServer.log.

  • This collection is stuck with the status of Running indefinitely until ACM is restarted.
  • The correct behavior would be to catch the StackOverflowError, attempt to clean up the collection, then mark the collection as Failed.
The following exception is thrown in the aveksaServer.log:


06/27/2018 08:09:20.985 INFO (Thread-182) [com.aveksa.client.component.communication.ChangeListHandler] Got new change item method=Run ChangeItem[ID=19,
type=CollectionRequest, source=49, source-name=TestingADC] 
06/27/2018 08:09:20.988 INFO (ApplyChangesRegularThread-3109) [com.aveksa.client.component.communication.ChangeListHandler]
STARTING method=ApplyChanges subTask=Acting on a changeItem ChangeItem[ID=19, type=CollectionRequest, source=49, source-name=TestingADC] 
06/27/2018 08:09:20.988 INFO (ApplyChangesRegularThread-3109) [com.aveksa.client.component.DefaultComponentManager] DCM132:
Ignoring Event: com.aveksa.client.component.event.CollectionRequestEvent[source=com.aveksa.client.component.communication.DefaultCommunicationManager@1815f610] 
06/27/2018 08:09:21.023 ERROR (ApplyChangesRegularThread-3109) [SystemErr] Exception in thread "ApplyChangesRegularThread-3109" 
06/27/2018 08:09:21.028 ERROR (ApplyChangesRegularThread-3109) [SystemErr] java.lang.StackOverflowError 
06/27/2018 08:09:21.030 ERROR (ApplyChangesRegularThread-3109) [SystemErr] at com.hxtt.sql.d1.a(Unknown Source) 
06/27/2018 08:09:21.031 ERROR (ApplyChangesRegularThread-3109) [SystemErr] at com.hxtt.sql.d1.a(Unknown Source) 
... 
06/27/2018 08:09:21.895 ERROR (ApplyChangesRegularThread-3109) [SystemErr] at com.hxtt.sql.d1.a(Unknown Source) 
06/27/2018 08:09:21.895 ERROR (ApplyChangesRegularThread-3109) [SystemErr] at com.hxtt.sql.d1.a(Unknown Source) 
06/27/2018 08:09:21.897 ERROR (ApplyChangesRegularThread-3109) [com.aveksa.client.component.communication.ChangeListHandler]
method=UncaughtException Thread=Thread[ApplyChangesRegularThread-3109,5,ChangeApplyingThreadGroup] 
java.lang.StackOverflowError 
at com.hxtt.sql.d1.a(Unknown Source) 
at com.hxtt.sql.d1.a(Unknown Source) 
at com.hxtt.sql.d1.a(Unknown Source)
CauseThis is a regression with the latest HXTT driver.  HXTT has changed the implementation for selecting the columns when they are condition based.
WorkaroundWe checked with the HXTT support team and they advised that you have to change how you query with the latest version.
 

Initial query


The SQL query which caused the HXTT error had the same column name and alias.  In the example below the alias=UserID and the column_name=UserID:


SELECT DISTINCT 
ACCOUNTNAME as Account_ID, 
CASE WHEN (LEN(UserID) = 8 AND ((RIGHT(UserID,1) ='a') OR RIGHT(UserID,1) ='A')) THEN LEFT(UserID,7) 
ELSE UserID END AS UserID
FROM t_my_test_ACCOUNTS_USERS



Updated query options


To resolve the issue, we have to use an alias different from the actual column name.  In the example below, we used the alias=User_ID and the column_name=UserID)


SELECT DISTINCT 
ACCOUNTNAME as Account_ID, 
CASE WHEN (LEN(UserID) = 8 AND ((RIGHT(UserID,1) ='a') OR RIGHT(UserID,1) ='A')) THEN LEFT(UserID,7) 
ELSE UserID END AS User_ID
FROM t_my_test_ACCOUNTS_USERS


The following SQL query also works.  In this example, we removed the alias:

SELECT DISTINCT 
ACCOUNTNAME as Account_ID, 
CASE WHEN (LEN(UserID) = 8 AND ((RIGHT(UserID,1) ='a') OR RIGHT(UserID,1) ='A')) THEN LEFT(UserID,7) 
ELSE UserID END 
FROM t_my_test_ACCOUNTS_USERS
Notes
 

Attachments

    Outcomes