Details
-
Bug
-
Resolution: Won't Fix
-
Low
-
None
-
3.5.2
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;