diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp b/be/src/olap/rowset/beta_rowset_writer.cpp index fd09f8b0a7e830..101571f0256831 100644 --- a/be/src/olap/rowset/beta_rowset_writer.cpp +++ b/be/src/olap/rowset/beta_rowset_writer.cpp @@ -781,9 +781,9 @@ Status BaseBetaRowsetWriter::_check_segment_number_limit() { if (UNLIKELY(total_segment_num > config::max_segment_num_per_rowset)) { return Status::Error( "too many segments in rowset. tablet_id:{}, rowset_id:{}, max:{}, " - "_num_segment:{}, ", + "_num_segment:{}, rowset_num_rows:{}", _context.tablet_id, _context.rowset_id.to_string(), - config::max_segment_num_per_rowset, _num_segment); + config::max_segment_num_per_rowset, _num_segment, get_rowset_num_rows()); } return Status::OK(); } @@ -795,10 +795,10 @@ Status BetaRowsetWriter::_check_segment_number_limit() { if (UNLIKELY(total_segment_num > config::max_segment_num_per_rowset)) { return Status::Error( "too many segments in rowset. tablet_id:{}, rowset_id:{}, max:{}, _num_segment:{}, " - "_segcompacted_point:{}, _num_segcompacted:{}", + "_segcompacted_point:{}, _num_segcompacted:{}, rowset_num_rows:{}", _context.tablet_id, _context.rowset_id.to_string(), config::max_segment_num_per_rowset, _num_segment, _segcompacted_point, - _num_segcompacted); + _num_segcompacted, get_rowset_num_rows()); } return Status::OK(); } diff --git a/be/src/olap/rowset/beta_rowset_writer.h b/be/src/olap/rowset/beta_rowset_writer.h index f169ce055fb210..3e285c7e508fb7 100644 --- a/be/src/olap/rowset/beta_rowset_writer.h +++ b/be/src/olap/rowset/beta_rowset_writer.h @@ -147,10 +147,13 @@ class BaseBetaRowsetWriter : public RowsetWriter { virtual int64_t _num_seg() const; // build a tmp rowset for load segment to calc delete_bitmap for this segment Status _build_tmp(RowsetSharedPtr& rowset_ptr); + uint64_t get_rowset_num_rows() { + std::lock_guard l(_segid_statistics_map_mutex); + return std::accumulate(_segment_num_rows.begin(), _segment_num_rows.end(), uint64_t(0)); + } RowsetWriterContext _context; std::shared_ptr _rowset_meta; - std::atomic _num_segment; // number of consecutive flushed segments roaring::Roaring _segment_set; // bitmap set to record flushed segment id std::mutex _segment_set_mutex; // mutex for _segment_set