Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-65494

ChangeItem data of Version custom field cause exception during project import

    XMLWordPrintable

Details

    Description

      Summary

      When a Version custom field is defined in a project and an issue history contains changes of that custom field the project import will fail for this project.

      Steps to Reproduce

      1. Create a new JIRA project (NP) with one version (for example, 1.0.0).
      2. Create a new Version Picker custom field and associate the field to the project's screen(s).
      3. Create a new ticket in the project without assigning any value to the custom field.
      4. Edit the ticket by assigning a new value (1.0.0) to the Veriosn Picket custom field.
      5. Verify in issue history there is following entry :
      6. Create an XML backup of instance.
      7. Delete the ticket and the version defined in the project NP.
      8. Try to import the project NP with Project Import.

      Expected Results

      The project NP get successfully imported.

      Actual Results

      Error during the import process :

      And the below exception is thrown in the JIRA log file:

      2017-06-21 16:06:06,289 JiraTaskExectionThread-27 ERROR admin 966x3973x1 lu8l8t 0:0:0:0:0:0:0:1 /secure/admin/ProjectImportSummary.jspa [c.a.j.imports.project.DefaultProjectImportService] An unexpected error occurred while importing the project with key: NP
      java.lang.NumberFormatException: For input string: "[10013]"
      	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
      	at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
      	at java.lang.Double.parseDouble(Double.java:538)
      	at java.lang.Double.<init>(Double.java:608)
      	at com.atlassian.jira.imports.project.customfield.VersionCustomFieldImporter.getNonDecimalValue(VersionCustomFieldImporter.java:36)
      	at com.atlassian.jira.imports.project.customfield.VersionCustomFieldImporter.getMappedImportValue(VersionCustomFieldImporter.java:26)
      	at com.atlassian.jira.imports.project.transformer.ChangeItemTransformerImpl.mapCustomFieldIdList(ChangeItemTransformerImpl.java:73)
      	at com.atlassian.jira.imports.project.transformer.ChangeItemTransformerImpl.transform(ChangeItemTransformerImpl.java:55)
      	at com.atlassian.jira.imports.project.handler.ChangeItemPersisterHandler.handleEntity(ChangeItemPersisterHandler.java:54)
      	at com.atlassian.jira.imports.project.handler.ChainedOfBizSaxHandler.endTopLevelElement(ChainedOfBizSaxHandler.java:221)
      	at com.atlassian.jira.imports.project.handler.ChainedOfBizSaxHandler.endElement(ChainedOfBizSaxHandler.java:169)
      	at com.atlassian.jira.imports.project.handler.ChainedOfBizSaxHandler.endElement(ChainedOfBizSaxHandler.java:136)
      	at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
      	at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
      	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
      	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
      	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
      	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
      	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
      	at com.atlassian.security.xml.RestrictedXMLReader.parse(RestrictedXMLReader.java:103)
      	at com.atlassian.jira.imports.xml.DefaultBackupXmlParser$XmlParser.parseXml(DefaultBackupXmlParser.java:115)
      	at com.atlassian.jira.imports.xml.DefaultBackupXmlParser.parse(DefaultBackupXmlParser.java:64)
      	at com.atlassian.jira.imports.xml.DefaultBackupXmlParser.parseXml(DefaultBackupXmlParser.java:52)
      	at com.atlassian.jira.imports.xml.DefaultBackupXmlParser.parseOfBizBackupXml(DefaultBackupXmlParser.java:41)
      	at com.atlassian.jira.imports.project.DefaultProjectImportManager.importChangeItemEntities(DefaultProjectImportManager.java:1117)
      	at com.atlassian.jira.imports.project.DefaultProjectImportManager.doImport(DefaultProjectImportManager.java:663)
      	at com.atlassian.jira.bc.imports.project.DefaultProjectImportService.doImport(DefaultProjectImportService.java:416)
      	at com.atlassian.jira.web.action.admin.importer.project.ProjectImportSummary$ProjectImportCallable.call(ProjectImportSummary.java:285)
      	at com.atlassian.jira.web.action.admin.importer.project.ProjectImportSummary$ProjectImportCallable.call(ProjectImportSummary.java:236)
      	at com.atlassian.jira.task.TaskManagerImpl$TaskCallableDecorator.call(TaskManagerImpl.java:458)
      	at com.atlassian.jira.task.TaskManagerImpl$TaskCallableDecorator.call(TaskManagerImpl.java:426)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at com.atlassian.jira.task.ForkedThreadExecutor$ForkedRunnableDecorator.run(ForkedThreadExecutor.java:216)
      	at java.lang.Thread.run(Thread.java:745)
      

      Notes

      In some cases where the export/import is run via ProjectConfigurator, we see this exception:

      2019-03-06 08:03:09,606 JiraTaskExectionThread-154 ERROR usera 481x12515x1 zoxr1n 10.51.121.114 /secure/complete-project-import.jspa [c.a.j.imports.xml.DefaultBackupXmlParser] Unexpected import failure
      java.lang.NullPointerException
      	at com.atlassian.jira.imports.project.customfield.VersionCustomFieldImporter.getMappedImportValue(VersionCustomFieldImporter.java:29)
      	at com.atlassian.jira.imports.project.transformer.ChangeItemTransformerImpl.mapCustomFieldIdList(ChangeItemTransformerImpl.java:73)
      	at com.atlassian.jira.imports.project.transformer.ChangeItemTransformerImpl.transform(ChangeItemTransformerImpl.java:55)
      	at com.atlassian.jira.imports.project.handler.ChangeItemPersisterHandler.handleEntity(ChangeItemPersisterHandler.java:54)
      	at com.atlassian.jira.imports.project.handler.ChainedOfBizSaxHandler.endTopLevelElement(ChainedOfBizSaxHandler.java:221)
      	at com.atlassian.jira.imports.project.handler.ChainedOfBizSaxHandler.endElement(ChainedOfBizSaxHandler.java:169)
      	at com.atlassian.jira.imports.project.handler.ChainedOfBizSaxHandler.endElement(ChainedOfBizSaxHandler.java:136)
      	at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
      	at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
      	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
      	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
      	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
      	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
      	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
      	at com.atlassian.security.xml.RestrictedXMLReader.parse(RestrictedXMLReader.java:103)
      	at com.atlassian.jira.imports.xml.DefaultBackupXmlParser$XmlParser.parseXml(DefaultBackupXmlParser.java:115)
      	at com.atlassian.jira.imports.xml.DefaultBackupXmlParser.parse(DefaultBackupXmlParser.java:64)
      	at com.atlassian.jira.imports.xml.DefaultBackupXmlParser.parseXml(DefaultBackupXmlParser.java:52)
      	at com.atlassian.jira.imports.xml.DefaultBackupXmlParser.parseOfBizBackupXml(DefaultBackupXmlParser.java:41)
      	at com.atlassian.jira.imports.project.DefaultProjectImportManager.importChangeItemEntities(DefaultProjectImportManager.java:1117)
      	at com.atlassian.jira.imports.project.DefaultProjectImportManager.doImport(DefaultProjectImportManager.java:663)
      	at com.atlassian.jira.bc.imports.project.DefaultProjectImportService.doImport(DefaultProjectImportService.java:416)
      	at com.awnaba.projectconfigurator.transporter.engine.JiraDataImporter.jiraImportData(JiraDataImporter.java:292)
      	at com.awnaba.projectconfigurator.transporter.engine.JiraDataImporter.importData(JiraDataImporter.java:155)
      	at com.awnaba.projectconfigurator.transporter.engine.JiraDataImporter$DataImportCallable.call(JiraDataImporter.java:450)
      	at com.awnaba.projectconfigurator.transporter.engine.JiraDataImporter.importDataSynchronously(JiraDataImporter.java:420)
      	at com.awnaba.projectconfigurator.operationsapi.impl.ProjectCompleteImporterImpl.executeNextPhase(ProjectCompleteImporterImpl.java:330)
      	at com.awnaba.projectconfigurator.operationsapi.impl.ProjectCompleteImporterImpl.doCompleteImport(ProjectCompleteImporterImpl.java:223)
      	at com.awnaba.projectconfigurator.operationsapi.impl.ProjectCompleteImporterImpl.access$0(ProjectCompleteImporterImpl.java:216)
      	at com.awnaba.projectconfigurator.operationsapi.impl.ProjectCompleteImporterImpl$CompleteImporterTask.call(ProjectCompleteImporterImpl.java:154)
      	at com.awnaba.projectconfigurator.operationsapi.impl.ProjectCompleteImporterImpl$CompleteImporterTask.call(ProjectCompleteImporterImpl.java:1)
      	at com.awnaba.projectconfigurator.longrunningtasks.TaskHelperImpl$WrappingTask.call(TaskHelperImpl.java:108)
      	at com.awnaba.projectconfigurator.longrunningtasks.TaskHelperImpl$WrappingTask.call(TaskHelperImpl.java:1)
      	at com.atlassian.jira.task.TaskManagerImpl$TaskCallableDecorator.call(TaskManagerImpl.java:458)
      	at com.atlassian.jira.task.TaskManagerImpl$TaskCallableDecorator.call(TaskManagerImpl.java:426)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at com.atlassian.jira.task.ForkedThreadExecutor$ForkedRunnableDecorator.run(ForkedThreadExecutor.java:216)
      	at java.lang.Thread.run(Thread.java:745)
      

      Workaround

      Modify the relevant <ChangeItem> entity in XML backup file by changing the value of newvalue and/or oldvalue attribute from [*****] to ***** (Remove the brackets to make it a valid number).

      It is also possible to fix the data at the source by deleting all the history items where the version custom field was mapped to a version that doesn't exist anymore.
      Proceed with caution, please backup your data first, Atlassian Support is not responsible for data loss from the result of these queries

      # replace PROJ with actual project key
      DELETE FROM changeitem WHERE id IN (SELECT ci.id FROM changeitem ci INNER JOIN changegroup cg ON ci.groupid=cg.id INNER JOIN jiraissue ji ON cg.issueid=ji.id INNER JOIN project ON ji.project=project.id WHERE (field LIKE '%Version%' OR field IN (SELECT cfname FROM customfield WHERE customfieldtypekey LIKE '%version%')) AND (ci.oldvalue::integer NOT IN (SELECT id::integer FROM projectversion WHERE project=project.id) OR ci.newvalue::integer NOT IN (SELECT id::integer FROM projectversion WHERE project=project.id)) AND project.pkey='PROJ');
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              cmao Chen Mao (Inactive)
              Votes:
              12 Vote for this issue
              Watchers:
              17 Start watching this issue

              Dates

                Created:
                Updated: