You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/01/28 17:00:52 UTC

[incubator-doris] branch master updated: [Fix] fix memory leak in be unit test (#7857)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new fb6e22f  [Fix] fix memory leak in be unit test (#7857)
fb6e22f is described below

commit fb6e22f4ca97d5b945bf49a3c0a785bb9311db6d
Author: zhangstar333 <87...@users.noreply.github.com>
AuthorDate: Sat Jan 29 01:00:38 2022 +0800

    [Fix] fix memory leak in be unit test (#7857)
    
    1. fix be unit test memory leak
    2. ignore mindump test with ASAN test
---
 be/CMakeLists.txt                                  |  1 +
 be/src/util/sm3.cpp                                |  4 ++
 be/src/util/sm3.h                                  |  2 +-
 be/src/vec/functions/function.h                    |  4 ++
 .../segment_v2/column_reader_writer_test.cpp       | 73 ++++++++++++++--------
 be/test/runtime/CMakeLists.txt                     |  2 +-
 be/test/vec/aggregate_functions/agg_test.cpp       |  3 +
 be/test/vec/exprs/vexpr_test.cpp                   | 12 ++++
 be/test/vec/function/function_bitmap_test.cpp      | 21 +++++++
 run-be-ut.sh                                       |  2 +-
 10 files changed, 96 insertions(+), 28 deletions(-)

diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt
index cfe4a46..15f8466 100644
--- a/be/CMakeLists.txt
+++ b/be/CMakeLists.txt
@@ -826,6 +826,7 @@ if (${MAKE_TEST} STREQUAL "ON")
     add_subdirectory(${TEST_DIR}/udf)
     add_subdirectory(${TEST_DIR}/util)
     add_subdirectory(${TEST_DIR}/vec/core)
+    add_subdirectory(${TEST_DIR}/vec/exec)
     add_subdirectory(${TEST_DIR}/vec/exprs)
     add_subdirectory(${TEST_DIR}/vec/function)
     add_subdirectory(${TEST_DIR}/vec/runtime)
diff --git a/be/src/util/sm3.cpp b/be/src/util/sm3.cpp
index c2a6f8e..c124a99 100644
--- a/be/src/util/sm3.cpp
+++ b/be/src/util/sm3.cpp
@@ -27,6 +27,10 @@ SM3Digest::SM3Digest() {
     EVP_DigestInit_ex(_ctx, _md, NULL);
 }
 
+SM3Digest::~SM3Digest() {
+    EVP_MD_CTX_free(_ctx);
+}
+
 void SM3Digest::update(const void* data, size_t length) {
     EVP_DigestUpdate(_ctx, data, length);
 }
diff --git a/be/src/util/sm3.h b/be/src/util/sm3.h
index 9108410..d2e9398 100644
--- a/be/src/util/sm3.h
+++ b/be/src/util/sm3.h
@@ -28,7 +28,7 @@ namespace doris {
 class SM3Digest {
 public:
     SM3Digest();
-
+    ~SM3Digest();
     void update(const void* data, size_t length);
     void digest();
 
diff --git a/be/src/vec/functions/function.h b/be/src/vec/functions/function.h
index cf00c08..0ea494a0 100644
--- a/be/src/vec/functions/function.h
+++ b/be/src/vec/functions/function.h
@@ -491,6 +491,10 @@ public:
         return function->prepare(context, scope);
     }
 
+    Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
+        return function->close(context, scope);
+    }
+
     bool is_suitable_for_constant_folding() const override {
         return function->is_suitable_for_constant_folding();
     }
diff --git a/be/test/olap/rowset/segment_v2/column_reader_writer_test.cpp b/be/test/olap/rowset/segment_v2/column_reader_writer_test.cpp
index 10eaf63..7045708 100644
--- a/be/test/olap/rowset/segment_v2/column_reader_writer_test.cpp
+++ b/be/test/olap/rowset/segment_v2/column_reader_writer_test.cpp
@@ -126,31 +126,31 @@ void test_nullable_data(uint8_t* src_data, uint8_t* src_is_null, int num_rows,
     const TypeInfo* type_info = get_scalar_type_info(type);
     // read and check
     {
-        // read and check
-        ColumnReaderOptions reader_opts;
-        FilePathDesc path_desc;
-        path_desc.filepath = fname;
-        std::unique_ptr<ColumnReader> reader;
-        auto st = ColumnReader::create(reader_opts, meta, num_rows, path_desc, &reader);
-        ASSERT_TRUE(st.ok());
-
-        ColumnIterator* iter = nullptr;
-        st = reader->new_iterator(&iter);
-        ASSERT_TRUE(st.ok());
-        std::unique_ptr<fs::ReadableBlock> rblock;
-        fs::BlockManager* block_manager = fs::fs_util::block_manager(TStorageMedium::HDD);
-        block_manager->open_block(path_desc, &rblock);
-
-        ASSERT_TRUE(st.ok());
-        ColumnIteratorOptions iter_opts;
-        OlapReaderStatistics stats;
-        iter_opts.stats = &stats;
-        iter_opts.rblock = rblock.get();
-        iter_opts.mem_tracker = std::make_shared<MemTracker>();
-        st = iter->init(iter_opts);
-        ASSERT_TRUE(st.ok());
         // sequence read
         {
+            ColumnReaderOptions reader_opts;
+            FilePathDesc path_desc;
+            path_desc.filepath = fname;
+            std::unique_ptr<ColumnReader> reader;
+            auto st = ColumnReader::create(reader_opts, meta, num_rows, path_desc, &reader);
+            ASSERT_TRUE(st.ok());
+
+            ColumnIterator* iter = nullptr;
+            st = reader->new_iterator(&iter);
+            ASSERT_TRUE(st.ok());
+            std::unique_ptr<fs::ReadableBlock> rblock;
+            fs::BlockManager* block_manager = fs::fs_util::block_manager(TStorageMedium::HDD);
+            block_manager->open_block(path_desc, &rblock);
+
+            ASSERT_TRUE(st.ok());
+            ColumnIteratorOptions iter_opts;
+            OlapReaderStatistics stats;
+            iter_opts.stats = &stats;
+            iter_opts.rblock = rblock.get();
+            iter_opts.mem_tracker = std::make_shared<MemTracker>();
+            st = iter->init(iter_opts);
+            ASSERT_TRUE(st.ok());
+
             st = iter->seek_to_first();
             ASSERT_TRUE(st.ok()) << st.to_string();
 
@@ -185,9 +185,33 @@ void test_nullable_data(uint8_t* src_data, uint8_t* src_is_null, int num_rows,
                     break;
                 }
             }
+            delete iter;
         }
 
         {
+            ColumnReaderOptions reader_opts;
+            FilePathDesc path_desc;
+            path_desc.filepath = fname;
+            std::unique_ptr<ColumnReader> reader;
+            auto st = ColumnReader::create(reader_opts, meta, num_rows, path_desc, &reader);
+            ASSERT_TRUE(st.ok());
+
+            ColumnIterator* iter = nullptr;
+            st = reader->new_iterator(&iter);
+            ASSERT_TRUE(st.ok());
+            std::unique_ptr<fs::ReadableBlock> rblock;
+            fs::BlockManager* block_manager = fs::fs_util::block_manager(TStorageMedium::HDD);
+            block_manager->open_block(path_desc, &rblock);
+
+            ASSERT_TRUE(st.ok());
+            ColumnIteratorOptions iter_opts;
+            OlapReaderStatistics stats;
+            iter_opts.stats = &stats;
+            iter_opts.rblock = rblock.get();
+            iter_opts.mem_tracker = std::make_shared<MemTracker>();
+            st = iter->init(iter_opts);
+            ASSERT_TRUE(st.ok());
+
             auto tracker = std::make_shared<MemTracker>();
             MemPool pool(tracker.get());
             std::unique_ptr<ColumnVectorBatch> cvb;
@@ -219,9 +243,8 @@ void test_nullable_data(uint8_t* src_data, uint8_t* src_is_null, int num_rows,
                     idx++;
                 }
             }
+            delete iter;
         }
-
-        delete iter;
     }
 }
 
