Site XML backup fails if CONTENT table has USERSTATUS records

XMLWordPrintable

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Low
    • None
    • Affects Version/s: 7.0.1
    • Component/s: Site - Backup / Import
    • None
    • Severity 3 - Minor

      Issue Summary

      Site XML backup fails if CONTENT table has records having 'USERSTATUS' values in contenttype field.

      USERSTATUS content type was removed in Confluence 7.0, so Hibernate can't recognise this value anymore. But CONTENT table would still have old records with this content type. 

      Steps to Reproduce

      1. Modify any record in CONTENT table and set contenttype = 'USERSTATUS'.
      2. Run site backup

      Expected Results

      Site backup finishes successfully.

      Actual Results

      The below exception is thrown in the log file:

      2022-05-28 11:45:54,809 ERROR [http-nio-8090-exec-14] [confluence.impl.importexport.AbstractXmlExporter] backupEntities Couldn't backup database data.
       -- url: /admin/dobackup.action | traceId: 12769cd4e86f5355 | userName: admin | referer: <site>/admin/backup.action | action: dobackup
      org.hibernate.WrongClassException: Object [id=1865320231] was not of the specified subclass [com.atlassian.confluence.core.ContentEntityObject] : Discriminator: USERSTATUS
      	at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.getConcreteEntityTypeName(EntityReferenceInitializerImpl.java:418)
      	at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:217)
      	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:103)
      	at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails$EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:254)
      	at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:122)
      	at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:122)
      	at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)
      	at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:185)
      	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4121)
      	at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:508)
      	at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:478)
      	at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219)
      	at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:262)
      	at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121)
      	at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89)
      	at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1240)
      	at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1123)
      	at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:682)
      	at org.hibernate.type.EntityType.resolve(EntityType.java:464)
      	at org.hibernate.type.ManyToOneType.resolve(ManyToOneType.java:239)
      	at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:171)
      	at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:128)
      	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.performTwoPhaseLoad(AbstractRowReader.java:238)
      	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:209)
      	at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:133)
      	at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:122)
      	at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)
      	at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:185)
      	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4121)
      	at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:508)
      	at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:478)
      	at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219)
      	at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:262)
      	at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121)
      	at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89)
      	at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1240)
      	at org.hibernate.internal.SessionImpl.access$1900(SessionImpl.java:204)
      	at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2835)
      	at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2816)
      	at org.hibernate.internal.SessionImpl.get(SessionImpl.java:1178)
      	at com.atlassian.confluence.importexport.impl.HibernateObjectHandleTranslator.handleToObject(HibernateObjectHandleTranslator.java:55)
      	at com.atlassian.hibernate.extras.XMLDatabinder.writeObjects(XMLDatabinder.java:232)
      	at com.atlassian.hibernate.extras.XMLDatabinder.toGenericXML(XMLDatabinder.java:215)
      	at com.atlassian.confluence.importexport.impl.AtlassianXMLDatabinder.toGenericXML(AtlassianXMLDatabinder.java:52)
      	at com.atlassian.confluence.impl.importexport.AbstractXmlExporter.backupEntities(AbstractXmlExporter.java:214)
      	at com.atlassian.confluence.impl.importexport.AbstractXmlExporter.backupEverything(AbstractXmlExporter.java:107)
      	at com.atlassian.confluence.impl.importexport.AbstractFileXmlExporter.backupEverything(AbstractFileXmlExporter.java:101)
      	at com.atlassian.confluence.impl.importexport.AbstractXmlExporter.doExport(AbstractXmlExporter.java:101)
      	at com.atlassian.confluence.impl.importexport.AbstractFileXmlExporter.doExportInternal(AbstractFileXmlExporter.java:66)
      	at com.atlassian.confluence.impl.importexport.AbstractFileXmlExporter.doExport(AbstractFileXmlExporter.java:60)
      	at com.atlassian.confluence.importexport.DefaultImportExportManager.doExport(DefaultImportExportManager.java:216)
      	at com.atlassian.confluence.importexport.DefaultImportExportManager.exportAs(DefaultImportExportManager.java:182)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

      Workaround

      Delete all records with USERSTATUS from CONTENT table:

      delete from content where contenttype = 'USERSTATUS'; 

      If it fails due to the references from other tables, they have to be removed as well.

            Assignee:
            Unassigned
            Reporter:
            George Lipatov
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: