forbid direct load for non-empty cotable&& fix 4103

This commit is contained in:
z404289981
2023-11-09 15:10:57 +00:00
committed by ob-robot
parent 71e89f4ebf
commit 62f271557e
5 changed files with 13 additions and 9 deletions

View File

@ -525,7 +525,7 @@ TEST_F(TestCOMerge, test_merge_default_row_store_with_empty_major)
int schema_rowkey_cnt = 2;
int64_t snapshot_version = 10;
int64_t snapshot_version = 7;
ObScnRange scn_range;
scn_range.start_scn_.set_min();
scn_range.end_scn_.convert_for_tx(10);
@ -740,7 +740,7 @@ TEST_F(TestCOMerge, test_column_store_merge_with_empty_co_table)
int schema_rowkey_cnt = 2;
int64_t snapshot_version = 10;
int64_t snapshot_version = 7;
ObScnRange scn_range;
scn_range.start_scn_.set_min();
scn_range.end_scn_.convert_for_tx(10);
@ -835,10 +835,10 @@ TEST_F(TestCOMerge, test_co_merge_with_twice_major)
int schema_rowkey_cnt = 2;
int64_t snapshot_version = 10;
int64_t snapshot_version = 7;
ObScnRange scn_range;
scn_range.start_scn_.set_min();
scn_range.end_scn_.convert_for_tx(10);
scn_range.end_scn_.convert_for_tx(7);
//prepare table schema
prepare_table_schema(micro_data, schema_rowkey_cnt, scn_range, snapshot_version);
ObArray<ObColDesc> col_ids;
@ -862,7 +862,7 @@ TEST_F(TestCOMerge, test_co_merge_with_twice_major)
STORAGE_LOG(INFO, "finish prepare sstable1");
ObVersionRange trans_version_range;
trans_version_range.snapshot_version_ = 100;
trans_version_range.snapshot_version_ = 9;
trans_version_range.multi_version_start_ = 7;
trans_version_range.base_version_ = 7;

View File

@ -210,7 +210,7 @@ int ObPartitionMergeIter::init_query_base_params(const ObMergeParameter &merge_p
false); /*query_stat*/
query_flag.multi_version_minor_merge_ = is_multi_version_merge(static_param.get_merge_type());
if (OB_FAIL(access_context_.init(query_flag, store_ctx_, allocator_, allocator_,
static_param.version_range_))) {
merge_param.merge_version_range_))) {
LOG_WARN("Failed to init table access context", K(ret), K(query_flag));
} else {
access_context_.trans_state_mgr_ = merge_param.trans_state_mgr_;

View File

@ -149,7 +149,7 @@ int ObPartitionMergePolicy::get_medium_merge_tables(
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null base table", K(ret), K(tablet));
} else {
result.version_range_.base_version_ = base_table->get_upper_trans_version();
result.version_range_.base_version_ = 0;
result.version_range_.multi_version_start_ = tablet.get_multi_version_start();
result.version_range_.snapshot_version_ = param.merge_version_;
if (OB_FAIL(get_multi_version_start(param.merge_type_, ls, tablet, result.version_range_, result.snapshot_info_))) {

View File

@ -177,7 +177,7 @@ int ObMergeParameter::init(
if (is_major_merge_type(merge_type)) {
// major merge should only read data between two major freeze points
// but there will be some minor sstables which across major freeze points
merge_version_range_.base_version_ = MAX(merge_ctx.get_read_base_version(), static_param_.version_range_.base_version_);
merge_version_range_.base_version_ = merge_ctx.get_read_base_version();
} else if (is_meta_major_merge(merge_type)) {
// meta major merge does not keep multi-version
merge_version_range_.multi_version_start_ = static_param_.version_range_.snapshot_version_;

View File

@ -213,9 +213,13 @@ int ObDirectLoadOriginTableScanner::init(ObDirectLoadOriginTable *origin_table,
ret = OB_INVALID_ARGUMENT;
LOG_WARN("Invalid argument", KR(ret), KPC(origin_table), K(query_range));
} else {
blocksstable::ObSSTable *major_sstable = origin_table->get_major_sstable();
origin_table_ = origin_table;
allocator_.set_tenant_id(MTL_ID());
if (OB_FAIL((init_table_access_param()))) {
if (major_sstable != nullptr && major_sstable->is_co_sstable() && !major_sstable->is_empty()) {
ret = OB_NOT_SUPPORTED;
LOG_WARN("not supported scan co sstable", K(ret), KPC(major_sstable));
} else if (OB_FAIL((init_table_access_param()))) {
LOG_WARN("fail to init query range", KR(ret));
} else if (OB_FAIL(init_table_access_ctx())) {
LOG_WARN("fail to init table access param", KR(ret));