diff --git a/be/test/runtime/CMakeLists.txt b/be/test/runtime/CMakeLists.txt
index 4f54556..28eff33 100644
--- a/be/test/runtime/CMakeLists.txt
+++ b/be/test/runtime/CMakeLists.txt
@@ -63,4 +63,4 @@ ADD_BE_TEST(memory/chunk_allocator_test)
 ADD_BE_TEST(memory/system_allocator_test)
 ADD_BE_TEST(cache/partition_cache_test)
 ADD_BE_TEST(collection_value_test)
-ADD_BE_TEST(minidump_test)
+#ADD_BE_TEST(minidump_test)
diff --git a/be/test/vec/aggregate_functions/agg_test.cpp b/be/test/vec/aggregate_functions/agg_test.cpp
index 9bf9f8f..33e6c43 100644
--- a/be/test/vec/aggregate_functions/agg_test.cpp
+++ b/be/test/vec/aggregate_functions/agg_test.cpp
@@ -52,6 +52,9 @@ TEST(AggTest, basic_test) {
     }
     ASSERT_EQ(ans, *(int32_t*)place);
     agg_function->destroy(place);
+    if(place) {
+        free(place);
+    }
 }
 } // namespace doris::vectorized
 
diff --git a/be/test/vec/exprs/vexpr_test.cpp b/be/test/vec/exprs/vexpr_test.cpp
index d9a5e4d..c0d7bcc 100644
--- a/be/test/vec/exprs/vexpr_test.cpp
+++ b/be/test/vec/exprs/vexpr_test.cpp
@@ -79,6 +79,12 @@ TEST(TEST_VEXPR, ABSTEST) {
     auto block = row_batch.convert_to_vec_block();
     int ts = -1;
     context->execute(&block, &ts);
+
+    FunctionContext* fun_ct = context->fn_context(0);
+    context->close(&runtime_stat);
+    if(fun_ct) {
+        delete fun_ct;
+    }
 }
 
 TEST(TEST_VEXPR, ABSTEST2) {
@@ -124,6 +130,12 @@ TEST(TEST_VEXPR, ABSTEST2) {
     auto block = row_batch.convert_to_vec_block();
     int ts = -1;
     context->execute(&block, &ts);
+
+    FunctionContext* fun_ct = context->fn_context(0);
+    context->close(&runtime_stat);
+    if(fun_ct) {
+        delete fun_ct;
+    }
 }
 
 namespace doris {
diff --git a/be/test/vec/function/function_bitmap_test.cpp b/be/test/vec/function/function_bitmap_test.cpp
index 7a2c3c8..12d10c6 100644
--- a/be/test/vec/function/function_bitmap_test.cpp
+++ b/be/test/vec/function/function_bitmap_test.cpp
@@ -35,6 +35,9 @@ TEST(function_bitmap_test, function_bitmap_min_test) {
                         {{Null()}, Null()}};
 
     check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+    delete bitmap1;
+    delete bitmap2;
+    delete empty_bitmap;
 }
 TEST(function_bitmap_test, function_bitmap_max_test) {
     std::string func_name = "bitmap_max";
@@ -49,6 +52,9 @@ TEST(function_bitmap_test, function_bitmap_max_test) {
                         {{Null()}, Null()}};
 
     check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+    delete bitmap1;
+    delete bitmap2;
+    delete empty_bitmap;
 }
 
 TEST(function_bitmap_test, function_bitmap_to_string_test) {
@@ -64,6 +70,9 @@ TEST(function_bitmap_test, function_bitmap_to_string_test) {
                         {{Null()}, Null()}};
 
     check_function<DataTypeString, true>(func_name, input_types, data_set);
+    delete bitmap1;
+    delete bitmap2;
+    delete empty_bitmap;
 }
 
 TEST(function_bitmap_test, function_bitmap_and_count) {
@@ -77,6 +86,9 @@ TEST(function_bitmap_test, function_bitmap_and_count) {
                         {{bitmap1, bitmap2}, (int64_t)1}};
 
     check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+    delete bitmap1;
+    delete bitmap2;
+    delete empty_bitmap;
 }
 
 TEST(function_bitmap_test, function_bitmap_or_count) {
@@ -91,6 +103,10 @@ TEST(function_bitmap_test, function_bitmap_or_count) {
                         {{bitmap1, bitmap3}, (int64_t)3}};
 
     check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+    delete bitmap1;
+    delete bitmap2;
+    delete bitmap3;
+    delete empty_bitmap;
 }
 
 TEST(function_bitmap_test, function_bitmap_xor_count) {
@@ -106,6 +122,11 @@ TEST(function_bitmap_test, function_bitmap_xor_count) {
                         {{bitmap1, bitmap4}, (int64_t)2}};
 
     check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+    delete bitmap1;
+    delete bitmap2;
+    delete bitmap3;
+    delete bitmap4;
+    delete empty_bitmap;
 }
 } // namespace doris::vectorized
 
diff --git a/run-be-ut.sh b/run-be-ut.sh
index 4cd603f..66b4b67 100755
--- a/run-be-ut.sh
+++ b/run-be-ut.sh
@@ -127,7 +127,7 @@ else
 fi
 
 cd ${CMAKE_BUILD_DIR}
-${CMAKE_CMD} -DCMAKE_MAKE_PROGRAM="${BUILD_SYSTEM}" ../ -DWITH_MYSQL=OFF -DMAKE_TEST=ON -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
+${CMAKE_CMD} -G "${GENERATOR}" ../ -DWITH_MYSQL=OFF -DMAKE_TEST=ON -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
     -DGLIBC_COMPATIBILITY=${GLIBC_COMPATIBILITY} ${CMAKE_USE_CCACHE}
 ${BUILD_SYSTEM} -j ${PARALLEL} $RUN_FILE
 

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org