diff --git a/src/share/parameter/ob_parameter_seed.ipp b/src/share/parameter/ob_parameter_seed.ipp index b12d004ff2cdd81b9d0c31fd85dd2dc78a542984..0e7478ebfd83fae376149aca81cc7acfc0500c8c 100644 --- a/src/share/parameter/ob_parameter_seed.ipp +++ b/src/share/parameter/ob_parameter_seed.ipp @@ -950,6 +950,10 @@ DEF_INT(minor_freeze_times, OB_CLUSTER_PARAMETER, "100", "[0, 65535]", ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); DEF_INT(minor_compact_trigger, OB_CLUSTER_PARAMETER, "2", "[0,16]", "minor_compact_trigger, Range: [0,16] in integer", ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); +DEF_BOOL(_enable_compaction_diagnose, OB_CLUSTER_PARAMETER, "False", + "enable compaction diagnose function" + "Value: True:turned on; False: turned off", + ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); DEF_CAP(_private_buffer_size, OB_CLUSTER_PARAMETER, "2M", "[0B,)" "the trigger remaining data size within transaction for immediate logging, 0B represents not trigger immediate " diff --git a/src/storage/compaction/ob_partition_merge_util.cpp b/src/storage/compaction/ob_partition_merge_util.cpp index ece42f85bbd9ffaab1aa383706fb4209687769d1..4515cc7194f1fab3543343232bfbb31cbc6f3464 100644 --- a/src/storage/compaction/ob_partition_merge_util.cpp +++ b/src/storage/compaction/ob_partition_merge_util.cpp @@ -1726,7 +1726,9 @@ int ObPartitionMergeUtil::merge_partition(memtable::ObIMemtableCtxFactory* memct K(ret), K(partition_fuser->get_compact_type()), K(*partition_fuser->get_result_row())); - ObTableDumper::print_error_info(ret, ctx, macro_row_iters); + if (GCONF._enable_compaction_diagnose) { + ObTableDumper::print_error_info(ret, ctx, macro_row_iters); + } } else if (OB_FAIL(partition_fuser->calc_column_checksum(false))) { LOG_WARN("Failed to calculate column checksum", K(ret)); } diff --git a/src/storage/ob_partition_storage.cpp b/src/storage/ob_partition_storage.cpp index 174f33ed1b2122070d73a956ce6844113f7ed3cb..2b1b2c64d6eb3a02aa77780cd740e6510ede74ca 100644 --- a/src/storage/ob_partition_storage.cpp +++ b/src/storage/ob_partition_storage.cpp @@ -7691,7 +7691,7 @@ int ObPartitionStorage::validate_sstables( } else if (OB_FAIL(validate_sstable(row_count, index_table, column_checksum_map))) { if (OB_ERR_PRIMARY_KEY_DUPLICATE == ret) { handle_error_index_table(*index_table, index_stats, ret); - if (OB_ERR_PRIMARY_KEY_DUPLICATE == ret) { + if (OB_ERR_PRIMARY_KEY_DUPLICATE == ret && GCONF._enable_compaction_diagnose) { dump_error_info(*main_sstable, *index_table); } } else { diff --git a/src/storage/ob_sstable_dump_error_info.cpp b/src/storage/ob_sstable_dump_error_info.cpp index 0429e63788f9054b30d6162b4e7ee67599cc28c7..edf1220d93c7d8b092e978fc99f0ecc35927bc4c 100644 --- a/src/storage/ob_sstable_dump_error_info.cpp +++ b/src/storage/ob_sstable_dump_error_info.cpp @@ -228,8 +228,18 @@ int ObSSTableDumpErrorInfo::find_extra_row( STORAGE_LOG(WARN, "failed to check row", K(ret)); } ++iter_row_cnt; + if (nullptr != getter) { + allocator_.free(getter); + getter = nullptr; + } } // end of while } + + if (nullptr != scanner) { + allocator_.free(scanner); + scanner = nullptr; + } + if (OB_SUCC(ret)) { if (found_row_cnt + sstable2.get_meta().row_count_ != sstable1.get_meta().row_count_) { ret = OB_ERR_UNEXPECTED;