Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-22357

Duplicate constraint violation due to duplicate hibernate users when migrating them to Crowd directory

    XMLWordPrintable

Details

    Description

      The upgrade log gave a warning like below, and it appears that Confluence was going to skip the duplicate and proceed with the upgrade.

      But the upgrade failed because of duplicate membership anyway:

      2011-04-13 14:48:38,854 WARN [main] [confluence.user.migration.AtlassianUserDataMigrator] processRowInternal Duplicate entries found for user name 'nbhawnani', which probably means there were two user names which only differed by case. The first entry found was used, so this user's password and details may not be correct.
      :
      :
      2011-04-13 14:48:41,416 ERROR [main] [sf.hibernate.util.JDBCExceptionReporter] logExceptions ORA-00001: unique constraint (CFLUENCE.CWD_UNIQUE_MEMBERSHIP) violated
      
      2011-04-13 14:48:41,417 ERROR [main] [sf.hibernate.impl.SessionImpl] execute Could not synchronize database state with session
      2011-04-13 14:48:41,678 ERROR [main] [atlassian.confluence.upgrade.UpgradeLauncherServletContextListener] contextInitialized Upgrade failed, application will not start: java.lang.RuntimeException: net.sf.hibernate.exception.ConstraintViolationException: could not insert: com.atlassian.crowd.embedded.hibernate2.HibernateMembership#23332935
      com.atlassian.confluence.upgrade.UpgradeException: java.lang.RuntimeException: net.sf.hibernate.exception.ConstraintViolationException: could not insert: com.atlassian.crowd.embedded.hibernate2.HibernateMembership#23332935
      at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgrade(AbstractUpgradeManager.java:109)
      at com.atlassian.confluence.upgrade.impl.DefaultUpgradeManager.upgrade(DefaultUpgradeManager.java:139)
      at com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:28)
      at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
      :
      Caused by: java.lang.RuntimeException: net.sf.hibernate.exception.ConstraintViolationException: could not insert: com.atlassian.crowd.embedded.hibernate2.HibernateMembership#23332935
      at com.atlassian.confluence.upgrade.upgradetask.SessionClearingRowCallbackHandler.flushAndClear(SessionClearingRowCallbackHandler.java:54)
      at com.atlassian.confluence.upgrade.upgradetask.SessionClearingRowCallbackHandler.processRow(SessionClearingRowCallbackHandler.java:41)
      at org.springframework.jdbc.core.JdbcTemplate$RowCallbackHandlerResultSetExtractor.extractData(JdbcTemplate.java:1248)
      at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:395)
      at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:343)
      at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:405)
      at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:409)
      at com.atlassian.confluence.user.migration.AtlassianUserDataMigrator.migrateGroupMemberships(AtlassianUserDataMigrator.java:176)
      at com.atlassian.confluence.upgrade.upgradetask.AtlassianUserToEmbeddedCrowdDataUpgradeTask.doUpgrade(AtlassianUserToEmbeddedCrowdDataUpgradeTask.java:74)
      :
      :
      

      Either make the warning into an error or make Confluence proceed as planned like what the warning said - ignore the duplicate and make the upgrade successful.

      Work around

      Execute this query:

      select name, count(name) from users group by name having count(name) > 1;
      

      You can identify which one to delete from their last login date:

      select u.name, u.id, p.date_val as lastLogin from users u
      join OS_PROPERTYENTRY p on u.id = p.entity_ID
      where entity_key='confluence.user.last.login.date' AND u.name='yourDuplicateUserName'
      order by date_val desc;
      

      Then delete them:

      delete from local_members where userid = xxx;
      delete from users where id = xxx;
      

      Attachments

        Activity

          People

            shaffenden Steve Haffenden (Inactive)
            rhartono Roy Hartono [Atlassian]
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: