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