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

Time required for Project Import on JIRA Data Center increases with number of nodes

    XMLWordPrintable

Details

    Description

      Problem Definition

      The number of nodes plays a role on the total time taken to complete a Project Import in JIRA Data Center (JDC). This is due the additional actions it need to perform in the background by communicating with all the available nodes and replicating those information across them.

      This result project import to take a longer time when the same set of data is used:

      • 12 nodes took ~9 hours in total
      • 1 node took ~30 minutes in total

      Additional data

      The Project import process has 3 stages and not until the last stage where it will make changes to the database. The first 2 stages are processing the XML and mapping the field values, where in comparison took the most time and has the biggest differences. As an example:

        6 nodes 2 nodes
      Processing XML 55 minutes 5 minutes
      Mapping field values 55 minutes 5 minutes

      In the background, the process parses XML backup <- caches the progress <- replicates the progress via copy across the cluster <- lists nodes to notify.

      The following thread can be seen long running taken during parsing the XML

      "JiraTaskExectionThread-1" #1141 daemon prio=5 tid=0x00007f9bd9500800 nid=0x6a0f runnable [0x00007f9a72664000]
         java.lang.Thread.State: RUNNABLE
      	at java.net.SocketInputStream.socketRead0(Native Method)
      	(...)
      	at com.atlassian.jira.cluster.distribution.JiraCacheManagerPeerProvider.listRemoteCachePeers(JiraCacheManagerPeerProvider.java:93)
      	at net.sf.ehcache.distribution.RMISynchronousCacheReplicator.listRemoteCachePeers(RMISynchronousCacheReplicator.java:335)
      	at net.sf.ehcache.distribution.RMISynchronousCacheReplicator.replicatePutNotification(RMISynchronousCacheReplicator.java:145)
      	(...)
      	at com.atlassian.jira.imports.project.handler.ChainedSaxHandler.endElement(ChainedSaxHandler.java:151)
      	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.parseBackupXml(DefaultBackupXmlParser.java:54)
      	at com.atlassian.jira.imports.project.DefaultProjectImportManager.getBackupOverview(DefaultProjectImportManager.java:202)
      	at com.atlassian.jira.bc.imports.project.DefaultProjectImportService.getBackupOverview(DefaultProjectImportService.java:186)
      	at com.atlassian.jira.web.action.admin.importer.project.ProjectImportSelectBackup$BackupOverviewCallable.call(ProjectImportSelectBackup.java:245)
      	at com.atlassian.jira.web.action.admin.importer.project.ProjectImportSelectBackup$BackupOverviewCallable.call(ProjectImportSelectBackup.java:233)
      	at com.atlassian.jira.task.TaskManagerImpl$TaskCallableDecorator.call(TaskManagerImpl.java:528)
      	at com.atlassian.jira.task.TaskManagerImpl$TaskCallableDecorator.call(TaskManagerImpl.java:491)
      	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:254)
      	at java.lang.Thread.run(Thread.java:745)
      

      Notes:

      Most probably related to bug: https://jira.terracotta.org/jira/browse/EHC-640

      Workaround

      Have a single node available with others shutdown during offpeak hours to run the Project Import.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              znoorsazali Zul NS [Atlassian]
              Votes:
              5 Vote for this issue
              Watchers:
              12 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: