-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Low
-
None
-
Affects Version/s: JCMA - 1.9.2, JCMA - 1.9.4
-
5
-
Minor
-
6
Issue Summary
When using MySQL and migrating a project with a large number of issues, the project fails while getting the project issue links (when export optimization is enabled).
Steps to Reproduce
- Have a project with a large number of issues (e.g. 500k).
- Use JCMA in the latest version with a MySQL database.
- Start a migration plan and scope that project.
Expected Results
The project would be migrated without errors.
Actual Results
The below exception is thrown in the atlassian-jira.log file:
2023-05-21 11:04:39,552 pool-102-thread-1 ERROR user 1013x751x1 jg7wz1 ip.adr.xx.x /rest/migration/latest/check/ef2d0541d56eyg6egstgfbdb89d2dd5c4 [jira.migration.export.ExportFacade] Exception fetching issue links for projectId=14600 , retrying... {} com.querydsl.core.QueryException: Caught CommunicationsException for select distinct `ISSUELINK`.`ID`, `ISSUELINK`.`LINKTYPE`, `ISSUELINK`.`SOURCE`, `ISSUELINK`.`DESTINATION`, `ISSUELINK`.`SEQUENCE` from `issuelink` `ISSUELINK` inner join `jiraissue` `JIRAISSUE` on `ISSUELINK`.`SOURCE` = `JIRAISSUE`.`ID` or `ISSUELINK`.`DESTINATION` = `JIRAISSUE`.`ID` where `JIRAISSUE`.`PROJECT` = ? and `ISSUELINK`.`LINKTYPE` is not null at com.querydsl.sql.DefaultSQLExceptionTranslator.translate(DefaultSQLExceptionTranslator.java:50) at com.querydsl.sql.Configuration.translate(Configuration.java:459) at com.querydsl.sql.AbstractSQLQuery.fetch(AbstractSQLQuery.java:502) at com.atlassian.jira.migration.export.db.core.IssueLinkReader.getAllIssueLinksInProject$lambda$0(IssueLinkReader.kt:47) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.lambda$execute$0(DatabaseAccessorImpl.java:69) at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.executeInternal(DefaultTransactionalExecutor.java:87) at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.lambda$execute$0(DefaultTransactionalExecutor.java:43) at com.atlassian.jira.database.DatabaseAccessorImpl.runInManagedTransaction(DatabaseAccessorImpl.java:131) at jdk.internal.reflect.GeneratedMethodAccessor245.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) at com.sun.proxy.$Proxy581.runInManagedTransaction(Unknown Source) at jdk.internal.reflect.GeneratedMethodAccessor245.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:130) at com.sun.proxy.$Proxy581.runInManagedTransaction(Unknown Source) at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.runInStartedOrExistingTransaction(JiraHostConnectionAccessor.java:130) at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.execute(JiraHostConnectionAccessor.java:60) at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.execute(DefaultTransactionalExecutor.java:40) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.execute(DatabaseAccessorImpl.java:67) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.runInTransaction(DatabaseAccessorImpl.java:43) at com.atlassian.pocketknife.api.querydsl.DatabaseAccessor.run(DatabaseAccessor.java:201) at com.atlassian.jira.migration.export.db.core.IssueLinkReader.getAllIssueLinksInProject(IssueLinkReader.kt:29) at com.atlassian.jira.migration.export.ExportFacade.populateIssueLinkCache(ExportFacade.kt:528) at com.atlassian.jira.migration.export.ExportFacade.exportProjectReportData(ExportFacade.kt:284) at com.atlassian.jira.migration.preflight.reports.PreMigrationReportsService$gatherReportsDataFromProjectParallel$futures$1$1$1.invoke(PreMigrationReportsService.kt:321) at com.atlassian.jira.migration.preflight.reports.PreMigrationReportsService$gatherReportsDataFromProjectParallel$futures$1$1$1.invoke(PreMigrationReportsService.kt:320) at com.atlassian.jira.migration.jiraservice.JiraExtensionsKt.wrap(JiraExtensions.kt:19) at com.atlassian.jira.migration.preflight.reports.PreMigrationReportsService.gatherReportsDataFromProjectParallel$lambda$5$lambda$4(PreMigrationReportsService.kt:320) at java.base/java.util.concurrent.FutureTask.run(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Workaround
Disabling the parallel export of issue links resolves the issue. For this, enable the Dark Feature:
- com.atlassian.jira.migration.disable.issuelink.export.optimisation