229 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			229 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) 2021 OceanBase
 | |
|  * OceanBase CE is licensed under Mulan PubL v2.
 | |
|  * You can use this software according to the terms and conditions of the Mulan PubL v2.
 | |
|  * You may obtain a copy of Mulan PubL v2 at:
 | |
|  *          http://license.coscl.org.cn/MulanPubL-2.0
 | |
|  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | |
|  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | |
|  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | |
|  * See the Mulan PubL v2 for more details.
 | |
|  */
 | |
| 
 | |
| #define USING_LOG_PREFIX STORAGE
 | |
| 
 | |
| #include "ob_sstable_struct.h"
 | |
| #include "share/ob_force_print_log.h"
 | |
| 
 | |
| using namespace oceanbase::common;
 | |
| using namespace oceanbase::storage;
 | |
| 
 | |
| ObMultiVersionSSTableMergeInfo::ObMultiVersionSSTableMergeInfo()
 | |
|     : delete_logic_row_count_(0),
 | |
|       update_logic_row_count_(0),
 | |
|       insert_logic_row_count_(0),
 | |
|       empty_delete_logic_row_count_(0)
 | |
| {}
 | |
| 
 | |
| void ObMultiVersionSSTableMergeInfo::reset()
 | |
| {
 | |
|   delete_logic_row_count_ = 0;
 | |
|   update_logic_row_count_ = 0;
 | |
|   insert_logic_row_count_ = 0;
 | |
|   empty_delete_logic_row_count_ = 0;
 | |
| }
 | |
| 
 | |
| int ObMultiVersionSSTableMergeInfo::add(const ObMultiVersionSSTableMergeInfo& info)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   delete_logic_row_count_ += info.delete_logic_row_count_;
 | |
|   update_logic_row_count_ += info.update_logic_row_count_;
 | |
|   insert_logic_row_count_ += info.insert_logic_row_count_;
 | |
|   empty_delete_logic_row_count_ += info.empty_delete_logic_row_count_;
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| ObSSTableMergeInfo::ObSSTableMergeInfo()
 | |
|     : table_id_(0),
 | |
|       partition_id_(0),
 | |
|       version_(0),
 | |
|       table_type_(0),
 | |
|       major_table_id_(0),
 | |
|       merge_start_time_(0),
 | |
|       merge_finish_time_(0),
 | |
|       merge_cost_time_(0),
 | |
|       estimate_cost_time_(0),
 | |
|       occupy_size_(0),
 | |
|       macro_block_count_(0),
 | |
|       use_old_macro_block_count_(0),
 | |
|       total_row_count_(0),
 | |
|       delete_row_count_(0),
 | |
|       insert_row_count_(0),
 | |
|       update_row_count_(0),
 | |
|       base_row_count_(0),
 | |
|       use_base_row_count_(0),
 | |
|       memtable_row_count_(0),
 | |
|       output_row_count_(0),
 | |
|       purged_row_count_(0),
 | |
|       merge_level_(MACRO_BLOCK_MERGE_LEVEL),
 | |
|       rewrite_macro_old_micro_block_count_(0),
 | |
|       rewrite_macro_total_micro_block_count_(0),
 | |
|       error_code_(0),
 | |
|       total_child_task_(0),
 | |
|       finish_child_task_(0),
 | |
|       is_complement_(false),
 | |
|       merge_type_(INVALID_MERGE_TYPE),
 | |
|       merge_status_(MERGE_STATUS_MAX),
 | |
|       step_merge_start_version_(0),
 | |
|       step_merge_end_version_(0),
 | |
|       snapshot_version_(0),
 | |
|       column_cnt_(0),
 | |
|       table_count_(0),
 | |
|       macro_bloomfilter_count_(0)
 | |
| {}
 | |
| 
 | |
| int ObSSTableMergeInfo::add(const ObSSTableMergeInfo& other)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   table_id_ = other.table_id_;
 | |
