-
Bug
-
Resolution: Fixed
-
Highest
-
None
-
None
-
5
-
Major
Issue Summary
Some times when migrating projects using JCMA, some attachments may fail to migrate into some issues, this is a random problem and doesn't seem to be caused by specific type of attachment, it's rather a transient issue that can have a myriad of causes disk reliability, available db connection, network, server load, etc. Ideally, JCMA should fail the project migration if some of the attachments do not get migrated.
Steps to Reproduce
The problem is intermittent.
Expected Results
All attachments are successfully migrated.
Actual Results
The migration completes partially, and some issues will be missing attachments.
The below exception is thrown in the atlassian-jira.log file:
020-08-01 14:04:49,878-0400 pool-419-thread-5 WARN xxxxxx 659x6686x4 1w4yjib xxxxxx /rest/plugins/1.0/installed-marketplace [c.a.j.m.workers.attachments.AttachmentProcessor] xxxxxxxxxx-attachmentsUpload#xxxxxx$xxxxxxx: error in attachments upload task for project key xxxxxxxx com.atlassian.jira.migration.workers.attachments.AttachmentUploadException: com.atlassian.jira.issue.attachment.AttachmentReadException: com.atlassian.jira.migration.mediaclient.MediaClientErrorException: request to Media failed com.atlassian.jira.migration.workers.attachments.AttachmentsUploader.uploadAttachments(AttachmentsUploader.kt:89) com.atlassian.jira.migration.workers.attachments.AttachmentProcessor.process(AttachmentsWorker.kt:97) com.atlassian.jira.migration.workers.attachments.AttachmentsWorker.process(AttachmentsWorker.kt:52) at com.atlassian.jira.migration.tracking.polling.Poller.dispatchTask(Poller.kt:116) com.atlassian.jira.migration.tracking.polling.Poller.pollForTaskAndDispatch(Poller.kt:111) com.atlassian.jira.migration.tracking.polling.Poller.pollForTaskAndDispatchNoThrow(Poller.kt:65) at com.atlassian.jira.migration.tracking.polling.Poller.doPoll(Poller.kt:50) com.atlassian.jira.migration.tracking.polling.AbstractPoller.execute(AbstractPoller.kt:62) com.atlassian.jira.migration.tracking.polling.AbstractPoller.access$execute(AbstractPoller.kt:16) com.atlassian.jira.migration.tracking.polling.AbstractPoller$startPolling$1.invoke(AbstractPoller.kt:35) com.atlassian.jira.migration.tracking.polling.AbstractPoller$startPolling$1.invoke(AbstractPoller.kt:16) com.atlassian.jira.migration.tracking.utils.ThreadUtils.safeExecutePeriodicallyUntilStopped(ThreadUtils.kt:43) com.atlassian.jira.migration.tracking.polling.AbstractPoller.startPolling(AbstractPoller.kt:34) com.atlassian.jira.migration.tracking.MigrationTracker$addAndStartWorkPoller$1$1.run(MigrationTracker.kt:77) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: com.atlassian.jira.issue.attachment.AttachmentReadException: com.atlassian.jira.issue.attachment.AttachmentReadException: com.atlassian.jira.migration.mediaclient.MediaClientErrorException: request to Media failed at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593) com.atlassian.jira.migration.workers.attachments.AttachmentsUploader.uploadAttachments(AttachmentsUploader.kt:74) Caused by: com.atlassian.jira.issue.attachment.AttachmentReadException: com.atlassian.jira.migration.mediaclient.MediaClientErrorException: request to Media failed com.atlassian.jira.issue.attachment.store.DefaultFileSystemAttachmentStore$3.call(DefaultFileSystemAttachmentStore.java:152) io.atlassian.util.concurrent.Executors$DefaultSubmitter$CallableRunner.run(Executors.java:85) at io.atlassian.util.concurrent.LimitedExecutor$Runner.run(LimitedExecutor.java:94) Caused by: com.atlassian.jira.migration.mediaclient.MediaClientErrorException: request to Media failed com.atlassian.jira.migration.mediaclient.MediaClient.updateUpload(MediaClient.kt:128) com.atlassian.jira.migration.workers.attachments.AttachmentsUploader$uploadAttachmentContent$1.withInputStream(AttachmentsUploader.kt:169) com.atlassian.jira.migration.workers.attachments.AttachmentsUploader$uploadAttachmentContent$1.withInputStream(AttachmentsUploader.kt:31) com.atlassian.jira.issue.managers.DefaultAttachmentManager$7.apply(DefaultAttachmentManager.java:731) com.atlassian.jira.issue.managers.DefaultAttachmentManager$7.apply(DefaultAttachmentManager.java:727) com.atlassian.jira.issue.attachment.store.DefaultFileSystemAttachmentStore$2.apply(DefaultFileSystemAttachmentStore.java:127) com.atlassian.jira.issue.attachment.store.DefaultFileSystemAttachmentStore$2.apply(DefaultFileSystemAttachmentStore.java:124) com.atlassian.jira.issue.attachment.store.DefaultFileSystemAttachmentStore$3.call(DefaultFileSystemAttachmentStore.java:150) Caused by: com.atlassian.jira.migration.httpclient.exceptions.UnexpectedStatusCodeException: Received an unexpected status code; expected [200], but received 409: {"error":{"code":"InvalidStateError","title":"Conflict: provided offset 0 must be equal to current number of chunks","href":"https://api.media.atlassian.com#InvalidStateError"}} com.atlassian.jira.migration.httpclient.exceptions.ExceptionsKt.unexpectedStatusCode(Exceptions.kt:7) com.atlassian.jira.migration.httpclient.MigrationPluginHttpClient.checkExpectedResponseCode(MigrationPluginHttpClient.kt:121) com.atlassian.jira.migration.httpclient.MigrationPluginHttpClient.execute(MigrationPluginHttpClient.kt:65) at com.atlassian.jira.migration.mediaclient.MediaClient.execute(MediaClient.kt:175)
Workaround
Delete the projects and remigrate the affected projects.