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

dataroaring 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 3b4cc06a62 [feature](move-memtable)[1/8] support creating segments 
externally in rowset writer (#23085)
3b4cc06a62 is described below

commit 3b4cc06a626060d71e41e827b78202d2b7cd173e
Author: Kaijie Chen <[email protected]>
AuthorDate: Mon Aug 21 21:02:34 2023 +0800

    [feature](move-memtable)[1/8] support creating segments externally in 
rowset writer (#23085)
---
 be/src/olap/rowset/beta_rowset_writer.cpp | 20 +++++++++++---------
 be/src/olap/rowset/beta_rowset_writer.h   | 11 ++---------
 be/src/olap/rowset/rowset_writer.h        | 15 ++++++++++++++-
 3 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp 
b/be/src/olap/rowset/beta_rowset_writer.cpp
index d3b0ee3d2f..e62e182b3d 100644
--- a/be/src/olap/rowset/beta_rowset_writer.cpp
+++ b/be/src/olap/rowset/beta_rowset_writer.cpp
@@ -446,8 +446,6 @@ Status BetaRowsetWriter::flush_memtable(vectorized::Block* 
block, int32_t segmen
         RETURN_IF_ERROR(
                 _segment_creator.flush_single_block(block, segment_id, 
flush_size, flush_schema));
     }
-    RETURN_IF_ERROR(_generate_delete_bitmap(segment_id));
-    RETURN_IF_ERROR(_segcompaction_if_necessary());
     return Status::OK();
 }
 
@@ -714,18 +712,18 @@ Status BetaRowsetWriter::_check_segment_number_limit() {
     return Status::OK();
 }
 
-Status BetaRowsetWriter::add_segment(uint32_t segid, SegmentStatistics& 
segstat) {
-    uint32_t segid_offset = segid - _segment_start_id;
+Status BetaRowsetWriter::add_segment(uint32_t segment_id, SegmentStatistics& 
segstat) {
+    uint32_t segid_offset = segment_id - _segment_start_id;
     {
         std::lock_guard<std::mutex> lock(_segid_statistics_map_mutex);
-        CHECK_EQ(_segid_statistics_map.find(segid) == 
_segid_statistics_map.end(), true);
-        _segid_statistics_map.emplace(segid, segstat);
-        if (segid >= _segment_num_rows.size()) {
-            _segment_num_rows.resize(segid + 1);
+        CHECK_EQ(_segid_statistics_map.find(segment_id) == 
_segid_statistics_map.end(), true);
+        _segid_statistics_map.emplace(segment_id, segstat);
+        if (segment_id >= _segment_num_rows.size()) {
+            _segment_num_rows.resize(segment_id + 1);
         }
         _segment_num_rows[segid_offset] = segstat.row_num;
     }
-    VLOG_DEBUG << "_segid_statistics_map add new record. segid:" << segid
+    VLOG_DEBUG << "_segid_statistics_map add new record. segment_id:" << 
segment_id
                << " row_num:" << segstat.row_num << " data_size:" << 
segstat.data_size
                << " index_size:" << segstat.index_size;
 
@@ -736,6 +734,10 @@ Status BetaRowsetWriter::add_segment(uint32_t segid, 
SegmentStatistics& segstat)
             _num_segment++;
         }
     }
+    if (_context.mow_context != nullptr) {
+        RETURN_IF_ERROR(_generate_delete_bitmap(segment_id));
+    }
+    RETURN_IF_ERROR(_segcompaction_if_necessary());
     return Status::OK();
 }
 
diff --git a/be/src/olap/rowset/beta_rowset_writer.h 
b/be/src/olap/rowset/beta_rowset_writer.h
index 3ab1e176e4..38cb6d24f9 100644
--- a/be/src/olap/rowset/beta_rowset_writer.h
+++ b/be/src/olap/rowset/beta_rowset_writer.h
@@ -62,13 +62,6 @@ namespace vectorized::schema_util {
 class LocalSchemaChangeRecorder;
 }
 
-struct SegmentStatistics {
-    int64_t row_num;
-    int64_t data_size;
-    int64_t index_size;
-    KeyBoundsPB key_bounds;
-};
-
 class BetaRowsetWriter : public RowsetWriter {
     friend class SegcompactionWorker;
 
@@ -86,9 +79,9 @@ public:
 
     Status add_rowset_for_linked_schema_change(RowsetSharedPtr rowset) 
override;
 
-    Status create_file_writer(uint32_t segment_id, io::FileWriterPtr& writer);
+    Status create_file_writer(uint32_t segment_id, io::FileWriterPtr& writer) 
override;
 
-    Status add_segment(uint32_t segid, SegmentStatistics& segstat);
+    Status add_segment(uint32_t segment_id, SegmentStatistics& segstat) 
override;
 
     Status flush() override;
 
diff --git a/be/src/olap/rowset/rowset_writer.h 
b/be/src/olap/rowset/rowset_writer.h
index 16287aa273..61cb20498a 100644
--- a/be/src/olap/rowset/rowset_writer.h
+++ b/be/src/olap/rowset/rowset_writer.h
@@ -33,7 +33,12 @@
 
 namespace doris {
 
-class MemTable;
+struct SegmentStatistics {
+    int64_t row_num;
+    int64_t data_size;
+    int64_t index_size;
+    KeyBoundsPB key_bounds;
+};
 
 class RowsetWriter {
 public:
@@ -58,6 +63,10 @@ public:
     // Precondition: the input `rowset` should have the same type of the 
rowset we're building
     virtual Status add_rowset_for_linked_schema_change(RowsetSharedPtr rowset) 
= 0;
 
+    virtual Status create_file_writer(uint32_t segment_id, io::FileWriterPtr& 
writer) {
+        return Status::NotSupported("RowsetWriter does not support 
create_file_writer");
+    }
+
     // explicit flush all buffered rows into segment file.
     // note that `add_row` could also trigger flush when certain conditions 
are met
     virtual Status flush() = 0;
@@ -81,6 +90,10 @@ public:
                 "RowsetWriter not support flush_single_block");
     }
 
+    virtual Status add_segment(uint32_t segment_id, SegmentStatistics& 
segstat) {
+        return Status::NotSupported("RowsetWriter does not support 
add_segment");
+    }
+
     // finish building and return pointer to the built rowset (guaranteed to 
be inited).
     // return nullptr when failed
     virtual RowsetSharedPtr build() = 0;


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

Reply via email to