Skip to content

HDFS-17850. Reject append when new generation stamp equals or is less…#8334

Open
deepujain wants to merge 1 commit intoapache:trunkfrom
deepujain:HDFS-17850-append-reject-same-generation-stamp
Open

HDFS-17850. Reject append when new generation stamp equals or is less…#8334
deepujain wants to merge 1 commit intoapache:trunkfrom
deepujain:HDFS-17850-append-reject-same-generation-stamp

Conversation

@deepujain
Copy link
Contributor

Summary

When using a third-party HDFS client, if the client does not update the generation stamp (GS) correctly on append, the DataNode previously accepted newGS == currentGS, which can lead to corrupted replica state. This change requires the new generation stamp to be strictly greater than the replica's current generation stamp: append now rejects both newGS < currentGS (existing) and newGS == currentGS (new), so misbehaving clients cannot silently corrupt replica state.

Change

  • FsDatasetImpl.java: In append(ExtendedBlock b, long newGS, long expectedBlockLen), change the validity check from newGS < b.getGenerationStamp() to newGS <= b.getGenerationStamp(), so that equal generation stamps are also rejected with the same IOException message.
  • TestFsDatasetImpl.java: Add testAppendRejectsSameOrLowerGenerationStamp(): create a file, get the finalized block, then assert that append(block, block.getGenerationStamp(), blockLen) and append(block, block.getGenerationStamp() - 1, blockLen) throw IOException with "should be greater than the replica", and that append(block, block.getGenerationStamp() + 1, blockLen) succeeds (HDFS-17850).

JIRA

Fixes HDFS-17850

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 0m 34s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+0 🆗 codespell 0m 1s codespell was not available.
+0 🆗 detsecrets 0m 1s detect-secrets was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 1 new or modified test files.
_ trunk Compile Tests _
+1 💚 mvninstall 40m 20s trunk passed
+1 💚 compile 1m 45s trunk passed with JDK Ubuntu-21.0.10+7-Ubuntu-124.04
+1 💚 compile 1m 50s trunk passed with JDK Ubuntu-17.0.18+8-Ubuntu-124.04.1
+1 💚 checkstyle 1m 45s trunk passed
+1 💚 mvnsite 1m 58s trunk passed
+1 💚 javadoc 1m 31s trunk passed with JDK Ubuntu-21.0.10+7-Ubuntu-124.04
+1 💚 javadoc 1m 32s trunk passed with JDK Ubuntu-17.0.18+8-Ubuntu-124.04.1
+1 💚 spotbugs 4m 9s trunk passed
+1 💚 shadedclient 30m 46s branch has no errors when building and testing our client artifacts.
_ Patch Compile Tests _
+1 💚 mvninstall 1m 20s the patch passed
+1 💚 compile 1m 14s the patch passed with JDK Ubuntu-21.0.10+7-Ubuntu-124.04
+1 💚 javac 1m 14s the patch passed
+1 💚 compile 1m 17s the patch passed with JDK Ubuntu-17.0.18+8-Ubuntu-124.04.1
+1 💚 javac 1m 17s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
+1 💚 checkstyle 1m 17s the patch passed
+1 💚 mvnsite 1m 26s the patch passed
+1 💚 javadoc 0m 58s the patch passed with JDK Ubuntu-21.0.10+7-Ubuntu-124.04
+1 💚 javadoc 1m 2s the patch passed with JDK Ubuntu-17.0.18+8-Ubuntu-124.04.1
+1 💚 spotbugs 3m 52s the patch passed
+1 💚 shadedclient 30m 10s patch has no errors when building and testing our client artifacts.
_ Other Tests _
+1 💚 unit 217m 50s hadoop-hdfs in the patch passed.
+1 💚 asflicense 0m 45s The patch does not generate ASF License warnings.
345m 19s
Subsystem Report/Notes
Docker ClientAPI=1.54 ServerAPI=1.54 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-8334/1/artifact/out/Dockerfile
GITHUB PR #8334
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell detsecrets
uname Linux 312fb1560ce1 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / b40483d
Default Java Ubuntu-17.0.18+8-Ubuntu-124.04.1
Multi-JDK versions /usr/lib/jvm/java-21-openjdk-amd64:Ubuntu-21.0.10+7-Ubuntu-124.04 /usr/lib/jvm/java-17-openjdk-amd64:Ubuntu-17.0.18+8-Ubuntu-124.04.1
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-8334/1/testReport/
Max. process+thread count 3473 (vs. ulimit of 5500)
modules C: hadoop-hdfs-project/hadoop-hdfs U: hadoop-hdfs-project/hadoop-hdfs
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-8334/1/console
versions git=2.43.0 maven=3.9.11 spotbugs=4.9.7
Powered by Apache Yetus 0.14.1 https://yetus.apache.org

This message was automatically generated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants