000038400 - Cloning AFX connectors creates duplicate connectors if connector names have been modified in RSA Identity Governance & Lifecycle

Document created by RSA Customer Support Employee on Feb 3, 2020
Version 1Show Document
  • View in full screen mode

Article Content

Article Number000038400
Applies ToRSA Product Set: RSA Identity Governance & Lifecycle
RSA Version/Condition: 7.1.1
 
IssueYou clone an AFX connector (AFX > Clone > Copy) and rename the new connector. Both connectors are Running. You clone the same connector again and when you go to rename it, you see that both the new connector and the renamed connector have a status of Not Deployed.

The following example illustrates this issue:
  1. Clone AFX connector Fox-Conn. (AFX > Clone > Copy)
  2. By default, the new connector name is Fox-Conn_1.
  3. Both connectors are Running:

User-added image


  1. Rename the new connector Fox-Conn_1 to Fox-Prod_1
  2. Both connectors are Running:

User-added image



  1. Clone AFX connector Fox-Conn.
  2. Note a new connector called Fox-Conn_1 has been created. 
  3. The new connector Fox-Conn_1 says in a Not Deployed state
  4. The new connector renamed to Fox-Prod_1 goes from Running to a Not Deployed state.

User-added image



The aveksaServer.log file ($AVEKSA_HOME/wildfly/standalone/log/aveksaServer.log) has the following corresponding error:
 




01/31/2020 19:08:06.502 INFO  (AFX log import) [com.aveksa.server.db.persistence.PersistenceServiceProvider] executeCallableStatement
giving up after hitting SQLException: ORA-01427: single-row subquery returns more than one row
ORA-06512: at "AVUSER.AFX_PKG", line 118
ORA-06512: at line 1


01/31/2020 19:08:06.512 WARN  (AFX log import) [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] SQL Error: 1427, SQLState: 21000
01/31/2020 19:08:06.512 ERROR (AFX log import) [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] ORA-01427: single-row subquery returns more than one row
ORA-06512: at "AVUSER.AFX_PKG", line 118
ORA-06512: at line 1


01/31/2020 19:08:06.514 WARN  (AFX log import) [com.aveksa.afx.server.service.handler.AFXLoggingRequestHandler] Exception importing log data for server 1
com.aveksa.server.db.PersistenceException: java.sql.SQLException: ORA-01427: single-row subquery returns more than one row
ORA-06512: at "AVUSER.AFX_PKG", line 118
ORA-06512: at line 1

        at com.aveksa.server.db.persistence.PersistenceServiceProvider.runStoredProcedure(PersistenceServiceProvider.java:1548)
        at com.aveksa.server.db.persistence.PersistenceServiceProvider.runStoredProcedure(PersistenceServiceProvider.java:1480)
        at com.aveksa.server.db.PersistenceManager.runStoredProcedure(PersistenceManager.java:245)
        at com.aveksa.afx.server.service.AFXLogServiceProvider.saveAFXLogData(AFXLogServiceProvider.java:69)
        at com.aveksa.afx.server.service.handler.AFXLoggingRequestHandler$LogImportRunner.run(AFXLoggingRequestHandler.java:85)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException: ORA-01427: single-row subquery returns more than one row
ORA-06512: at "AVUSER.AFX_PKG", line 118
ORA-06512: at line 1

        at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
        at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
        at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612)
        at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:223)
        at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:56)
        at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:907)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1119)
 
       at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3780)
        at oracle.jdbc.driver.T4CCallableStatement.executeInternal(T4CCallableStatement.java:1300)
        at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3887)
        at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4230)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1079)
        at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.execute(WrappedPreparedStatement.java:442)
        at com.aveksa.server.db.persistence.work.PersistenceServiceBaseWork.executeCallableStatement(PersistenceServiceBaseWork.java:36)
        at com.aveksa.server.db.persistence.work.StoredProcedureCallWork.execute(StoredProcedureCallWork.java:80)
        at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:37)
        at org.hibernate.internal.SessionImpl$3.accept(SessionImpl.java:2134)
        at org.hibernate.internal.SessionImpl$3.accept(SessionImpl.java:2131)
        at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:332)
        at org.hibernate.internal.SessionImpl.doWork(SessionImpl.java:2153)
        at org.hibernate.internal.SessionImpl.doWork(SessionImpl.java:2138)
        at com.aveksa.server.db.persistence.PersistenceServiceProvider.runStoredProcedure(PersistenceServiceProvider.java:1526)
        ... 5 more

Caused by: Error : 1427, Position : 0, Sql = BEGIN AFX_Pkg.Add_Afx_Log_Data(:1 ,:2 ); END;,
OriginalSql = {call AFX_Pkg.Add_Afx_Log_Data(?,?)}, Error Msg = ORA-01427: single-row subquery returns more than one row

  

An attempt to export any AFX connector fails with:



Cannot Export: Could Not Create Connector Package



User-added image





The aveksaServer.log file ($AVEKSA_HOME/wildfly/standalone/log/aveksaServer.log) has the following corresponding error from the connector package export:
 




