opensearch-project / opensearch-project/OpenSearch
[BUG] snapshot restore on remote-backed cluster never finishes
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 13.7k
- Forks
- 3k
- Avg merge
- 2d 23h
- Merged PRs (30d)
- 108
Description
Describe the bug
I'm trying to restore snapshot from s3 repository with remote-backed storage configured, but it doesn't work.
I have a lot of java.lang.WrongThreadException: Attempted access outside owning thread errors in the logs:
2025-03-07T15:29:13.459Z | [2025-03-07T15:29:13,456][WARN ][o.o.i.s.RemoteStoreRefreshListener] [i-0ed41ec745a2bc21b] [index_1][0] Exception while uploading new segments to the remote segment store
-- | --
| 2025-03-07T15:29:13.459Z | java.util.concurrent.CompletionException: java.lang.WrongThreadException: Attempted access outside owning thread
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315) ~[?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320) ~[?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:936) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) [?:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.utils.CompletableFutureUtils.lambda$forwardExceptionTo$0(CompletableFutureUtils.java:79) [utils-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) [?:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncApiCallMetricCollectionStage.lambda$execute$0(AsyncApiCallMetricCollectionStage.java:54) [sdk-core-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) [?:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncApiCallTimeoutTrackingStage.lambda$execute$2(AsyncApiCallTimeoutTrackingStage.java:67) [sdk-core-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) [?:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.utils.CompletableFutureUtils.lambda$forwardExceptionTo$0(CompletableFutureUtils.java:79) [utils-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) [?:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncRetryableStage$RetryingExecutor.maybeAttemptExecute(AsyncRetryableStage.java:103) [sdk-core-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncRetryableStage$RetryingExecutor.maybeRetryExecute(AsyncRetryableStage.java:184) [sdk-core-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncRetryableStage$RetryingExecutor.lambda$attemptExecute$1(AsyncRetryableStage.java:159) [sdk-core-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) [?:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.utils.CompletableFutureUtils.lambda$forwardExceptionTo$0(CompletableFutureUtils.java:79) [utils-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) [?:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.core.internal.http.pipeline.stages.MakeAsyncHttpRequestStage.lambda$null$0(MakeAsyncHttpRequestStage.java:103) [sdk-core-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) [?:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.core.internal.http.pipeline.stages.MakeAsyncHttpRequestStage.completeResponseFuture(MakeAsyncHttpRequestStage.java:240) [sdk-core-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at software.amazon.awssdk.core.internal.http.pipeline.stages.MakeAsyncHttpRequestStage.lambda$executeHttpRequest$3(MakeAsyncHttpRequestStage.java:163) [sdk-core-2.20.86.jar:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482) [?:?]
| 2025-03-07T15:29:13.459Z | at org.opensearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:946) [opensearch-2.18.0.jar:2.18.0]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) [?:?]
| 2025-03-07T15:29:13.459Z | at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
Related component
Storage:Snapshots
To Reproduce
- Deploy Opensearch cluster with remote-backed storage configured
- Try to restore any snapshot into it
- See how it stuck in FINALIZED phase and never finish
- See
java.lang.WrongThreadException: Attempted access outside owning threadin Opensearch logs
Expected behavior
Snapshot being successfully restored to the cluster.
Additional Details
Plugins
ec2-discovery
s3-repository
Screenshots
If applicable, add screenshots to help explain your problem.
Host/Environment (please complete the following information):
- OS: public.ecr.aws/opensearchproject/opensearch
- Version 2.18.0, 2.19.0, 2.19.1
Additional context
I also see IncompleteBody: The request body terminated unexpectedly in cloudtrail for s3:PutObject operations.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Review the snapshot restore flow and the RemoteStoreRefreshListener named in the stack trace; inspect how asynchronous S3 PutObject failures are handled. Reproduce the issue with remote-backed storage and a snapshot restore, then verify restoration no longer remains in FINALIZED and the reported WrongThreadException and IncompleteBody errors are absent.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws, java
- Domain
- cloud, distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100