-
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
- Modify any record in CONTENT table and set contenttype = 'USERSTATUS'.
- 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.