|   table_type_ = other.table_type_;
 | |
|   major_table_id_ = other.major_table_id_;
 | |
|   if (0 == merge_start_time_) {
 | |
|     merge_start_time_ = other.merge_start_time_;
 | |
|   } else if (merge_start_time_ > other.merge_start_time_) {
 | |
|     merge_start_time_ = other.merge_start_time_;
 | |
|   }
 | |
|   if (merge_finish_time_ < other.merge_finish_time_) {
 | |
|     merge_finish_time_ = other.merge_finish_time_;
 | |
|   }
 | |
|   merge_cost_time_ = merge_finish_time_ - merge_start_time_;
 | |
|   estimate_cost_time_ += other.estimate_cost_time_;
 | |
|   occupy_size_ += other.occupy_size_;
 | |
|   macro_block_count_ += other.macro_block_count_;
 | |
|   use_old_macro_block_count_ += other.use_old_macro_block_count_;
 | |
|   total_row_count_ += other.total_row_count_;
 | |
|   delete_row_count_ += other.delete_row_count_;
 | |
|   insert_row_count_ += other.insert_row_count_;
 | |
|   update_row_count_ += other.update_row_count_;
 | |
|   base_row_count_ += other.base_row_count_;
 | |
|   use_base_row_count_ += other.use_base_row_count_;
 | |
|   memtable_row_count_ += other.memtable_row_count_;
 | |
|   output_row_count_ += other.output_row_count_;
 | |
|   purged_row_count_ += other.purged_row_count_;
 | |
|   merge_level_ = other.merge_level_;
 | |
|   rewrite_macro_old_micro_block_count_ += other.rewrite_macro_old_micro_block_count_;
 | |
|   rewrite_macro_total_micro_block_count_ += other.rewrite_macro_total_micro_block_count_;
 | |
|   total_child_task_ = other.total_child_task_;
 | |
|   finish_child_task_ = other.finish_child_task_;
 | |
|   partition_id_ = other.partition_id_;
 | |
|   error_code_ = other.error_code_;
 | |
|   merge_type_ = other.merge_type_;
 | |
|   merge_status_ = other.merge_status_;
 | |
| 
 | |
|   if (other.version_.is_valid()) {
 | |
|     version_ = other.version_.version_;
 | |
|   }
 | |
|   step_merge_start_version_ = other.step_merge_start_version_;
 | |
|   step_merge_end_version_ = other.step_merge_end_version_;
 | |
|   snapshot_version_ = other.snapshot_version_;
 | |
|   table_count_ = other.table_count_;
 | |
|   macro_bloomfilter_count_ += other.macro_bloomfilter_count_;
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| void ObSSTableMergeInfo::reset()
 | |
| {
 | |
|   table_id_ = 0;
 | |
|   table_type_ = 0;
 | |
|   major_table_id_ = 0;
 | |
|   merge_start_time_ = 0;
 | |
|   merge_finish_time_ = 0;
 | |
|   merge_cost_time_ = 0;
 | |
|   estimate_cost_time_ = 0;
 | |
|   occupy_size_ = 0;
 | |
|   macro_block_count_ = 0;
 | |
|   use_old_macro_block_count_ = 0;
 | |
|   total_row_count_ = 0;
 | |
|   delete_row_count_ = 0;
 | |
|   insert_row_count_ = 0;
 | |
|   update_row_count_ = 0;
 | |
|   base_row_count_ = 0;
 | |
|   use_base_row_count_ = 0;
 | |
|   memtable_row_count_ = 0;
 | |
|   output_row_count_ = 0;
 | |
|   purged_row_count_ = 0;
 | |
|   merge_level_ = MACRO_BLOCK_MERGE_LEVEL;
 | |
|   rewrite_macro_old_micro_block_count_ = 0;
 | |
|   rewrite_macro_total_micro_block_count_ = 0;
 | |
|   total_child_task_ = 0;
 | |
|   finish_child_task_ = 0;
 | |
|   partition_id_ = 0;
 | |
|   error_code_ = 0;
 | |
|   is_complement_ = false;
 | |
|   merge_type_ = INVALID_MERGE_TYPE;
 | |
|   merge_status_ = MERGE_STATUS_MAX;
 | |
|   version_ = 0;
 | |
|   step_merge_start_version_ = 0;
 | |
|   step_merge_end_version_ = 0;
 | |
|   column_cnt_ = 0;
 | |
|   table_count_ = 0;
 | |
|   macro_bloomfilter_count_ = 0;
 | |
| }
 | |
| 
 | |
| void ObSSTableMergeInfo::dump_info(const char* msg)
 | |
| {
 | |
|   int64_t output_row_per_s = 0;
 | |
|   int64_t new_macro_KB_per_s = 0;
 | |
|   if (merge_cost_time_ != 0) {
 | |
|     output_row_per_s = (output_row_count_ * 1000 * 1000) / merge_cost_time_;
 | |
|     new_macro_KB_per_s = (macro_block_count_ - use_old_macro_block_count_) * 2 * 1024 * 1000 * 1000 / merge_cost_time_;
 | |
|   }
 | |
|   FLOG_INFO("dump merge info", K(msg), K(output_row_per_s), K(new_macro_KB_per_s), K(*this));
 | |
| }
 | |
| 
 | |
| ObMergeChecksumInfo::ObMergeChecksumInfo()
 | |
|     : column_checksums_(NULL), increment_column_checksums_(NULL), concurrent_cnt_(0), column_count_(0)
 | |
| {}
 | |
| 
 | |
| int ObCreateSSTableParam::assign(const ObCreateSSTableParam& other)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   if (OB_UNLIKELY(!other.is_valid())) {
 | |
|     ret = OB_INVALID_ARGUMENT;
 | |
|     STORAGE_LOG(WARN, "invalid arguments", KR(ret), K(other));
 | |
|   } else {
 | |
|     table_key_ = other.table_key_;
 | |
|     schema_version_ = other.schema_version_;
 | |
|     progressive_merge_start_version_ = other.progressive_merge_start_version_;
 | |
|     progressive_merge_end_version_ = other.progressive_merge_end_version_;
 | |
|     create_snapshot_version_ = other.create_snapshot_version_;
 | |
|     create_index_base_version_ = other.create_index_base_version_;
 | |
|     checksum_method_ = other.checksum_method_;
 | |
|     progressive_merge_round_ = other.progressive_merge_round_;
 | |
|     progressive_merge_step_ = other.progressive_merge_step_;
 | |
|     pg_key_ = other.pg_key_;
 | |
|     logical_data_version_ = other.logical_data_version_;
 | |
|     has_compact_row_ = other.has_compact_row_;
 | |
|     dump_memtable_timestamp_ = other.dump_memtable_timestamp_;
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| int ObCreateSSTableParamWithPartition::extract_from(
 | |
|     const ObCreateSSTableParamWithTable& param, ObCreatePartitionMeta& schema)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   if (OB_UNLIKELY(!param.is_valid())) {
 | |
|     ret = OB_INVALID_ARGUMENT;
 | |
|     STORAGE_LOG(WARN, "invalid arguments", KR(ret), K(param));
 | |
|   } else if (OB_FAIL(ObCreateSSTableParam::assign(param))) {
 | |
|     STORAGE_LOG(WARN, "failed to assign", KR(ret), K(param));
 | |
|   } else if (OB_FAIL(schema.extract_from(*param.schema_))) {
 | |
|     STORAGE_LOG(WARN, "failed to extract schema", KR(ret), K(param));
 | |
|   } else {
 | |
|     schema_ = &schema;
 | |
|     is_inited_ = true;
 | |
|   }
 | |
|   return ret;
 | |
| }
 | 
