Copilot commented on code in PR #7835:
URL: https://github.com/apache/hadoop/pull/7835#discussion_r2244433207


##########
hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/services/TestAbfsInputStream.java:
##########
@@ -477,11 +494,14 @@ public void testSuccessfulReadAhead() throws Exception {
     AbfsInputStream inputStream = getAbfsInputStream(client, 
"testSuccessfulReadAhead.txt");
     int beforeReadCompletedListSize = 
getBufferManager().getCompletedReadListSize();
 
-    // First read request that triggers readAheads.
+    // First read request always bypasses readahead. This will succeed
     inputStream.read(new byte[ONE_KB]);
 
-    // Only the 3 readAhead threads should have triggered client.read
-    verifyReadCallCount(client, 3);
+    // This will start triggering readahead requests.
+    inputStream.read((new byte[1024]));

Review Comment:
   Inconsistent array size usage. The code uses `new byte[1024]` here while 
using `new byte[ONE_KB]` elsewhere in the same file. Using the constant 
`ONE_KB` would be more consistent and maintainable.
   ```suggestion
       inputStream.read((new byte[ONE_KB]));
   ```



##########
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/services/AbfsInputStream.java:
##########
@@ -348,14 +348,20 @@ private int readOneBlock(final byte[] b, final int off, 
final int len) throws IO
       if (alwaysReadBufferSize) {
         bytesRead = readInternal(fCursor, buffer, 0, bufferSize, false);
       } else {
-        // Enable readAhead when reading sequentially
-        if (-1 == fCursorAfterLastRead || fCursorAfterLastRead == fCursor || 
b.length >= bufferSize) {
-          LOG.debug("Sequential read with read ahead size of {}", bufferSize);
+        // Switch between enabling and disabling read ahead based on the 
workload read pattern.
+        // First Read on input stream should always bypass read ahead.
+        if (firstRead) {

Review Comment:
   The `firstRead` variable is referenced but not defined or updated in this 
diff. The code checks this variable but there's no logic shown to set it to 
false after the first read, which could cause all reads to bypass read-ahead 
indefinitely.



##########
hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/services/TestAbfsInputStream.java:
##########
@@ -119,14 +119,14 @@ private AbfsInputStream getAbfsInputStream(AbfsClient 
mockAbfsClient,
       String fileName) throws IOException {
     AbfsInputStreamContext inputStreamContext = new AbfsInputStreamContext(-1);
     // Create AbfsInputStream with the client instance
-    AbfsInputStream inputStream = new AbfsInputStream(
+    AbfsInputStream inputStream = Mockito.spy(new AbfsInputStream(
         mockAbfsClient,
         null,
         FORWARD_SLASH + fileName,
-        THREE_KB,
+        THREE_KB + ONE_KB, // First read will always bypass readahead

Review Comment:
   The comment suggests this change is related to first read bypassing 
readahead, but increasing the file size by ONE_KB doesn't clearly relate to the 
first read behavior. This change appears to be adjusting test data size rather 
than directly testing the first read bypass feature.
   ```suggestion
           ONE_KB, // Set file size to match the read buffer size to ensure the 
first read bypasses readahead
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to