apache / apache/pinot

AWS SDK java.nio.file.FileAlreadyExistsException During State Transition from OFFLINE -> ONLINE

Open
#10,273 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
6.1k
Forks
1.5k
Avg merge
1d 21h
Merged PRs (30d)
189

Description

Certain segments in our servers can't come online due to this exception:

```
Caused by: java.io.IOException: Failed to read response into file: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
Caused by: java.nio.file.FileAlreadyExistsException: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
2023/02/13 09:35:49.630 INFO [S3PinotFS] [HelixTaskExecutor-message_handle_thread_27] Copy s3://my-s3-bucket-pinot/controller/data/service_call_view/service_call_view__43__350__20230211T0514Z to local /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
2023/02/13 09:35:50.317 WARN [PinotFSSegmentFetcher] [HelixTaskExecutor-message_handle_thread_27] Caught exception while fetching segment from: s3://my-s3-bucket-pinot/controller/data/service_call_view/service_call_view__43__350__20230211T0514Z to: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
software.amazon.awssdk.core.exception.SdkClientException: Unable to unmarshall response (Failed to read response into file: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz). Response Code: 200, Response Text: OK
Caused by: software.amazon.awssdk.core.exception.NonRetryableException: Failed to read response into file: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
Caused by: java.io.IOException: Failed to read response into file: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
Caused by: java.nio.file.FileAlreadyExistsException: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
2023/02/13 09:35:51.300 INFO [S3PinotFS] [HelixTaskExecutor-message_handle_thread_27] Copy s3://my-s3-bucket-pinot/controller/data/service_call_view/service_call_view__43__350__20230211T0514Z to local /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
2023/02/13 09:35:52.058 WARN [PinotFSSegmentFetcher] [HelixTaskExecutor-message_handle_thread_27] Caught exception while fetching segment from: s3://my-s3-bucket-pinot/controller/data/service_call_view/service_call_view__43__350__20230211T0514Z to: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
software.amazon.awssdk.core.exception.SdkClientException: Unable to unmarshall response (Failed to read response into file: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz). Response Code: 200, Response Text: OK
Caused by: software.amazon.awssdk.core.exception.NonRetryableException: Failed to read response into file: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
Caused by: java.io.IOException: Failed to read response into file: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
Caused by: java.nio.file.FileAlreadyExistsException: /var/pinot/server/data/index/service_call_view_REALTIME/service_call_view__43__350__20230211T0514Z.tar.gz
2023/02/13 09:35:52.059 WARN [service_call_view_REALTIME-RealtimeTableDataManager] [HelixTaskExecutor-message_handle_thread_27] Failed to download segment service_call_view__43__350__20230211T0514Z from deep store:
2023/02/13 09:35:52.060 WARN [service_call_view_REALTIME-RealtimeTableDataManager] [HelixTaskExecutor-message_handle_thread_27] Download segment service_call_view__43__350__20230211T0514Z from deepstore uri s3://my-s3-bucket-pinot/controller/data/service_call_view/service_call_view__43__350__20230211T0514Z failed.
2023/02/13 09:35:52.060 ERROR [SegmentOnlineOfflineStateModelFactory$SegmentOnlineOfflineStateModel] [HelixTaskExecutor-message_handle_thread_27] Caught exception in state transition from OFFLINE -> ONLINE for resource: service_call_view_REALTIME, partition: service_call_view__43__350__20230211T0514Z
2023/02/13 09:35:52.061 ERROR [HelixStateTransitionHandler] [HelixTaskExecutor-message_handle_thread_27] Exception while executing a state transition task service_call_view__43__350__20230211T0514Z
2023/02/13 09:35:56.848 INFO [HelixTask] [HelixTaskExecutor-message_handle_thread_27] Message: 18143b00-938e-472e-b81e-1469b00a5d72 (parent: null) handling task for service_call_view_REALTIME:service_call_view__43__350__20230211T0514Z completed at: 1676280956848, results: false. FrameworkTime: 15 ms; HandlerTime: 8675 ms.
```

Due to this, the segment moves to `ERROR` state and rebalancing keeps failing. We can enable overwrites in this case?

Contributor guide

Open the contributing guide

Research direction

Start with the S3PinotFS and PinotFSSegmentFetcher paths shown in the logs, then trace the OFFLINE -> ONLINE transition in SegmentOnlineOfflineStateModelFactory. Determine why an existing local segment file causes the AWS SDK download to fail and whether overwrite behavior is safe. Done means the segment can recover without entering ERROR and rebalancing succeeds.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, java
Domain
databases, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.