-
Bug
-
Resolution: Unresolved
-
Medium
-
None
-
JCMA - 1.12.4
-
5
-
Severity 3 - Minor
-
8
Issue Summary
- The JCMA pre-flight check is unable to detect blocked URL by firewalls on Data Center instances.
- This can lead to migration failures if users are unaware of the blocked URLs. The workaround is to manually whitelist all required URLs before running JCMA.
This is reproducible on Data Center: (yes) / (no) - Yes
Steps to Reproduce
- Here is the video demonstrating the steps to reproduce on Jira server 9.12 (JCMA 1.12.5): https://www.loom.com/share/d27e069edce54fc08ad658d0b197df18?sid=a9726b4f-1bd1-4f5b-97c7-f31ddbc2631e
1. Access the server and block https://api-private.atlassian.com which needs to be whitelisted before running JCMA as per the article.
2. Develop a new migration plan.
3. Select the new cloud site. / Refresh the token
OR
2. Create a new migration plan
3. select the projects and other fields and select Next
Expected Results
- Pre-flight check should run the network preflight check and give us the error if the url is blocked
Actual Results
The below error is thrown in the atlassian-jira-migration.log file:
2024-09-26 16:02:55,598 Caesium-2-4 WARN ServiceRunner [jira.migration.analytics.AnalyticsClient] AnalyticsClient failed to send a request to server com.atlassian.jira.migration.httpclient.exceptions.HttpCommunicationException: An error occurred when requesting against resource https://api-private.atlassian.com/migration/analytics/jiraMigration/event: api-private.atlassian.com at com.atlassian.jira.migration.httpclient.exceptions.ExceptionsKt.communicationError(Exceptions.kt:15) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.httpclient.AbstractPluginHttpClient.execute(AbstractPluginHttpClient.kt:76) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.httpclient.AbstractPluginHttpClient.execute(AbstractPluginHttpClient.kt:60) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.analytics.AnalyticsClient.execute(AnalyticsClient.kt:82) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.analytics.AnalyticsClient.sendEvents(AnalyticsClient.kt:63) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.analytics.AnalyticsEventDispatcher$sendEventAndClean$3.invoke(AnalyticsEventDispatcher.kt:83) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.analytics.AnalyticsEventDispatcher$sendEventAndClean$3.invoke(AnalyticsEventDispatcher.kt:82) ~[plugin.9378816707056339085.download.jar:?] at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.analytics.AnalyticsEventDispatcher.sendEventAndClean(AnalyticsEventDispatcher.kt:118) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.analytics.AnalyticsEventDispatcher.sendEventAndClean(AnalyticsEventDispatcher.kt:73) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.jira.migration.analytics.AnalyticsEventDispatcher.runJob(AnalyticsEventDispatcher.kt:60) ~[plugin.9378816707056339085.download.jar:?] at com.atlassian.scheduler.core.JobLauncher.runJob(JobLauncher.java:134) ~[?:?] at com.atlassian.scheduler.core.JobLauncher.launchAndBuildResponse(JobLauncher.java:106) ~[?:?] at com.atlassian.scheduler.core.JobLauncher.launch(JobLauncher.java:90) ~[?:?] at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.launchJob(CaesiumSchedulerService.java:500) ~[?:?] at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJob(CaesiumSchedulerService.java:495) ~[?:?] at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJobWithRecoveryGuard(CaesiumSchedulerService.java:519) ~[?:?] at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeQueuedJob(CaesiumSchedulerService.java:415) ~[?:?] at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeJob(SchedulerQueueWorker.java:66) ~[?:?] at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeNextJob(SchedulerQueueWorker.java:60) ~[?:?] at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.run(SchedulerQueueWorker.java:35) ~[?:?] at java.lang.Thread.run(Thread.java:829) ~[?:?] Caused by: java.net.UnknownHostException: api-private.atlassian.com at java.net.InetAddress$CachedAddresses.get(InetAddress.java:797) ~[?:?] at java.net.InetAddress.getAllByName0(InetAddress.java:1524) ~[?:?] at java.net.InetAddress.getAllByName(InetAddress.java:1382) ~[?:?] at java.net.InetAddress.getAllByName(InetAddress.java:1306) ~[?:?] at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.execchain.ServiceUnavailableRetryExec.execute(ServiceUnavailableRetryExec.java:85) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.14.jar:4.5.14] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) ~[httpclient-4.5.14.jar:4.5.14] at com.atlassian.jira.migration.httpclient.AbstractPluginHttpClient.execute(AbstractPluginHttpClient.kt:71) ~[plugin.9378816707056339085.download.jar:?] ... 20 more
Workaround
- Currently, the only solution is to follow the article and manually whitelist all required URLs before running JCMA.
Impact:
This bug can lead to migration failures if users are unaware of the blocked URLs. It also creates a confusing experience with the pre-flight check not providing accurate feedback.
Proposed Fix:
- Modify the JCMA pre-flight check to actively test connectivity with essential URLs or Modify the flow of network check before starting the migration
- Upon encountering a blocked URL, the pre-flight check should display a clear and actionable error message for the user. This message should explain the issue and suggest whitelisting the blocked URL(s).