Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HDFS-16970. EC: client copy wrong buffer from decode output during pread #5526

Open
wants to merge 1 commit into
base: trunk
Choose a base branch
from

Conversation

luomh1998
Copy link

Description of PR

When dfsStripedInputStream do pread from a striped block group and read internal block timeout, so will read parity block for decode and fill original chunk buffer with decoded data.
Here try to fill original chunk buffer with decoded data, but get wrong data.
The reason is that
1.original chunk buffer already read some bytes before timeout from blockReader
2.chunkBytebuffer's slice always fill begin 0 position of decodeByteBuffer
slice bytebuffer will fill from wrong decodeByteBuffer position, so will get wrong data from pread.

@luomh1998 luomh1998 changed the title HDFS-16970. EC: client copy wrong buffer from decode ouput during pread HDFS-16970. EC: client copy wrong buffer from decode output during pread Apr 2, 2023
@hadoop-yetus
Copy link

💔 -1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 0m 36s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+0 🆗 codespell 0m 0s codespell was not available.
+0 🆗 detsecrets 0m 0s detect-secrets was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
-1 ❌ test4tests 0m 0s The patch doesn't appear to include any new or modified tests. Please justify why no new tests are needed for this patch. Also please list what manual steps were performed to verify this patch.
_ trunk Compile Tests _
+1 💚 mvninstall 39m 41s trunk passed
+1 💚 compile 1m 0s trunk passed with JDK Ubuntu-11.0.18+10-post-Ubuntu-0ubuntu120.04.1
+1 💚 compile 0m 56s trunk passed with JDK Private Build-1.8.0_362-8u362-ga-0ubuntu1~20.04.1-b09
+1 💚 checkstyle 0m 35s trunk passed
+1 💚 mvnsite 1m 2s trunk passed
+1 💚 javadoc 0m 52s trunk passed with JDK Ubuntu-11.0.18+10-post-Ubuntu-0ubuntu120.04.1
+1 💚 javadoc 0m 41s trunk passed with JDK Private Build-1.8.0_362-8u362-ga-0ubuntu1~20.04.1-b09
+1 💚 spotbugs 2m 43s trunk passed
+1 💚 shadedclient 22m 0s branch has no errors when building and testing our client artifacts.
_ Patch Compile Tests _
+1 💚 mvninstall 0m 51s the patch passed
+1 💚 compile 0m 51s the patch passed with JDK Ubuntu-11.0.18+10-post-Ubuntu-0ubuntu120.04.1
+1 💚 javac 0m 51s the patch passed
+1 💚 compile 0m 48s the patch passed with JDK Private Build-1.8.0_362-8u362-ga-0ubuntu1~20.04.1-b09
+1 💚 javac 0m 48s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
+1 💚 checkstyle 0m 18s the patch passed
+1 💚 mvnsite 0m 50s the patch passed
+1 💚 javadoc 0m 34s the patch passed with JDK Ubuntu-11.0.18+10-post-Ubuntu-0ubuntu120.04.1
+1 💚 javadoc 0m 32s the patch passed with JDK Private Build-1.8.0_362-8u362-ga-0ubuntu1~20.04.1-b09
+1 💚 spotbugs 2m 31s the patch passed
+1 💚 shadedclient 21m 46s patch has no errors when building and testing our client artifacts.
_ Other Tests _
+1 💚 unit 2m 24s hadoop-hdfs-client in the patch passed.
+1 💚 asflicense 0m 37s The patch does not generate ASF License warnings.
101m 46s
Subsystem Report/Notes
Docker ClientAPI=1.42 ServerAPI=1.42 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-5526/1/artifact/out/Dockerfile
GITHUB PR #5526
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell detsecrets
uname Linux 42b1c5ba41c4 4.15.0-206-generic #217-Ubuntu SMP Fri Feb 3 19:10:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / c12bb0d
Default Java Private Build-1.8.0_362-8u362-ga-0ubuntu1~20.04.1-b09
Multi-JDK versions /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.18+10-post-Ubuntu-0ubuntu120.04.1 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_362-8u362-ga-0ubuntu1~20.04.1-b09
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-5526/1/testReport/
Max. process+thread count 560 (vs. ulimit of 5500)
modules C: hadoop-hdfs-project/hadoop-hdfs-client U: hadoop-hdfs-project/hadoop-hdfs-client
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-5526/1/console
versions git=2.25.1 maven=3.6.3 spotbugs=4.2.2
Powered by Apache Yetus 0.14.0 https://yetus.apache.org

This message was automatically generated.

@luomh1998
Copy link
Author

@tasanuma please review for this pr, it's a critical bug can cause wrong data when do preads.

@tasanuma
Copy link
Member

@luomh1998 Thanks for reporting the issue and submitting PR. I think the change is valid. Is it possible to add the unit test?

@bbeaudreault
Copy link
Contributor

Any update here @luomh1998 @tasanuma?

@luomh1998
Copy link
Author

Sorry, I will submit the related unit tests later. If you face the same problem, you can use this patch first. @bbeaudreault

@LoseYSelf
Copy link

the newest version StripeReader in readToBuffer method

will clear readbuffer in readToBuffer ,so will not read the data before timeout

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
5 participants