Under MySQL, users and groups can wind up with duplicate membership entries in the cwd_membership table. The existing constraint:

      alter table cwd_membership add constraint cwd_unique_membership unique (parent_id, child_group_id, child_user_id)
      

      has no effect thanks to child_group_id and child_user_id both allowing nulls. We need to apply a fix similar to the fix we did for the content permissions unique constraints fix, and apply different unique constraints in environments where nulls are ignored (mysql, postgres) vs nulls are distinct values too (oracle, sql server) vs illegal (db2).

      Patch

      Attached is CONF-22541-patch-v2.zip, which will repair any duplicate memberships in MySQL, and add corrected constraints to the cwd_membership table. The patch is compatible with Confluence 3.5.1 - 3.5.5. Confluence 3.5.6 contains this fix, so does not require the patch. Due to changes in upgrade infrastructure between Confluence 3.5 and 3.5.1, the patch is not backwards compatible with Confluence 3.5.

      Contents

      The patch contains 15 files in 3 directories:

      • confluence/WEB-INF
        • com/atlassian/confluence/upgrade/upgradetask
          • AbstractConstraintCreationUpgradeTask.class
          • 7x ContentPermissionConstraintsUpgradeTask classes
          • 4x EmbeddedCrowdSchemaUpgradeTask classes
        • com/atlassian/crowd/embedded/hibernate2
          • 2x additional_constraints properties files
      • confluence/admin
        • fixcwdmemberships.jsp

      Installation

      To install the patch:

      1. stop Confluence
      2. extract the zip to the top level of your <confluence install dir>. This will create the required directories under confluence/WEB-INF for the patched files.
      3. start Confluence
      4. Log in as a confluence administrator, and navigate to <confluence base url>/admin/fixcwdmemberships.jsp, and follow the prompts

      When running the jsp on a confluence 3.5.x instance that has already run any 3.5.x upgrade tasks, this patch will cause log messages containing messages such as

      Constraint cwd_group_name_dir_id already exists

      or

      Could not create unique constraint ... Duplicate key name 'cwd_group_name_dir_id'

      to appear in the logs. These are harmless, and can be safely ignored.

            [CONFSERVER-22541] Unique membership constraints ignored on MySQL

            Sigurdur Bjarnason added a comment - - edited

            Hi there, I am seeing this error in our Confluence 5.0.3 setup using MSSQL 2008 as DB

            2013-04-15 12:05:59,327 ERROR [scheduler_Worker-10] [atlassian.crowd.directory.DbCachingDirectoryPoller] pollChanges Error occurred while refreshing the cache for directory [ 131073 ].
            org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not insert: com.atlassian.crowd.embedded.hibernate2.HibernateMembership#14844441; SQL []; Violation of UNIQUE KEY constraint 'cwd_unique_membership'. Cannot insert duplicate key in object 'dbo.cwd_membership'. The duplicate key value is (2917334, <NULL>, 14745634).; nested exception is java.sql.SQLException: Violation of UNIQUE KEY constraint 'cwd_unique_membership'. Cannot insert duplicate key in object 'dbo.cwd_membership'. The duplicate key value is (2917334, <NULL>, 14745634).
            at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:100)
            at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
            at org.springframework.orm.hibernate.HibernateTransactionManager.convertJdbcAccessException(HibernateTransactionManager.java:619)
            at org.springframework.orm.hibernate.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:605)
            at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:518)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
            at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
            at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
            at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
            at com.atlassian.crowd.directory.$Proxy1522.addUserToGroup(Unknown Source)
            at com.atlassian.crowd.directory.DirectoryCacheImplUsingChangeOperations.addUserToGroup(DirectoryCacheImplUsingChangeOperations.java:187)
            at com.atlassian.crowd.directory.ldap.cache.EventTokenChangedCacheRefresher.synchroniseChanges(EventTokenChangedCacheRefresher.java:114)
            at com.atlassian.crowd.directory.DbCachingRemoteDirectory.synchroniseCache(DbCachingRemoteDirectory.java:610)
            at com.atlassian.crowd.manager.directory.DirectorySynchroniserImpl.synchronise(DirectorySynchroniserImpl.java:63)
            at com.atlassian.crowd.directory.DbCachingDirectoryPoller.pollChanges(DbCachingDirectoryPoller.java:50)
            at com.atlassian.crowd.manager.directory.monitor.poller.DirectoryPollerJobBean.executeInternal(DirectoryPollerJobBean.java:29)
            at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
            at org.quartz.core.JobRunShell.run(JobRunShell.java:199)
            at com.atlassian.confluence.schedule.quartz.ConfluenceQuartzThreadPool$1.run(ConfluenceQuartzThreadPool.java:20)
            at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
            Caused by: java.sql.SQLException: Violation of UNIQUE KEY constraint 'cwd_unique_membership'. Cannot insert duplicate key in object 'dbo.cwd_membership'. The duplicate key value is (2917334, <NULL>, 14745634).
            at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
            at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2816)
            at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2254)
            at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:631)
            at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:584)
            at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:546)
            at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedStatement.java:505)
            at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
            at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:22)
            at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:462)
            at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:436)
            at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:37)
            at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2464)
            at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2450)
            at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2407)
            at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2276)
            at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
            at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:510)
            ... 17 more

            cannot sync users and groups from jira directory!

            Sigurdur Bjarnason added a comment - - edited Hi there, I am seeing this error in our Confluence 5.0.3 setup using MSSQL 2008 as DB 2013-04-15 12:05:59,327 ERROR [scheduler_Worker-10] [atlassian.crowd.directory.DbCachingDirectoryPoller] pollChanges Error occurred while refreshing the cache for directory [ 131073 ]. org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not insert: com.atlassian.crowd.embedded.hibernate2.HibernateMembership#14844441 ; SQL []; Violation of UNIQUE KEY constraint 'cwd_unique_membership'. Cannot insert duplicate key in object 'dbo.cwd_membership'. The duplicate key value is (2917334, <NULL>, 14745634).; nested exception is java.sql.SQLException: Violation of UNIQUE KEY constraint 'cwd_unique_membership'. Cannot insert duplicate key in object 'dbo.cwd_membership'. The duplicate key value is (2917334, <NULL>, 14745634). at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:100) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.orm.hibernate.HibernateTransactionManager.convertJdbcAccessException(HibernateTransactionManager.java:619) at org.springframework.orm.hibernate.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:605) at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:518) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at com.atlassian.crowd.directory.$Proxy1522.addUserToGroup(Unknown Source) at com.atlassian.crowd.directory.DirectoryCacheImplUsingChangeOperations.addUserToGroup(DirectoryCacheImplUsingChangeOperations.java:187) at com.atlassian.crowd.directory.ldap.cache.EventTokenChangedCacheRefresher.synchroniseChanges(EventTokenChangedCacheRefresher.java:114) at com.atlassian.crowd.directory.DbCachingRemoteDirectory.synchroniseCache(DbCachingRemoteDirectory.java:610) at com.atlassian.crowd.manager.directory.DirectorySynchroniserImpl.synchronise(DirectorySynchroniserImpl.java:63) at com.atlassian.crowd.directory.DbCachingDirectoryPoller.pollChanges(DbCachingDirectoryPoller.java:50) at com.atlassian.crowd.manager.directory.monitor.poller.DirectoryPollerJobBean.executeInternal(DirectoryPollerJobBean.java:29) at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) at org.quartz.core.JobRunShell.run(JobRunShell.java:199) at com.atlassian.confluence.schedule.quartz.ConfluenceQuartzThreadPool$1.run(ConfluenceQuartzThreadPool.java:20) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549) Caused by: java.sql.SQLException: Violation of UNIQUE KEY constraint 'cwd_unique_membership'. Cannot insert duplicate key in object 'dbo.cwd_membership'. The duplicate key value is (2917334, <NULL>, 14745634). at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368) at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2816) at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2254) at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:631) at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:584) at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:546) at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedStatement.java:505) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:22) at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:462) at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:436) at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:37) at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2464) at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2450) at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2407) at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2276) at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61) at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:510) ... 17 more cannot sync users and groups from jira directory!

            mrjcleaver You've been directed here by mistake - there is no reason that you would see any such error from SQL Server if the constraints are not working, and there's no good reason for the constraints to not be working for SQL Server in Confluence 4.3.3. Please raise a support request so that we can investigate the problem more fully.

            Richard Atkins added a comment - mrjcleaver You've been directed here by mistake - there is no reason that you would see any such error from SQL Server if the constraints are not working, and there's no good reason for the constraints to not be working for SQL Server in Confluence 4.3.3. Please raise a support request so that we can investigate the problem more fully.

            Martin Cleaver added a comment - - edited

            I'm seeing this error on a Confluence 4.3.3 instance connected to Crowd. Both running MS-SQL (SQL Server 2008)

            Martin Cleaver added a comment - - edited I'm seeing this error on a Confluence 4.3.3 instance connected to Crowd. Both running MS-SQL (SQL Server 2008)

            Hi Peter,

            The warning you quote there (along with the debug details for why the next warning was raised) are expected if you've been running any version of Confluence 3.5.x before upgrading to 3.5.6. Whatever caused your upgrade to fail will be logged later on. Please raise a support case if the problem isn't immediately apparent.

            Richard Atkins added a comment - Hi Peter, The warning you quote there (along with the debug details for why the next warning was raised) are expected if you've been running any version of Confluence 3.5.x before upgrading to 3.5.6. Whatever caused your upgrade to fail will be logged later on. Please raise a support case if the problem isn't immediately apparent.

            Hi all,

            I just tried to update to Confluence 3.5.6 and got the following errors in the log. The upgrade fails with the message "Upgrade failed, please consult the system logs etc." and I wonder if this is the reason?

            Thanks,
            Peter

            2011-06-29 08:52:22,636 DEBUG [main] [springframework.transaction.support.TransactionSynchronizationManager] getResource Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@16374a56] for key [org.springframework.jdbc.datasource.SingleConnectionDataSource@563126f6] bound to thread [main]
            2011-06-29 08:52:22,637 DEBUG [main] [springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator] translate Unable to translate SQLException with Error code '1061', will now try the fallback translator
            2011-06-29 08:52:22,637 WARN [main] [confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask] doUpgrade Could not create unique constraint: alter table cwd_user add constraint cwd_user_name_dir_id unique (lower_user_name, directory_id), StatementCallback; bad SQL grammar [alter table cwd_user add constraint cwd_user_name_dir_id unique (lower_user_name, directory_id)]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'cwd_user_name_dir_id'
            2011-06-29 08:52:22,637 DEBUG [main] [springframework.jdbc.core.JdbcTemplate] execute Executing SQL statement [alter table cwd_group add constraint cwd_group_name_dir_id unique (lower_group_name, directory_id)]
            2011-06-29 08:52:22,638 DEBUG [main] [springframework.transaction.support.TransactionSynchronizationManager] getResource Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@16374a56] for key [org.springframework.jdbc.datasource.SingleConnectionDataSource@563126f6] bound to thread [main]
            2011-06-29 08:52:22,638 DEBUG [main] [springframework.transaction.support.TransactionSynchronizationManager] getResource Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@16374a56] for key [org.springframework.jdbc.datasource.SingleConnectionDataSource@563126f6] bound to thread [main]
            2011-06-29 08:52:22,639 DEBUG [main] [v2.c3p0.impl.NewPooledConnection] handleThrowable com.mchange.v2.c3p0.impl.NewPooledConnection@43794494 handling a throwable.
            com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'cwd_group_name_dir_id'
                    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
                    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
                    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
                    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
                    at com.mysql.jdbc.Util.getInstance(Util.java:381)
                    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
                    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563)
                    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495)
                    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
                    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
                    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687)
                    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2616)
                    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:782)
                    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:625)
                    at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:1006)
                    at org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback.doInStatement(JdbcTemplate.java:369)
                    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:343)
                    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376)
                    at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:99)
                    at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:120)
                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                    at java.lang.reflect.Method.invoke(Method.java:597)
                    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
                    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
                    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
                    at $Proxy34.doUpgrade(Unknown Source)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.runSchemaUpgradeTasks(AbstractUpgradeManager.java:287)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgradeSchema(AbstractUpgradeManager.java:235)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgrade(AbstractUpgradeManager.java:87)
                    at com.atlassian.confluence.upgrade.impl.DefaultUpgradeManager.upgrade(DefaultUpgradeManager.java:139)
                    at com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:28)
                    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205)
                    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704)
                    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
                    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
                    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
                    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
                    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
                    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
                    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                    at java.lang.reflect.Method.invoke(Method.java:597)
                    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
                    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
            2011-06-29 08:52:22,640 DEBUG [main] [mchange.v2.sql.SqlUtils] toSQLException Attempted to convert SQLException to SQLException. Leaving it alone. [SQLState: 42000; errorCode: 1061]
            com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'cwd_group_name_dir_id'
                    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
                    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
                    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
                    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
                    at com.mysql.jdbc.Util.getInstance(Util.java:381)
                    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
                    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563)
                    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495)
                    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
                    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
                    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687)
                    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2616)
                    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:782)
                    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:625)
                    at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:1006)
                    at org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback.doInStatement(JdbcTemplate.java:369)
                    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:343)
                    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376)
                    at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:99)
                    at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:120)
                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                    at java.lang.reflect.Method.invoke(Method.java:597)
                    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
                    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
                    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
                    at $Proxy34.doUpgrade(Unknown Source)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.runSchemaUpgradeTasks(AbstractUpgradeManager.java:287)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgradeSchema(AbstractUpgradeManager.java:235)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgrade(AbstractUpgradeManager.java:87)
                    at com.atlassian.confluence.upgrade.impl.DefaultUpgradeManager.upgrade(DefaultUpgradeManager.java:139)
                    at com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:28)
                    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205)
                    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704)
                    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
                    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
                    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
                    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
                    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
                    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
                    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                    at java.lang.reflect.Method.invoke(Method.java:597)
                    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
                    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
            2011-06-29 08:52:22,641 DEBUG [main] [v2.c3p0.impl.DefaultConnectionTester] statusOnException Testing a Connection in response to an Exception:
            com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'cwd_group_name_dir_id'
                    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
                    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
                    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
                    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
                    at com.mysql.jdbc.Util.getInstance(Util.java:381)
                    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
                    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563)
                    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495)
                    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
                    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
                    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687)
                    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2616)
                    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:782)
                    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:625)
                    at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:1006)
                    at org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback.doInStatement(JdbcTemplate.java:369)
                    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:343)
                    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376)
                    at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:99)
                    at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:120)
                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                    at java.lang.reflect.Method.invoke(Method.java:597)
                    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
                    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
                    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
                    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
                    at $Proxy34.doUpgrade(Unknown Source)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.runSchemaUpgradeTasks(AbstractUpgradeManager.java:287)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgradeSchema(AbstractUpgradeManager.java:235)
                    at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgrade(AbstractUpgradeManager.java:87)
                    at com.atlassian.confluence.upgrade.impl.DefaultUpgradeManager.upgrade(DefaultUpgradeManager.java:139)
                    at com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:28)
                    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205)
                    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704)
                    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
                    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
                    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
                    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
                    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
                    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
                    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                    at java.lang.reflect.Method.invoke(Method.java:597)
                    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
                    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
            

            Peter Meier added a comment - Hi all, I just tried to update to Confluence 3.5.6 and got the following errors in the log. The upgrade fails with the message "Upgrade failed, please consult the system logs etc." and I wonder if this is the reason? Thanks, Peter 2011-06-29 08:52:22,636 DEBUG [main] [springframework.transaction.support.TransactionSynchronizationManager] getResource Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@16374a56] for key [org.springframework.jdbc.datasource.SingleConnectionDataSource@563126f6] bound to thread [main] 2011-06-29 08:52:22,637 DEBUG [main] [springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator] translate Unable to translate SQLException with Error code '1061' , will now try the fallback translator 2011-06-29 08:52:22,637 WARN [main] [confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask] doUpgrade Could not create unique constraint: alter table cwd_user add constraint cwd_user_name_dir_id unique (lower_user_name, directory_id), StatementCallback; bad SQL grammar [alter table cwd_user add constraint cwd_user_name_dir_id unique (lower_user_name, directory_id)]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'cwd_user_name_dir_id' 2011-06-29 08:52:22,637 DEBUG [main] [springframework.jdbc.core.JdbcTemplate] execute Executing SQL statement [alter table cwd_group add constraint cwd_group_name_dir_id unique (lower_group_name, directory_id)] 2011-06-29 08:52:22,638 DEBUG [main] [springframework.transaction.support.TransactionSynchronizationManager] getResource Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@16374a56] for key [org.springframework.jdbc.datasource.SingleConnectionDataSource@563126f6] bound to thread [main] 2011-06-29 08:52:22,638 DEBUG [main] [springframework.transaction.support.TransactionSynchronizationManager] getResource Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@16374a56] for key [org.springframework.jdbc.datasource.SingleConnectionDataSource@563126f6] bound to thread [main] 2011-06-29 08:52:22,639 DEBUG [main] [v2.c3p0.impl.NewPooledConnection] handleThrowable com.mchange.v2.c3p0.impl.NewPooledConnection@43794494 handling a throwable. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'cwd_group_name_dir_id' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2616) at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:782) at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:625) at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:1006) at org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback.doInStatement(JdbcTemplate.java:369) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:343) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376) at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:99) at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:120) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy34.doUpgrade(Unknown Source) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.runSchemaUpgradeTasks(AbstractUpgradeManager.java:287) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgradeSchema(AbstractUpgradeManager.java:235) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgrade(AbstractUpgradeManager.java:87) at com.atlassian.confluence.upgrade.impl.DefaultUpgradeManager.upgrade(DefaultUpgradeManager.java:139) at com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:28) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) at org.apache.catalina.core.StandardService.start(StandardService.java:525) at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 2011-06-29 08:52:22,640 DEBUG [main] [mchange.v2.sql.SqlUtils] toSQLException Attempted to convert SQLException to SQLException. Leaving it alone. [SQLState: 42000; errorCode: 1061] com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'cwd_group_name_dir_id' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2616) at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:782) at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:625) at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:1006) at org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback.doInStatement(JdbcTemplate.java:369) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:343) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376) at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:99) at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:120) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy34.doUpgrade(Unknown Source) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.runSchemaUpgradeTasks(AbstractUpgradeManager.java:287) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgradeSchema(AbstractUpgradeManager.java:235) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgrade(AbstractUpgradeManager.java:87) at com.atlassian.confluence.upgrade.impl.DefaultUpgradeManager.upgrade(DefaultUpgradeManager.java:139) at com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:28) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) at org.apache.catalina.core.StandardService.start(StandardService.java:525) at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 2011-06-29 08:52:22,641 DEBUG [main] [v2.c3p0.impl.DefaultConnectionTester] statusOnException Testing a Connection in response to an Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'cwd_group_name_dir_id' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2616) at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:782) at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:625) at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:1006) at org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback.doInStatement(JdbcTemplate.java:369) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:343) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376) at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:99) at com.atlassian.confluence.upgrade.upgradetask.AbstractConstraintCreationUpgradeTask.doUpgrade(AbstractConstraintCreationUpgradeTask.java:120) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy34.doUpgrade(Unknown Source) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.runSchemaUpgradeTasks(AbstractUpgradeManager.java:287) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgradeSchema(AbstractUpgradeManager.java:235) at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgrade(AbstractUpgradeManager.java:87) at com.atlassian.confluence.upgrade.impl.DefaultUpgradeManager.upgrade(DefaultUpgradeManager.java:139) at com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:28) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) at org.apache.catalina.core.StandardService.start(StandardService.java:525) at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

            We discovered a nasty defect in the duplicate cleanup code of the original patch that would cause all but the very first membership in cwd_membership to be deleted. This means that virtually all local memberships would be lost if you ran the original patch, and need to be manually recreated. Memberships from external user management would also be affected, but they are much easier to recover: simply re-synchronise Confluence with the remote directory.

            I've fixed this issue and updated the patch with the fix. The new patch also contains a jsp to help you run it without requiring a full re-upgrade of Confluence.

            Richard Atkins added a comment - We discovered a nasty defect in the duplicate cleanup code of the original patch that would cause all but the very first membership in cwd_membership to be deleted. This means that virtually all local memberships would be lost if you ran the original patch, and need to be manually recreated. Memberships from external user management would also be affected, but they are much easier to recover: simply re-synchronise Confluence with the remote directory. I've fixed this issue and updated the patch with the fix. The new patch also contains a jsp to help you run it without requiring a full re-upgrade of Confluence.

            The patch attached to this issue is missing a jsp to let you run the upgrade task manually. I've written one, but still have to test it - which I hope to do tomorrow.

            It looks like Vincent and Colin have managed to work around this, by re-applying the 3.5.x upgrade.

            For any other customers out there with the same issue: If you cannot wait for the JSP, re-applying the Confluence 3.5.x upgrade, as Vincent suggests, will make the fixed upgrade task run. You can reapply an upgrade by by reverting the data directory and DB to the previous version and upgrading with the patch in place.

            Richard Atkins added a comment - The patch attached to this issue is missing a jsp to let you run the upgrade task manually. I've written one, but still have to test it - which I hope to do tomorrow. It looks like Vincent and Colin have managed to work around this, by re-applying the 3.5.x upgrade. For any other customers out there with the same issue: If you cannot wait for the JSP, re-applying the Confluence 3.5.x upgrade, as Vincent suggests, will make the fixed upgrade task run. You can reapply an upgrade by by reverting the data directory and DB to the previous version and upgrading with the patch in place.

            Hi Colin,

            As you already upgrade to the 3.5.x already, the build number would of been updated in the database, causing your update task not to run.

            Are you able to revert back to pre 3.5 state in the database and Confluence Home, and then rerun the upgrade?

            Hope this helps. I look forward to reviewing your findings.

            Thank you.

            Regards

            Vincent Choy

            Vincent Choy (Inactive) added a comment - Hi Colin, As you already upgrade to the 3.5.x already, the build number would of been updated in the database, causing your update task not to run. Are you able to revert back to pre 3.5 state in the database and Confluence Home, and then rerun the upgrade? Hope this helps. I look forward to reviewing your findings. Thank you. Regards Vincent Choy

            Richard, I just patched one of our clients installs and ran this up and I couldn't see that the upgrade task ran. Also it then continued to fail on the duplicate exception, so I'm pretty confident the contraints were not added.

            What's your suggestions on forcing the upgrade and also ensuring I can see it run. (I cranked the com.atlassian.confluence.upgrade log to DEBUG)

            Thanks

            Colin Goudie added a comment - Richard, I just patched one of our clients installs and ran this up and I couldn't see that the upgrade task ran. Also it then continued to fail on the duplicate exception, so I'm pretty confident the contraints were not added. What's your suggestions on forcing the upgrade and also ensuring I can see it run. (I cranked the com.atlassian.confluence.upgrade log to DEBUG) Thanks

            Richard Atkins added a comment - - edited

            (Old patch installation notes removed)

            Richard Atkins added a comment - - edited (Old patch installation notes removed)

              richatkins Richard Atkins
              richatkins Richard Atkins
              Affected customers:
              0 This affects my team
              Watchers:
              9 Start watching this issue

                Created:
                Updated:
                Resolved:

                  Estimated:
                  Original Estimate - 8h
                  8h
                  Remaining:
                  Remaining Estimate - 8h
                  8h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified