-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Low
-
None
-
Affects Version/s: JCMA - 1.12.42
-
None
-
Minor
Issue Summary
When performing a S2C migration with scoped user and group export, if a group cannot be found (error JCMA 133) an error is thrown and logged in the application logs. This error, however, isn't surfaced in either the pre or post migration error report.
Steps to Reproduce
- Create an empty group
- Add the group as a condition to a Workflow transition and publish the change
- Delete the group
- Perform a S2C migration with scoped user export
- An exception similar to that below will be logged to the application-jira.log, however not to the pre or post migration error report.
Expected Results
The exception should be surfaced to the user in the pre and/or post migration error report, as well as being caught sooner to prevent possible data loss during migration.
Actual Results
The below exception is thrown in the application-jira.log file:
2025-08-21 06:46:44,860+0000 JCMA-MigrationTracker-pool-3-thread-33 ERROR [c.a.j.m.export.framework.DefaultExportFailureHandler] 0c582161-73d7-4937-be68-c81995229dd7: Exporting entity Workflow 'Software Simplified Workflow for Project BETA' failedcom.atlassian.jira.migration.export.framework.ExportException: Group reference could not be found at com.atlassian.jira.migration.export.service.UsersExportService.groupRef(UsersExportService.kt:96) at com.atlassian.jira.migration.export.service.ExportService.groupRef(ExportService.kt:533) at com.atlassian.jira.migration.export.core.workflow.WorkflowExporter.exportUsersAndGroups(WorkflowExporter.kt:92) at com.atlassian.jira.migration.export.core.workflow.WorkflowExporter.exportUsersAndGroups(WorkflowExporter.kt:41) at com.atlassian.jira.migration.export.service.ExportService.exportJiraEntity_0E7RQCE$lambda$13$lambda$12(ExportService.kt:352) at com.atlassian.jira.migration.metrics.TimingMetrics.time(TimingMetrics.kt:21) at com.atlassian.jira.migration.export.service.ExportService.exportJiraEntity-0E7RQCE(ExportService.kt:351) at com.atlassian.jira.migration.export.service.ExportService.exportByEntityImpl(ExportService.kt:288) at com.atlassian.jira.migration.export.service.ExportService.exportByEntityImpl$default(ExportService.kt:265) at com.atlassian.jira.migration.export.service.ExportService.exportOrThrow(ExportService.kt:143) at com.atlassian.jira.migration.export.service.ExportOrThrow$DefaultImpls.exportOrThrow$default(ExportService.kt:43) at com.atlassian.jira.migration.export.core.workflow.WorkflowSchemeExporter.mapDefaultWorkflow(WorkflowSchemeExporter.kt:68) at com.atlassian.jira.migration.export.core.workflow.WorkflowSchemeExporter.exportUsersAndGroups(WorkflowSchemeExporter.kt:56) at com.atlassian.jira.migration.export.core.workflow.WorkflowSchemeExporter.exportUsersAndGroups(WorkflowSchemeExporter.kt:20) at com.atlassian.jira.migration.export.service.ExportService.exportJiraEntity_0E7RQCE$lambda$13$lambda$12(ExportService.kt:352) at com.atlassian.jira.migration.metrics.TimingMetrics.time(TimingMetrics.kt:21) at com.atlassian.jira.migration.export.service.ExportService.exportJiraEntity-0E7RQCE(ExportService.kt:351) at com.atlassian.jira.migration.export.service.ExportService.exportByEntityImpl(ExportService.kt:288) at com.atlassian.jira.migration.export.service.ExportService.exportByEntityImpl$default(ExportService.kt:265) at com.atlassian.jira.migration.export.service.ExportService.exportOrNull(ExportService.kt:397) at com.atlassian.jira.migration.export.service.ExportService.exportOrDefault(ExportService.kt:380) at com.atlassian.jira.migration.export.core.project.ProjectExporter.mapWorkflowScheme(ProjectExporter.kt:203) at com.atlassian.jira.migration.export.core.project.ProjectExporter.exportUsersAndGroups(ProjectExporter.kt:227) at com.atlassian.jira.migration.export.core.project.ProjectExporter.exportUsersAndGroups(ProjectExporter.kt:105) at com.atlassian.jira.migration.export.service.ExportService.exportJiraEntity_0E7RQCE$lambda$13$lambda$12(ExportService.kt:352) at com.atlassian.jira.migration.metrics.TimingMetrics.time(TimingMetrics.kt:21) at com.atlassian.jira.migration.export.service.ExportService.exportJiraEntity-0E7RQCE(ExportService.kt:351) at com.atlassian.jira.migration.export.service.ExportService.exportByEntityImpl(ExportService.kt:288) at com.atlassian.jira.migration.export.service.ExportService.exportByEntityImpl$default(ExportService.kt:265) at com.atlassian.jira.migration.export.service.ExportService.exportOrThrow(ExportService.kt:143) at com.atlassian.jira.migration.export.service.ExportOrThrow$DefaultImpls.exportOrThrow$default(ExportService.kt:43) at com.atlassian.jira.migration.export.ExportFacade.exportProjectUsersAndGroups$lambda$36$lambda$33(ExportFacade.kt:1002) at com.atlassian.jira.migration.tracking.tasks.process.OperationProcessor.runTimedOperation$lambda$0(OperationProcessor.kt:42) at com.atlassian.jira.migration.tracking.tasks.process.OperationProcessor.runTimedOperationWithResult$lambda$5(OperationProcessor.kt:64) at com.atlassian.jira.migration.events.JiraEventDetectionService.runAndDetect(JiraEventDetectionService.kt:69) at com.atlassian.jira.migration.tracking.tasks.process.OperationProcessor.runTimedOperationWithResult(OperationProcessor.kt:61) at com.atlassian.jira.migration.tracking.tasks.process.OperationProcessor.runTimedOperation(OperationProcessor.kt:41) at com.atlassian.jira.migration.tracking.tasks.process.OperationProcessor.runTimedOperation$default(OperationProcessor.kt:35) at com.atlassian.jira.migration.export.ExportFacade.exportProjectUsersAndGroups(ExportFacade.kt:997) at com.atlassian.jira.migration.workers.usersgroups.multinode.scoped.extractor.ProjectScopedUserExtractor.getUsersGroupsExportOutcome(ProjectScopedUserExtractor.kt:69) at com.atlassian.jira.migration.workers.usersgroups.multinode.scoped.extractor.AbstractScopedUserExtractor.getUsersGroupsExportOutcome$default(AbstractScopedUserExtractor.kt:79) at com.atlassian.jira.migration.workers.usersgroups.multinode.scoped.extractor.ProjectScopedUserExtractor.fetchUsersAndGroupsWithReferences(ProjectScopedUserExtractor.kt:95) at com.atlassian.jira.migration.workers.usersgroups.multinode.scoped.extractor.ProjectScopedUserExtractor.extractUsersGroups(ProjectScopedUserExtractor.kt:59) at com.atlassian.jira.migration.workers.usersgroups.multinode.scoped.processor.V4ScopedUsersGroupsProcessor.process(V4ScopedUsersGroupsProcessor.kt:96) at com.atlassian.jira.migration.workers.projects.V4ProjectsWorker.processScopedUserExtraction(V4ProjectsWorker.kt:202) at com.atlassian.jira.migration.workers.projects.V4ProjectsWorker.process(V4ProjectsWorker.kt:208) at com.atlassian.jira.migration.tracking.polling.V4Poller.execute(V4Poller.kt:118) at com.atlassian.jira.migration.tracking.polling.V4Poller.pollAndExecute$lambda$2(V4Poller.kt:102) at io.prometheus.metrics.core.datapoints.TimerApi.time(TimerApi.java:63) at com.atlassian.jira.migration.tracking.polling.V4Poller.pollAndExecute(V4Poller.kt:101) at com.atlassian.jira.migration.tracking.polling.V4Poller.doPoll(V4Poller.kt:77) at com.atlassian.jira.migration.tracking.polling.AbstractPoller.execute(AbstractPoller.kt:69) at com.atlassian.jira.migration.tracking.polling.AbstractPoller.access$execute(AbstractPoller.kt:20) at com.atlassian.jira.migration.tracking.polling.AbstractPoller$startPolling$1.invoke(AbstractPoller.kt:40) at com.atlassian.jira.migration.tracking.polling.AbstractPoller$startPolling$1.invoke(AbstractPoller.kt:40) at com.atlassian.jira.migration.tracking.utils.ThreadUtils.safeExecutePeriodicallyUntilStopped(ThreadUtils.kt:39) at com.atlassian.jira.migration.tracking.polling.AbstractPoller.startPolling(AbstractPoller.kt:39) at com.atlassian.jira.migration.tracking.MigrationTracker.addAndStartV4WorkPoller$lambda$9$lambda$8(MigrationTracker.kt:145) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:840)
Workaround
- Migrate all users and groups rather than scoped users and groups;
- Or, run a test migration and check the application logs for JCMA 133. If this is found, remove the missing group from where it is referenced before proceeding with a production migration.