fix osg bug and failed cases

This commit is contained in:
Larry955
2023-05-08 11:46:00 +00:00
committed by ob-robot
parent ed6d3c0d4a
commit a4f5e20706
5 changed files with 28 additions and 5 deletions

View File

@ -244,11 +244,13 @@ int ObOptOSGColumnStat::inner_merge_min(const ObDatum &datum, const ObObjMeta &m
min_val_.meta_ = meta;
min_val_.cmp_func_ = cmp_func;
}
LOG_TRACE("succeed to merge min datum", K(*min_val_.datum_), K(datum), K(meta));
} else if (min_val_.datum_->is_null()) {
inner_min_allocator_.reuse();
if (OB_FAIL(min_val_.datum_->deep_copy(datum, inner_min_allocator_))) {
LOG_WARN("failed to deep copy datum");
}
LOG_TRACE("succeed to merge min datum", K(*min_val_.datum_), K(datum), K(meta));
} else {
int cmp_ret = 0;
if (OB_FAIL(min_val_.cmp_func_(*min_val_.datum_, datum, cmp_ret))) {

View File

@ -97,7 +97,9 @@ public:
ObArenaAllocator inner_max_allocator_;
ObArenaAllocator inner_allocator_;
ObIAllocator &allocator_;
TO_STRING_KV(K_(col_stat));
TO_STRING_KV(K_(col_stat),
K_(min_val),
K_(max_val));
private:
int inner_merge_min(const ObDatum &datum, const ObObjMeta &meta, const ObDatumCmpFuncType cmp_func);
int inner_merge_max(const ObDatum &datum, const ObObjMeta &meta, const ObDatumCmpFuncType cmp_func);

View File

@ -543,6 +543,21 @@ public:
}
return ret;
}
int persistence_col_stats()
{
int ret = OB_SUCCESS;
for (int64_t i = 0; OB_SUCC(ret) && i < col_stat_array_.count(); ++i) {
if (OB_ISNULL(col_stat_array_.at(i))) {
ret = OB_ERR_UNEXPECTED;
OB_LOG(WARN, "get unexpected null");
} else if (OB_FAIL(col_stat_array_.at(i)->set_min_max_datum_to_obj())) {
OB_LOG(WARN, "failed to persistence min max");
}
}
return ret;
}
TO_STRING_KV(K_(col_stat_array), K_(table_stat_array));
public:
common::ObSEArray<ObOptTableStat *, 64> table_stat_array_;

View File

@ -170,8 +170,9 @@ int ObInsertLogPlan::generate_osg_share_info(OSGShareInfo *&info)
LOG_WARN("failed to allocate memory");
} else {
stmt = static_cast<const ObInsertStmt *>(get_stmt());
uint64_t table_id = stmt->get_insert_table_info().table_id_;
uint64_t ref_table_id = stmt->get_insert_table_info().ref_table_id_;
const ObInsertTableInfo& table_info = stmt->get_insert_table_info();
uint64_t table_id = table_info.table_id_;
uint64_t ref_table_id = table_info.ref_table_id_;
if (OB_FAIL(schema_guard->get_table_schema(table_id, ref_table_id, stmt, tab_schema))) {
LOG_WARN("fail to get table schema", K(ref_table_id), K(tab_schema), K(ret));
} else if (OB_ISNULL(tab_schema)) {
@ -179,12 +180,11 @@ int ObInsertLogPlan::generate_osg_share_info(OSGShareInfo *&info)
LOG_WARN("get unexpected null pointer", K(ret));
} else {
const ObColumnSchemaV2 *col_schema = NULL;
const ObInsertTableInfo& table_info = stmt->get_insert_table_info();
ObSEArray<uint64_t, 4> generated_column_ids;
info->table_id_ = ref_table_id;
if (tab_schema->is_partitioned_table()) {
info->part_level_ = tab_schema->get_part_level();
if (OB_FAIL(gen_calc_part_id_expr(table_id,
if (OB_FAIL(gen_calc_part_id_expr(table_info.loc_table_id_,
ref_table_id,
CALC_PARTITION_TABLET_ID,
info->calc_part_id_expr_))) {

View File

@ -298,6 +298,10 @@ int ObDirectLoadTabletMergeCtx::collect_sql_statistics(
LOG_WARN("failed to update dml stat local cache", K(ret));
}
}
// persistence col stat once a merge task finished
if (OB_SUCC(ret) && OB_FAIL(sql_statistics.persistence_col_stats())) {
LOG_WARN("failed to persistence col stats");
}
}
}
return ret;