JCMA: Users and groups migration fails with NPE

XMLWordPrintable

    • 1
    • Severity 2 - Major
    • 2

      Issue Summary

      When migrating from the server to the cloud using JCMA, the user and group assessment was completed without any errors. No errors were shown during the preflight check; however, the migration of users and groups failed due to the java.lang.NullPointerException.

      This is reproducible on Data Center:

      Steps to Reproduce

      1. Create a migration plan using a single JSM project.
      2. On the user's selection, choose "users and groups related to the selected projects."
      3. Select the options below:
        • Include all users and groups assigned to necessary roles.
        • Include any user who is a member of a group included in this migration.
      4. Execute the plan and wait for preflight checks to be completed.
      5. Once the preflight checks are complete, click on the 'Run' button to initiate the migration.
      6. The migration fails during the users and groups migration phase, and an NPE will be reported in the logs.

      Expected Results

      The migration should be completed successfully without any NPE errors.

      Actual Results

      The migration fails, and an exception is thrown in the jira-application.log file

      java.lang.NullPointerException
      	at com.atlassian.jira.migration.workers.usersgroups.UsersGroupsExtractor.toUserGroupExtractionResult(UsersGroupsExtractor.kt:265)
      	at com.atlassian.jira.migration.workers.usersgroups.UsersGroupsExtractor.getReferencedExtractionResult(UsersGroupsExtractor.kt:202)
      	at com.atlassian.jira.migration.workers.usersgroups.UsersGroupsExtractor.extract(UsersGroupsExtractor.kt:182)
      	at com.atlassian.jira.migration.workers.usersgroups.UsersGroupsExtractor.extract(UsersGroupsExtractor.kt:108)
      	at com.atlassian.jira.migration.workers.usersgroups.UsersGroupsProcessorService.extractUsersGroups(UsersGroupsProcessorService.kt:45)
      	at com.atlassian.jira.migration.workers.usersgroups.AbstractUsersGroupsProcessor$data$2$1.invoke(AbstractUsersGroupsProcessor.kt:52)
      	at com.atlassian.jira.migration.workers.usersgroups.AbstractUsersGroupsProcessor$data$2$1.invoke(AbstractUsersGroupsProcessor.kt:48)
      	at com.atlassian.jira.migration.tracking.tasks.process.OperationProcessor$runTimedOperationWithResult$1.invoke(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.runTimedOperationWithResult$default(OperationProcessor.kt:54)
      	at com.atlassian.jira.migration.workers.usersgroups.AbstractUsersGroupsProcessor$data$2.invoke(AbstractUsersGroupsProcessor.kt:48)
      	at com.atlassian.jira.migration.workers.usersgroups.AbstractUsersGroupsProcessor$data$2.invoke(AbstractUsersGroupsProcessor.kt:35)
      	at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:81)
      	at com.atlassian.jira.migration.workers.usersgroups.AbstractUsersGroupsProcessor.getData(AbstractUsersGroupsProcessor.kt:35)
      	at com.atlassian.jira.migration.workers.usersgroups.AbstractUsersGroupsProcessor.getUsersEligibleForMigrationWithDuplicateEmails(AbstractUsersGroupsProcessor.kt:64)
      	at com.atlassian.jira.migration.workers.usersgroups.AbstractUsersGroupsProcessor.process(AbstractUsersGroupsProcessor.kt:79)
      	at com.atlassian.jira.migration.workers.usersgroups.V3UsersGroupsWorker.process(V3UsersGroupsWorker.kt:74)
      	at com.atlassian.jira.migration.tracking.polling.Poller.dispatchTask(Poller.kt:153)
      	at com.atlassian.jira.migration.tracking.polling.Poller.pollForTaskAndDispatch(Poller.kt:148)
      	at com.atlassian.jira.migration.tracking.polling.Poller.pollForTaskAndDispatchNoThrow(Poller.kt:89)
      	at com.atlassian.jira.migration.tracking.polling.Poller.doPoll(Poller.kt:74)
      	at com.atlassian.jira.migration.tracking.polling.AbstractPoller.execute(AbstractPoller.kt:67)
      	at com.atlassian.jira.migration.tracking.polling.AbstractPoller.access$execute(AbstractPoller.kt:18)
      	at com.atlassian.jira.migration.tracking.polling.AbstractPoller$startPolling$1.invoke(AbstractPoller.kt:38)
      	at com.atlassian.jira.migration.tracking.polling.AbstractPoller$startPolling$1.invoke(AbstractPoller.kt:38)
      	at com.atlassian.jira.migration.tracking.utils.ThreadUtils.safeExecutePeriodicallyUntilStopped(ThreadUtils.kt:39)
      	at com.atlassian.jira.migration.tracking.polling.AbstractPoller.startPolling(AbstractPoller.kt:37)
      	at com.atlassian.jira.migration.tracking.MigrationTracker.addAndStartWorkPoller$lambda$4$lambda$3(MigrationTracker.kt:78)
      	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
      	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)
      

      Workaround

      Currently, there is no known workaround for this behavior. A workaround will be added here when available.

            Assignee:
            Esteban Casuscelli
            Reporter:
            Deepak Pandey
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: