bobhan1 commented on code in PR #69071:
URL: https://github.com/apache/doris/pull/69071#discussion_r4535792976


##########
be/src/io/cache/async_cache_write_manager.h:
##########
@@ -59,22 +64,42 @@ struct CacheAdmissionContext {
     CacheContext to_cache_context(ReadStatistics* stats) const;
 };
 
-/// Reference-counted payload whose allocation is charged to the async-write 
memory tracker.
+/// Reference-counted payload of one cache block. A storage read owns an 
allocation charged to the
+/// async-write tracker; a peer read keeps the received IOBuf blocks, which 
bypass Doris Allocator,
+/// so their length is charged to the same tracker explicitly.
 class AsyncCacheWriteBuffer {
 public:
     ~AsyncCacheWriteBuffer();
 
-    char* data() { return _data; }
-    const char* data() const { return _data; }
+    /// Writable bytes of an allocated buffer; not valid for an IOBuf payload.
+    char* data() {
+        DCHECK(_iobuf == nullptr);

Review Comment:
   **[P1] Update the NO_WRITE inflight reader for IOBuf-backed buffers**
   
   `_try_read_from_inflight_buffers()` in `cached_remote_file_reader.cpp:1254` 
still calls `entry->buffer->data()` and passes the result to `memcpy`. This PR 
allows peer IOBufs to enter the shared inflight index, but `_data` remains 
`nullptr` for those buffers.
   
   For example, with async cache writes, peer reads, and the inflight index 
enabled, query A can enqueue a peer-backed block for persistence. Before that 
task finishes, query B with `file_cache_query_limit_bytes=0` can read a range 
fully covered by the same inflight entry. Its remote-only-on-miss path reaches 
the remaining `data()` call, triggering this DCHECK in debug builds or passing 
a null source pointer to `memcpy` in release builds and crashing the BE. An 
explicit `NO_WRITE` read can reach the same path.
   
   Please switch that consumer to `copy_to()` as well and add a test that reads 
a pending peer IOBuf through the NO_WRITE/remote-only-on-miss path.



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to