HDDS-15150. Container scanner should not mark container as UNHEALTHY when FD exhausted#10214
Open
sarvekshayr wants to merge 1 commit into
Open
HDDS-15150. Container scanner should not mark container as UNHEALTHY when FD exhausted#10214sarvekshayr wants to merge 1 commit into
sarvekshayr wants to merge 1 commit into
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Prevents background container scanners from incorrectly marking containers as UNHEALTHY when scan failures are caused by file-descriptor exhaustion (“Too many open files”) rather than real corruption.
Changes:
- Added
ScanTransientIOUtilto detect transient “Too many open files” IO failures from scan results / exception chains. - Updated
ContainerScanHelperto skip marking containersUNHEALTHYwhen all scan errors are FD-exhaustion related. - Added unit tests covering the new transient-error classification and the “do not mark unhealthy” behavior for both data and metadata scanners.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ScanTransientIOUtil.java | New utility to classify scan failures as “Too many open files” via error inspection. |
| hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerScanHelper.java | Skips unhealthy marking when the scan result indicates only FD exhaustion. |
| hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestScanTransientIOUtil.java | New unit tests validating the transient IO detection logic. |
| hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestBackgroundContainerMetadataScanner.java | Test ensuring metadata scan “Too many open files” does not mark container unhealthy. |
| hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestBackgroundContainerDataScanner.java | Test ensuring data scan “Too many open files” does not mark container unhealthy. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+123
to
126
| if (ScanTransientIOUtil.scanErrorsAreOnlyTooManyOpenFiles(result)) { | ||
| return; | ||
| } | ||
| long containerID = containerData.getContainerID(); |
Comment on lines
+46
to
+54
| public static boolean isTooManyOpenFiles(Throwable throwable) { | ||
| for (Throwable cause = throwable; cause != null; cause = cause.getCause()) { | ||
| String message = cause.getMessage(); | ||
| if (message != null && containsTooManyOpenFiles(message)) { | ||
| return true; | ||
| } | ||
| } | ||
| return false; | ||
| } |
Comment on lines
+48
to
+50
| String message = cause.getMessage(); | ||
| if (message != null && containsTooManyOpenFiles(message)) { | ||
| return true; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes were proposed in this pull request?
Fixed a bug where background container scanners marked containers as
UNHEALTHYdue to resource issues rather than actual data corruption. Specifically, when the system encountered aFileNotFoundExceptionorFileSystemExceptioncaused by file-descriptor exhaustion ("Too many open files"), the scanners incorrectly flagged these as corruption events.The logic has been updated to explicitly catch these resource-related exceptions, ensuring that containers remain in their current state when the scanner cannot perform its check due to system limits.
ContainerMetadataScanner
ContainerDataScanner
What is the link to the Apache JIRA
HDDS-15150
How was this patch tested?
Added unit tests in
TestBackgroundContainerDataScannerandTestBackgroundContainerMetadataScanner.Verified that with fix, containers are not incorrectly marked as UNHEALTHY.