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 2023/04/27 07:42:56 UTC
[doris] 05/10: [Fix](inverted index) fix memory leak for inverted index (#19008)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-2.0-alpha
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 03e3a225277a75efe7570a89474f624522ce5979
Author: airborne12 <ai...@gmail.com>
AuthorDate: Thu Apr 27 11:53:55 2023 +0800
[Fix](inverted index) fix memory leak for inverted index (#19008)
forget to delete handler->_shared_lock
---
.../inverted_index_compound_directory.cpp | 1 +
.../rowset/segment_v2/inverted_index_writer.cpp | 39 ++++++++++++----------
2 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/be/src/olap/rowset/segment_v2/inverted_index_compound_directory.cpp b/be/src/olap/rowset/segment_v2/inverted_index_compound_directory.cpp
index c3b474dfe1..94c0f8c47a 100644
--- a/be/src/olap/rowset/segment_v2/inverted_index_compound_directory.cpp
+++ b/be/src/olap/rowset/segment_v2/inverted_index_compound_directory.cpp
@@ -262,6 +262,7 @@ bool DorisCompoundDirectory::FSIndexInput::open(const io::FileSystemSPtr& fs, co
error.set(CL_ERR_IO, "Could not open file");
}
}
+ delete h->_shared_lock;
_CLDECDELETE(h)
return false;
}
diff --git a/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp b/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp
index ae95408648..22512a7efe 100644
--- a/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp
@@ -321,32 +321,35 @@ public:
//TODO: get size of inverted index
return 0;
}
+ void write_null_bitmap(lucene::store::IndexOutput* null_bitmap_out,
+ lucene::store::Directory* dir) {
+ // write null_bitmap file
+ _null_bitmap.runOptimize();
+ size_t size = _null_bitmap.getSizeInBytes(false);
+ if (size > 0) {
+ null_bitmap_out = dir->createOutput(
+ InvertedIndexDescriptor::get_temporary_null_bitmap_file_name().c_str());
+ faststring buf;
+ buf.resize(size);
+ _null_bitmap.write(reinterpret_cast<char*>(buf.data()), false);
+ null_bitmap_out->writeBytes(reinterpret_cast<uint8_t*>(buf.data()), size);
+ FINALIZE_OUTPUT(null_bitmap_out)
+ }
+ }
Status finish() override {
- auto index_path = InvertedIndexDescriptor::get_temporary_index_path(
- _directory + "/" + _segment_file_name, _index_meta->index_id());
- lucene::store::Directory* dir =
- DorisCompoundDirectory::getDirectory(_fs, index_path.c_str(), true);
+ lucene::store::Directory* dir = nullptr;
lucene::store::IndexOutput* null_bitmap_out = nullptr;
lucene::store::IndexOutput* data_out = nullptr;
lucene::store::IndexOutput* index_out = nullptr;
lucene::store::IndexOutput* meta_out = nullptr;
try {
- // write null_bitmap file
- _null_bitmap.runOptimize();
- size_t size = _null_bitmap.getSizeInBytes(false);
- if (size > 0) {
- null_bitmap_out = dir->createOutput(
- InvertedIndexDescriptor::get_temporary_null_bitmap_file_name().c_str());
- faststring buf;
- buf.resize(size);
- _null_bitmap.write(reinterpret_cast<char*>(buf.data()), false);
- null_bitmap_out->writeBytes(reinterpret_cast<uint8_t*>(buf.data()), size);
- FINALIZE_OUTPUT(null_bitmap_out)
- }
-
// write bkd file
if constexpr (field_is_numeric_type(field_type)) {
+ auto index_path = InvertedIndexDescriptor::get_temporary_index_path(
+ _directory + "/" + _segment_file_name, _index_meta->index_id());
+ dir = DorisCompoundDirectory::getDirectory(_fs, index_path.c_str(), true);
+ write_null_bitmap(null_bitmap_out, dir);
_bkd_writer->max_doc_ = _rid;
_bkd_writer->docs_seen_ = _row_ids_seen_for_bkd;
data_out = dir->createOutput(
@@ -364,6 +367,8 @@ public:
FINALIZE_OUTPUT(index_out)
FINALIZE_OUTPUT(dir)
} else if constexpr (field_is_slice_type(field_type)) {
+ dir = _index_writer->getDirectory();
+ write_null_bitmap(null_bitmap_out, dir);
close();
}
} catch (CLuceneError& e) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org