This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
     new 9be207e7c8 [branch-1.2](memory) page io check sys memory limit (#19670)
9be207e7c8 is described below

commit 9be207e7c8c6165b77b2e7c3d4b01d6f3dbb99f4
Author: Xinyi Zou <[email protected]>
AuthorDate: Sun May 21 09:36:43 2023 +0800

    [branch-1.2](memory) page io check sys memory limit (#19670)
---
 be/src/olap/rowset/segment_v2/page_io.cpp | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/be/src/olap/rowset/segment_v2/page_io.cpp 
b/be/src/olap/rowset/segment_v2/page_io.cpp
index 697775dcdd..e44bdcd0df 100644
--- a/be/src/olap/rowset/segment_v2/page_io.cpp
+++ b/be/src/olap/rowset/segment_v2/page_io.cpp
@@ -131,6 +131,11 @@ Status PageIO::read_and_decompress_page(const 
PageReadOptions& opts, PageHandle*
         return Status::Corruption("Bad page: too small size ({})", page_size);
     }
 
+    if (doris::MemTrackerLimiter::sys_mem_exceed_limit_check(page_size)) {
+        return Status::MemoryLimitExceeded(
+                fmt::format("Bad page: sys memory check failed, try alloc: 
{}", page_size));
+    }
+
     // hold compressed page at first, reset to decompressed page later
     std::unique_ptr<char[]> page(new char[page_size]);
     Slice page_slice(page.get(), page_size);
@@ -166,8 +171,12 @@ Status PageIO::read_and_decompress_page(const 
PageReadOptions& opts, PageHandle*
             return Status::Corruption("Bad page: page is compressed but codec 
is NO_COMPRESSION");
         }
         SCOPED_RAW_TIMER(&opts.stats->decompress_ns);
-        std::unique_ptr<char[]> decompressed_page(
-                new char[footer->uncompressed_size() + footer_size + 4]);
+        auto uncompressed_size = footer->uncompressed_size() + footer_size + 4;
+        if 
(doris::MemTrackerLimiter::sys_mem_exceed_limit_check(uncompressed_size)) {
+            return Status::MemoryLimitExceeded(fmt::format(
+                    "Bad page: sys memory check failed, try alloc: {}", 
uncompressed_size));
+        }
+        std::unique_ptr<char[]> decompressed_page(new char[uncompressed_size]);
 
         // decompress page body
         Slice compressed_body(page_slice.data, body_size);


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

Reply via email to