Uploaded image for project: 'Grouper'
  1. Grouper
  2. GRP-4955

SQL Provisioner: Trying to insert duplicate rows

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Minor
    • 4.6.0, 5.4.0
    • 4.5.5
    • provisioning
    • None

    Description

      After our upgrade from 2.6.19 to 4.5.5, we're seeing unique-constraint errors in our SQL Provisioning Full Syncs. We have date columns managed by the database schema to know when rows are created (when_created TIMESTAMP DEFAULT current_timestamp), and, therefore, know that the duplicate rows being created are duplicates of rows that have been in the database table for multiple weeks; this is not some kind of race condition.

      In order to try to fix this problem, we removed all Provisioning data for this provisioner, so we might have made the problem worse. However, in theory, all that data shouldn't prevent a FullSync from reading the Target and Grouper and updating the Target with the necessary changes.

      To get things running for the immediate term, we added a trigger to our grouper-provisioned table to discard duplicates. Therefore, we're not expecting to see these errors any more, but we could disable the trigger and test when a fix is available.

       

      grouper-ui;provisioning.log;2023-09-14T04:10:05,112: v2 [Thread-220] ERROR e.int.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoAdapter - [] - Provisioner 'iam_unifieddb_group_memberships' (vwsvdonn) Error inserting memberships, e.g. Mship(matchingAttrs: LinkedHashSet(1): [0]: [id, val: MultiKey[gt:ref:affiliations:guest@gt, 992D5FF8E4BA8A6F96E4F06C8B1A786A], compareVal: MultiKey[gt:ref:affiliations:guest@gt, 992D5FF8E4BA8A6F96E4F06C8B1A786A], currentValue: true], attr[group_name]: "gt:ref:affiliations:guest@gt", attr[subject_id]: "992D5FF8E4BA8A6F96E4F06C8B1A786A", attr[subject_source_id]: "gted-people", ins group_name "gt:ref:affiliations:guest@gt", ins subject_id "992D5FF8E4BA8A6F96E4F06C8B1A786A", ins subject_source_id "gted-people", recalcObject: true, create: true, selectProcessed: true)
      (vwsvdonn): java.lang.RuntimeException: sql: insert into grouper.memberships_from_grouper(group_name,subject_id,subject_source_id) values (?, ?, ?),
      (vwsvdonn): at edu.internet2.middleware.grouperClient.jdbc.GcDbAccess.callbackResultSet(GcDbAccess.java:2361)
      (vwsvdonn): at edu.internet2.middleware.grouperClient.jdbc.GcDbAccess.executeBatchSql(GcDbAccess.java:2407)
      (vwsvdonn): at edu.internet2.middleware.grouper.app.sqlProvisioning.SqlProvisionerCommands.insertObjects(SqlProvisionerCommands.java:508)
      (vwsvdonn): at edu.internet2.middleware.grouper.app.sqlProvisioning.SqlProvisioningDao.insertMemberships(SqlProvisioningDao.java:1102)
      (vwsvdonn): at edu.internet2.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoAdapter.insertMembershipsHelper(GrouperProvisionerTargetDaoAdapter.java:4012)
      (vwsvdonn): at edu.internet2.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoAdapter$31.callLogic(GrouperProvisionerTargetDaoAdapter.java:4072)
      (vwsvdonn): at edu.internet2.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoAdapter$31.callLogic(GrouperProvisionerTargetDaoAdapter.java:4066)
      (vwsvdonn): at edu.internet2.middleware.grouper.util.GrouperCallable$1.callback(GrouperCallable.java:203)
      (vwsvdonn): at edu.internet2.middleware.grouper.GrouperSession.callbackGrouperSession(GrouperSession.java:1000)
      (vwsvdonn): at edu.internet2.middleware.grouper.util.GrouperCallable.callLogicWithSessionIfExists(GrouperCallable.java:200)
      (vwsvdonn): at edu.internet2.middleware.grouper.util.GrouperCallable.call(GrouperCallable.java:166)
      (vwsvdonn): at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      (vwsvdonn): at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
      (vwsvdonn): at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
      (vwsvdonn): at java.base/java.lang.Thread.run(Thread.java:833)
      (vwsvdonn): Caused by: java.sql.BatchUpdateException: Batch entry 0 insert into grouper.memberships_from_grouper(group_name,subject_id,subject_source_id) values ('gt:ref:affiliations:guest@gt', '992D5FF8E4BA8A6F96E4F06C8B1A786A', 'gted-people') was aborted: ERROR: duplicate key value violates unique constraint "memberships_from_grouper_idx1"
      (vwsvdonn): Detail: Key (group_name, subject_source_id, subject_id)=(gt:ref:affiliations:guest@gt, gted-people, 992D5FF8E4BA8A6F96E4F06C8B1A786A) already exists. Call getNextException to see other errors in the batch.
      (vwsvdonn): at org.postgresql.jdbc.BatchResultHandler.handleCompletion(BatchResultHandler.java:186)
      (vwsvdonn): at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:571)
      (vwsvdonn): at org.postgresql.jdbc.PgStatement.internalExecuteBatch(PgStatement.java:893)
      (vwsvdonn): at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:916)
      (vwsvdonn): at org.postgresql.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1684)
      (vwsvdonn): at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:2544)
      (vwsvdonn): at edu.internet2.middleware.grouperClient.jdbc.GcDbAccess.callbackResultSet(GcDbAccess.java:2344)
      (vwsvdonn): ... 14 more
      (vwsvdonn): Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "memberships_from_grouper_idx1"
      (vwsvdonn): Detail: Key (group_name, subject_source_id, subject_id)=(gt:ref:affiliations:guest@gt, gted-people, 992D5FF8E4BA8A6F96E4F06C8B1A786A) already exists.
      (vwsvdonn): at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2676)
      (vwsvdonn): at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2366)
      (vwsvdonn): at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2099)
      (vwsvdonn): at org.postgresql.core.v3.QueryExecutorImpl.flushIfDeadlockRisk(QueryExecutorImpl.java:1456)
      (vwsvdonn): at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1481)
      (vwsvdonn): at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:546)
      (vwsvdonn): ... 19 more

      Attachments

        Issue Links

          Activity

            People

              chris.hyzer@at.internet2.edu Chris Hyzer (upenn.edu)
              bert.beelindgren@at.internet2.edu Bert Bee-Lindgren (gatech.edu)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: