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

Trash can't be emptied when pages with Gliffy attachments are present in the trash

       -- url: /pages/doemptytrash.action | userName: igorminar | referer: http://wikis.sun.com/pages/emptytrash.action?key=help
      org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not delete: [com.atlassian.confluence.pages.Attachment#48366003]; SQL []; Cannot delete or update a parent row: a foreign key constraint fails (`wikis_emergency/ATTACHMENTDATA`, CONSTRAINT `FK9DC3E34D34A4917E` FOREIGN KEY (`ATTACHMENTID`) REFERENCES `ATTACHMENTS` (`ATTACHMENTID`)); nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`wikis_emergency/ATTACHMENTDATA`, CONSTRAINT `FK9DC3E34D34A4917E` FOREIGN KEY (`ATTACHMENTID`) REFERENCES `ATTACHMENTS` (`ATTACHMENTID`))
      Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`wikis_emergency/ATTACHMENTDATA`, CONSTRAINT `FK9DC3E34D34A4917E` FOREIGN KEY (`ATTACHMENTID`) REFERENCES `ATTACHMENTS` (`ATTACHMENTID`))
              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:1016)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
              at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
              at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
              at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
              at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
              at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2543)
              at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1737)
              at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2022)
              at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1940)
              at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1925)
              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.delete(EntityPersister.java:581)
              at net.sf.hibernate.impl.ScheduledDeletion.execute(ScheduledDeletion.java:29)
              at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2449)
              at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2435)
              at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2397)
              at net.sf.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1821)
              at net.sf.hibernate.impl.SessionImpl.findBySQL(SessionImpl.java:3863)
              at net.sf.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:52)
              at com.atlassian.confluence.pages.persistence.dao.hibernate.HibernatePageDao$4.doInHibernate(HibernatePageDao.java:464)
              at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:370)
              at org.springframework.orm.hibernate.HibernateTemplate.executeFind(HibernateTemplate.java:341)
              at com.atlassian.confluence.pages.persistence.dao.hibernate.HibernatePageDao.getDescendents(HibernatePageDao.java:454)
              at com.atlassian.confluence.pages.DefaultPageManager.getDescendents(DefaultPageManager.java:162)
              at com.atlassian.confluence.pages.DefaultPageManager.removePageFromAncestorCollections(DefaultPageManager.java:196)
              at sun.reflect.GeneratedMethodAccessor1989.invoke(Unknown Source)
              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 com.atlassian.spring.interceptors.SpringProfilingInterceptor.invoke(SpringProfilingInterceptor.java:20)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
              at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
              at $Proxy21.removePageFromAncestorCollections(Unknown Source)
              at com.atlassian.confluence.pages.Page.remove(Page.java:204)
              at com.atlassian.confluence.pages.DefaultTrashManager.emptyTrash(DefaultTrashManager.java:31)
              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 com.atlassian.spring.interceptors.SpringProfilingInterceptor.invoke(SpringProfilingInterceptor.java:20)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
              at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
              at $Proxy61.emptyTrash(Unknown Source)
              at com.atlassian.confluence.pages.actions.EmptyTrashAction.execute(EmptyTrashAction.java:12)
      ....
      

            [CONFSERVER-15232] Trash can't be emptied when pages with Gliffy attachments are present in the trash

            Igor Minar added a comment -

            I noticed that "space delete" functionality is affected with this issue too. The issue occurs only when we work with gliffy attachments or gliffy attachments that were created as a copy of originals via copy page or copy space Confluence features.

            A workaround that helped me to remove the pages or the space was to manually delete the Gliffy attachments first via the UI and only then delete the page/space.

            Igor Minar added a comment - I noticed that "space delete" functionality is affected with this issue too. The issue occurs only when we work with gliffy attachments or gliffy attachments that were created as a copy of originals via copy page or copy space Confluence features. A workaround that helped me to remove the pages or the space was to manually delete the Gliffy attachments first via the UI and only then delete the page/space.

            Igor Minar added a comment -

            This issue is still present even in Confluence 3.2.1. Interestingly it seems that only gliffy attachments are affected. I reported this to gliffy team, but they said that they use only your public api, so they suspect the issue is really caused by Confluence.

            Igor Minar added a comment - This issue is still present even in Confluence 3.2.1. Interestingly it seems that only gliffy attachments are affected. I reported this to gliffy team, but they said that they use only your public api, so they suspect the issue is really caused by Confluence.

            Anatoli added a comment -

            I could not reproduce a problem with postgres ( Did not test mysql; had expected the same constrain present in postrges as in mysql)

            Anatoli added a comment - I could not reproduce a problem with postgres ( Did not test mysql; had expected the same constrain present in postrges as in mysql)

              ple Phong Quoc Le (Inactive)
              15d9a6950818 Igor Minar
              Affected customers:
              6 This affects my team
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: