-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Medium
-
Affects Version/s: 9.1.0, 9.2.0
-
Component/s: Administration - S3 Object Storage
-
4
-
Severity 2 - Major
-
11
Issue Summary
Upgrading a Confluence instance which uses S3 object storage to version 9.2.0 results in users being unable to view, download, or upload attachments.
Steps to Reproduce
Upgrade a Confluence instance using S3 object storage to 9.2.0
Expected Results
Attachments stored in S3 continue to be accessible following an upgrade to 9.2.0
Actual Results
Attachments stored in S3 continue are not accessible following an upgrade to 9.2.0
The below ClassNotFoundException exception is thrown in the* atlassian-confluence.log* file pointing towards an issue with the awssdk
2025-01-09 17:31:23,136 ERROR [Catalina-utility-2] [atlassian.confluence.event.ConfluenceListenerInvoker] log java.lang.RuntimeException occurred dispatching com.atlassian.confluence.event.events.plugin.PluginFrameworkStartedEvent to [com.atlassian.confluence.impl.health.PluginFrameworkStartedHealthCheckListener] java.lang.RuntimeException: software/amazon/awssdk/protocols/query/interceptor/QueryParametersToBodyInterceptor. Listener: com.atlassian.confluence.impl.health.PluginFrameworkStartedHealthCheckListener event: com.atlassian.confluence.event.events.plugin.PluginFrameworkStartedEvent at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:53) at com.atlassian.confluence.event.DelegatingListenerInvoker.invoke(DelegatingListenerInvoker.java:23) at com.atlassian.confluence.event.ConfluenceListenerInvoker.invoke(ConfluenceListenerInvoker.java:30) at com.atlassian.event.internal.ComparableListenerInvoker.invoke(ComparableListenerInvoker.java:48) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.lambda$static$0(AsynchronousAbleEventDispatcher.java:37) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:85) at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:102) at com.atlassian.confluence.event.TimingEventPublisher.publish(TimingEventPublisher.java:75) at com.atlassian.confluence.plugin.ConfluencePluginManager.lateStartup(ConfluencePluginManager.java:160) at com.atlassian.confluence.plugin.PluginFrameworkContextListener.contextInitialized(PluginFrameworkContextListener.java:85) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4016) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4460) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: java.lang.NoClassDefFoundError: software/amazon/awssdk/protocols/query/interceptor/QueryParametersToBodyInterceptor at software.amazon.awssdk.services.sts.DefaultStsBaseClientBuilder.finalizeServiceConfiguration(DefaultStsBaseClientBuilder.java:73) at software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder.finalizeChildConfiguration(AwsDefaultClientBuilder.java:167) at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.syncClientConfiguration(SdkDefaultClientBuilder.java:197) at software.amazon.awssdk.services.sts.DefaultStsClientBuilder.buildClient(DefaultStsClientBuilder.java:37) at software.amazon.awssdk.services.sts.DefaultStsClientBuilder.buildClient(DefaultStsClientBuilder.java:26) at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.build(SdkDefaultClientBuilder.java:164) at software.amazon.awssdk.services.sts.internal.StsWebIdentityCredentialsProviderFactory$StsWebIdentityCredentialsProvider.<init>(StsWebIdentityCredentialsProviderFactory.java:71) at software.amazon.awssdk.services.sts.internal.StsWebIdentityCredentialsProviderFactory$StsWebIdentityCredentialsProvider.<init>(StsWebIdentityCredentialsProviderFactory.java:55) at software.amazon.awssdk.services.sts.internal.StsWebIdentityCredentialsProviderFactory.create(StsWebIdentityCredentialsProviderFactory.java:47) at software.amazon.awssdk.auth.credentials.WebIdentityTokenFileCredentialsProvider.<init>(WebIdentityTokenFileCredentialsProvider.java:113) at software.amazon.awssdk.auth.credentials.WebIdentityTokenFileCredentialsProvider.<init>(WebIdentityTokenFileCredentialsProvider.java:50) at software.amazon.awssdk.auth.credentials.WebIdentityTokenFileCredentialsProvider$BuilderImpl.build(WebIdentityTokenFileCredentialsProvider.java:313) at software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider.lambda$createChain$0(DefaultCredentialsProvider.java:98) at software.amazon.awssdk.utils.Lazy.getValue(Lazy.java:50) at software.amazon.awssdk.auth.credentials.internal.LazyAwsCredentialsProvider.resolveCredentials(LazyAwsCredentialsProvider.java:45) at software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider.resolveCredentials(DefaultCredentialsProvider.java:129) at software.amazon.awssdk.auth.credentials.AwsCredentialsProvider.resolveIdentity(AwsCredentialsProvider.java:54) at software.amazon.awssdk.services.s3.auth.scheme.internal.S3AuthSchemeInterceptor.lambda$trySelectAuthScheme$4(S3AuthSchemeInterceptor.java:163) at software.amazon.awssdk.core.internal.util.MetricUtils.reportDuration(MetricUtils.java:77) at software.amazon.awssdk.services.s3.auth.scheme.internal.S3AuthSchemeInterceptor.trySelectAuthScheme(S3AuthSchemeInterceptor.java:163) at software.amazon.awssdk.services.s3.auth.scheme.internal.S3AuthSchemeInterceptor.selectAuthScheme(S3AuthSchemeInterceptor.java:84) at software.amazon.awssdk.services.s3.auth.scheme.internal.S3AuthSchemeInterceptor.beforeExecution(S3AuthSchemeInterceptor.java:64) at software.amazon.awssdk.core.interceptor.ExecutionInterceptorChain.lambda$beforeExecution$1(ExecutionInterceptorChain.java:59) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at software.amazon.awssdk.core.interceptor.ExecutionInterceptorChain.beforeExecution(ExecutionInterceptorChain.java:59) at software.amazon.awssdk.awscore.internal.AwsExecutionContextBuilder.runInitialInterceptors(AwsExecutionContextBuilder.java:242) at software.amazon.awssdk.awscore.internal.AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(AwsExecutionContextBuilder.java:132) at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.invokeInterceptorsAndCreateExecutionContext(AwsSyncClientHandler.java:67) at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:76) at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:182) at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:74) at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45) at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:53) at software.amazon.awssdk.services.s3.DefaultS3Client.putObject(DefaultS3Client.java:10294) at software.amazon.awssdk.services.s3.S3Client.putObject(S3Client.java:19851) at software.amazon.awssdk.services.s3.S3Client.putObject(S3Client.java:20037) at com.atlassian.dc.filestore.impl.s3.S3Path.lambda$put$15(S3Path.java:141) at com.atlassian.dc.filestore.impl.s3.OperationExecutorImpl.performOperation(OperationExecutorImpl.java:31) at com.atlassian.dc.filestore.impl.s3.S3Path.put(S3Path.java:141) at com.atlassian.dc.filestore.api.FileStore$Writer.write(FileStore.java:296) at com.atlassian.confluence.impl.pages.attachments.AttachmentStorageChecker.testWrite(AttachmentStorageChecker.java:41) at com.atlassian.confluence.impl.pages.attachments.AttachmentStorageChecker.testOperations(AttachmentStorageChecker.java:32) at com.atlassian.confluence.impl.health.checks.AttachmentDataFileStoreCheck.checkConnectivity(AttachmentDataFileStoreCheck.java:136) at com.atlassian.confluence.impl.health.checks.AttachmentDataFileStoreCheck.doPerform(AttachmentDataFileStoreCheck.java:105) at com.atlassian.confluence.impl.health.HealthCheckTemplate.perform(HealthCheckTemplate.java:24) at com.atlassian.confluence.impl.health.DefaultHealthCheckExecutor.runCheck(DefaultHealthCheckExecutor.java:84) at com.atlassian.confluence.impl.health.DefaultHealthCheckExecutor.lambda$applyAndCollectExceptions$1(DefaultHealthCheckExecutor.java:63) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.atlassian.confluence.impl.health.DefaultHealthCheckExecutor.applyAndCollectExceptions(DefaultHealthCheckExecutor.java:63) at com.atlassian.confluence.impl.health.DefaultHealthCheckExecutor.performHealthChecks(DefaultHealthCheckExecutor.java:51) at com.atlassian.confluence.impl.health.DefaultHealthCheckRunner.executeChecksAndRecordResults(DefaultHealthCheckRunner.java:106) at com.atlassian.confluence.impl.health.DefaultHealthCheckRunner.runHealthChecks(DefaultHealthCheckRunner.java:74) at com.atlassian.confluence.impl.health.PluginFrameworkStartedHealthCheckListener.onPluginFrameworkStartedEvent(PluginFrameworkStartedHealthCheckListener.java:40) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:42) ... 20 more Caused by: java.lang.ClassNotFoundException: software.amazon.awssdk.protocols.query.interceptor.QueryParametersToBodyInterceptor at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1339) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1148) ... 85 more
Additionally, the following response can be observed when attempting to add an attachment:
{
"message": "software/amazon/awssdk/protocols/query/interceptor/QueryParametersToBodyInterceptor",
"status-code": 500,
"stack-trace": "Please contact your admin passing attached Log's referral number: 6f925e7f-3114-49ec-b321-9e3de2a5496e"
}
Workaround
Currently there is no known workaround for this behavior. A workaround will be added here when available