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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8378ab5e41 [Fix](inverted index) fix memeory leak when inverted index 
writer do not finish correctly (#20028)
8378ab5e41 is described below

commit 8378ab5e41629a8aace28494b7dd24885d495fbb
Author: airborne12 <[email protected]>
AuthorDate: Mon May 29 12:18:14 2023 +0800

    [Fix](inverted index) fix memeory leak when inverted index writer do not 
finish correctly (#20028)
    
    * [Fix](inverted index) fix memeory leak when inverted index writer do not 
finish correctly
    
    * [Update](inverted index) use smart pointer to avoid memeory leak
    
    * [Chore](format) code format
    
    ---------
    
    Co-authored-by: airborne12 <[email protected]>
---
 .../rowset/segment_v2/inverted_index_writer.cpp    | 50 ++++++++--------------
 1 file changed, 17 insertions(+), 33 deletions(-)

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 e956de16dc..49e221212c 100644
--- a/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp
@@ -112,23 +112,6 @@ public:
                         _segment_file_name, _index_meta->index_id());
                 InvertedIndexSearcherCache::instance()->insert(_fs, 
_directory, index_file_name);
             }
-            _CLLDELETE(_index_writer)
-            _index_writer = nullptr;
-        }
-
-        if (_doc) {
-            _CLLDELETE(_doc)
-            _doc = nullptr;
-        }
-
-        if (_analyzer) {
-            _CLLDELETE(_analyzer)
-            _analyzer = nullptr;
-        }
-
-        if (_char_string_reader) {
-            _CLDELETE(_char_string_reader)
-            _char_string_reader = nullptr;
         }
     }
 
@@ -159,24 +142,25 @@ public:
             }
         }
 
-        _char_string_reader = _CLNEW lucene::util::SStringReader<char>;
-        _doc = _CLNEW lucene::document::Document();
+        _char_string_reader = 
std::make_unique<lucene::util::SStringReader<char>>();
+        _doc = std::make_unique<lucene::document::Document>();
         _dir.reset(DorisCompoundDirectory::getDirectory(_fs, 
index_path.c_str(), true));
 
         if (_parser_type == InvertedIndexParserType::PARSER_STANDARD) {
-            _analyzer = _CLNEW lucene::analysis::standard::StandardAnalyzer();
+            _analyzer = 
std::make_unique<lucene::analysis::standard::StandardAnalyzer>();
         } else if (_parser_type == InvertedIndexParserType::PARSER_ENGLISH) {
-            _analyzer = _CLNEW lucene::analysis::SimpleAnalyzer<char>();
+            _analyzer = 
std::make_unique<lucene::analysis::SimpleAnalyzer<char>>();
         } else if (_parser_type == InvertedIndexParserType::PARSER_CHINESE) {
             auto chinese_analyzer = _CLNEW 
lucene::analysis::LanguageBasedAnalyzer();
             chinese_analyzer->setLanguage(L"chinese");
             chinese_analyzer->initDict(config::inverted_index_dict_path);
-            _analyzer = chinese_analyzer;
+            _analyzer.reset(chinese_analyzer);
         } else {
             // ANALYSER_NOT_SET, ANALYSER_NONE use default SimpleAnalyzer
-            _analyzer = _CLNEW lucene::analysis::SimpleAnalyzer<TCHAR>();
+            _analyzer = 
std::make_unique<lucene::analysis::SimpleAnalyzer<TCHAR>>();
         }
-        _index_writer = _CLNEW lucene::index::IndexWriter(_dir.get(), 
_analyzer, create, true);
+        _index_writer = 
std::make_unique<lucene::index::IndexWriter>(_dir.get(), _analyzer.get(),
+                                                                     create, 
true);
         _index_writer->setMaxBufferedDocs(MAX_BUFFER_DOCS);
         
_index_writer->setRAMBufferSizeMB(config::inverted_index_ram_buffer_size);
         _index_writer->setMaxFieldLength(MAX_FIELD_LEN);
@@ -191,7 +175,7 @@ public:
         } else {
             field_config |= int(lucene::document::Field::INDEX_TOKENIZED);
         }
-        _field = _CLNEW lucene::document::Field(_field_name.c_str(), 
field_config);
+        _field = new lucene::document::Field(_field_name.c_str(), 
field_config);
         _doc->add(*_field);
         return Status::OK();
     }
@@ -208,7 +192,7 @@ public:
 
             for (int i = 0; i < count; ++i) {
                 new_fulltext_field(empty_value.c_str(), 0);
-                _index_writer->addDocument(_doc);
+                _index_writer->addDocument(_doc.get());
             }
         }
         return Status::OK();
@@ -229,7 +213,7 @@ public:
 
     void new_char_token_stream(const char* s, size_t len, 
lucene::document::Field* field) {
         _char_string_reader->init(s, len, false);
-        auto stream = _analyzer->reusableTokenStream(field->name(), 
_char_string_reader);
+        auto stream = _analyzer->reusableTokenStream(field->name(), 
_char_string_reader.get());
         field->setValue(stream);
     }
 
@@ -250,7 +234,7 @@ public:
             auto* v = (Slice*)values;
             for (int i = 0; i < count; ++i) {
                 new_fulltext_field(v->get_data(), v->get_size());
-                _index_writer->addDocument(_doc);
+                _index_writer->addDocument(_doc.get());
                 ++v;
                 _rid++;
             }
@@ -283,7 +267,7 @@ public:
                 auto value = join(strings, " ");
                 new_fulltext_field(value.c_str(), value.length());
                 _rid++;
-                _index_writer->addDocument(_doc);
+                _index_writer->addDocument(_doc.get());
                 values++;
             }
         } else if constexpr (field_is_numeric_type(field_type)) {
@@ -404,11 +388,11 @@ private:
     roaring::Roaring _null_bitmap;
     uint64_t _reverted_index_size;
 
-    lucene::document::Document* _doc {};
+    std::unique_ptr<lucene::document::Document> _doc {};
     lucene::document::Field* _field {};
-    lucene::index::IndexWriter* _index_writer {};
-    lucene::analysis::Analyzer* _analyzer {};
-    lucene::util::SStringReader<char>* _char_string_reader {};
+    std::unique_ptr<lucene::index::IndexWriter> _index_writer {};
+    std::unique_ptr<lucene::analysis::Analyzer> _analyzer {};
+    std::unique_ptr<lucene::util::SStringReader<char>> _char_string_reader {};
     std::shared_ptr<lucene::util::bkd::bkd_writer> _bkd_writer;
     std::string _segment_file_name;
     std::string _directory;


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

Reply via email to