01/10/2020 15:56:23.229 INFO (default task-15) [com.aveksa.afx.common.packagemgmt.connector.ConnectorPackager] 
Creating a connector archive package to /tmp/AFXServer_tempConnectorExport1887938318328546660.zip
01/10/2020 15:56:24.118 ERROR (default task-15) [com.aveksa.afx.common.packagemgmt.connector.ConnectorPackageComponent]
Cannot_Archive_XML : acmExportConnector/Dog-Conn_1/CONNECTOR/Connector.xml java.util.zip.ZipException:
duplicate entry: acmExportConnector/Dog-Conn_1/CONNECTOR/Connector.xml
        at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:232)
        at com.aveksa.afx.common.packagemgmt.connector.ConnectorPackageComponent.archiveXML(ConnectorPackageComponent.java:325)
        at com.aveksa.afx.common.packagemgmt.connector.ConnectorPackageComponent.archive(ConnectorPackageComponent.java:126)
        at com.aveksa.afx.common.packagemgmt.connector.ConnectorPackageComponent.createPackageArchive(ConnectorPackageComponent.java:65)
        at com.aveksa.afx.common.packagemgmt.connector.ConnectorPackager.createPackageArchive(ConnectorPackager.java:37)
        at com.aveksa.afx.ui.pages.packagemgmt.export.ExportPromptPage.handleSubmit(ExportPromptPage.java:82)
        at com.aveksa.gui.pages.base.data.wizard.StepWizardDialogData.handleRequest(StepWizardDialogData.java:119)
        at com.aveksa.afx.ui.pages.packagemgmt.export.AFXExportConnectorWizard.handleRequest(AFXExportConnectorWizard.java:143)
        at com.aveksa.gui.pages.PageManager.forwardRequest(PageManager.java:605)
        at com.aveksa.gui.pages.PageManager.handleRequest(PageManager.java:340)
        at com.aveksa.gui.pages.PageManager.handleRequest(PageManager.java:271)
        at com.aveksa.gui.core.MainManager.handleRequest(MainManager.java:186)
        at com.aveksa.gui.core.MainManager.doGet(MainManager.java:130)
        at com.aveksa.gui.core.MainManager.doPost(MainManager.java:428)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
        at com.aveksa.gui.core.filters.LoginFilter.doFilter(LoginFilter.java:62)
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
        at com.aveksa.gui.util.security.XSSFilter.doFilter(XSSFilter.java:20)


Please refer to RSA Knowledge Base Article 000030327 -- Artifacts to gather in RSA Identity Governance & Lifecycle to find the location of the aveksaServer.log file for your specific deployment if you are on a WildFly cluster or a non-WildFly platform.
 
CauseThe significant error here is:
 
ORA-01427: single-row subquery returns more than one row


This error points to the cause of the issue which is that there is more than one AFX connector with the same name.

Duplicate AFX connector names can occur when renaming a cloned AFX connector and cloning the original connector again.


Consider the example below:



  1. Connector Dog-Conn is created and cloned four times and no duplicate AFX connector names are created. This is the expected behavior.

  1. Create connector Dog-Conn.
  2. Clone Dog-Conn and it gets called Dog-Conn_1.
  3. Clone Dog-Conn again and it gets called Dog-Conn_2.
  4. Clone Dog-Conn again and it gets called Dog-Conn_3.
  5. Clone Dog-Conn again and it gets called Dog-Conn_4.

  1. Connector Fox-Conn is created and cloned once and renamed before being cloned again. When cloned again, a duplicate AFX connector is created. There are now two AFX connectors called Fox-Conn_1.

  1. Create connector Fox-Conn.
  2. Clone Fox-Conn and it gets called Fox-Conn_1.
  3. Edit Fox-Conn_1 and call it Fox-Prod_1 (But its real or internal name is still Fox-Conn_1).
  4. Clone Fox-Conn again and it gets called Fox-Conn_1 (instead of Fox-Conn_2). 

This issue has been reported in engineering ticket ACM-103128.
 
ResolutionThis issue is being investigated by the Engineering team in order to provide a permanent resolution in a future release.
 
WorkaroundDelete the duplicate connectors, and avoid changing the name of any cloned AFX connectors until you are done cloning them. 

To delete the duplicate connectors, login to the RSA Identity Governance & Lifecycle user interface and go to AFX > Connectors > check each duplicated connector > Delete.)

To avoid changing the name of any cloned AFX connectors until you are done cloning them change your cloning procedure:
 
FROM:


  1. Create connector Fox-Conn.
  2. Clone Fox-Conn and it gets called Fox-Conn_1.
  3. Edit Fox-Conn_1 and call it Fox-Prod_1 (But its real or internal name is still Fox-Conn_1).
  4. Clone Fox-Conn again and it gets called Fox-Conn_1 (instead of Fox-Conn_2). 

TO::


  1. Create connector Fox-Conn.
  2. Clone Fox-Conn and it gets called Fox-Conn_1.
  3. Clone Fox-Conn again and it gets called Fox-Conn_2.
  4. Clone Fox-Conn again and it gets called Fox-Conn_3.
  5. Clone Fox-Conn again and it gets called Fox-Conn_4.
  6. Edit Fox-Conn_1 and call it Fox-Prod_1.
  7. Edit Fox-Conn_2 and call it Fox-Prod_2.
  8. Edit Fox-Conn_3 and call it Fox-Prod_3.
  9. Edit Fox-Conn_4 and call it Fox-Prod_4.
  10. Continue cloning until you have as many as you need.
  11. Do NOT clone Fox-Conn again.

Attachments

    Outcomes