cherry-pick omitted fixs to open-source branch

This commit is contained in:
obdev
2021-07-19 23:12:15 +08:00
committed by wangzelin.wzl
parent c949c5e01f
commit ae0ace666f
51 changed files with 141004 additions and 141679 deletions

View File

@ -404,9 +404,12 @@ void ObExtStoreRange::set_range_array_idx(const int64_t range_array_idx)
}
// for multi version get, the rowkey would be converted into a range (with trans version),
// e.g. rowkey1 -> [(rowkey1, -read_snapshot), (rowkey1, MIN_VERSION))
int ObVersionStoreRangeConversionHelper::store_rowkey_to_multi_version_range(const ObExtStoreRowkey& src_rowkey,
const ObVersionRange& version_range, ObIAllocator& allocator, ObExtStoreRange& multi_version_range)
// e.g. rowkey1 -> [(rowkey1, -read_snapshot), (rowkey1, MAX_VERSION)]
int ObVersionStoreRangeConversionHelper::store_rowkey_to_multi_version_range(
const ObExtStoreRowkey &src_rowkey,
const ObVersionRange &version_range,
ObIAllocator &allocator,
ObExtStoreRange &multi_version_range)
{
int ret = OB_SUCCESS;
// FIXME: hard coding
@ -420,24 +423,28 @@ int ObVersionStoreRangeConversionHelper::store_rowkey_to_multi_version_range(con
multi_version_range.get_range().get_start_key()))) {
COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_rowkey), K(version_range));
} else if (OB_FAIL(build_multi_version_store_rowkey(src_rowkey.get_store_rowkey(),
ObVersionRange::MIN_VERSION,
allocator,
multi_version_range.get_range().get_end_key()))) {
COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_rowkey), K(version_range));
ObVersionRange::MAX_VERSION,
allocator,
multi_version_range.get_range().get_end_key()))) {
COMMON_LOG(WARN, "build multi version store rowkey failed",
K(ret), K(src_rowkey), K(version_range));
} else if (OB_FAIL(multi_version_range.to_collation_free_range_on_demand_and_cutoff_range(allocator))) {
COMMON_LOG(WARN, "fail to get colllation free rowkey and range cutoff", K(ret));
} else {
multi_version_range.get_range().set_left_closed();
multi_version_range.get_range().set_right_open();
multi_version_range.get_range().set_right_closed();
}
return ret;
}
// for multi version scan, the range would be converted into a range (with trans version),
// e.g. case 1 : (rowkey1, rowkey2) -> ((rowkey1, MIN_VERSION), (rowkey2, -MAX_VERSION))
// case 2 : [rowkey1, rowkey2] -> [(rowkey1, -read_snapshot), (rowkey2, MIN_VERSION))
int ObVersionStoreRangeConversionHelper::range_to_multi_version_range(const ObExtStoreRange& src_range,
const ObVersionRange& version_range, ObIAllocator& allocator, ObExtStoreRange& multi_version_range)
// e.g. case 1 : (rowkey1, rowkey2) -> ((rowkey1, MAX_VERSION), (rowkey2, -MAX_VERSION))
// case 2 : [rowkey1, rowkey2] -> [(rowkey1, -MAX_VERSION), (rowkey2, MAX_VERSION)]
int ObVersionStoreRangeConversionHelper::range_to_multi_version_range(
const ObExtStoreRange &src_range,
const ObVersionRange &version_range,
ObIAllocator &allocator,
ObExtStoreRange &multi_version_range)
{
int ret = OB_SUCCESS;
const bool include_start = src_range.get_range().get_border_flag().inclusive_start();
@ -448,15 +455,15 @@ int ObVersionStoreRangeConversionHelper::range_to_multi_version_range(const ObEx
ret = OB_INVALID_ARGUMENT;
COMMON_LOG(WARN, "version_range is not valid", K(ret), K(version_range));
} else if (OB_FAIL(build_multi_version_store_rowkey(src_range.get_range().get_start_key(),
include_start ? -INT64_MAX : ObVersionRange::MIN_VERSION,
allocator,
multi_version_range.get_range().get_start_key()))) {
COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_range), K(version_range));
include_start ? -INT64_MAX : ObVersionRange::MAX_VERSION,
allocator, multi_version_range.get_range().get_start_key()))) {
COMMON_LOG(WARN, "build multi version store rowkey failed",
K(ret), K(src_range), K(version_range));
} else if (OB_FAIL(build_multi_version_store_rowkey(src_range.get_range().get_end_key(),
include_end ? ObVersionRange::MIN_VERSION : -ObVersionRange::MAX_VERSION,
allocator,
multi_version_range.get_range().get_end_key()))) {
COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_range), K(version_range));
include_end ? ObVersionRange::MAX_VERSION : - ObVersionRange::MAX_VERSION,
allocator, multi_version_range.get_range().get_end_key()))) {
COMMON_LOG(WARN, "build multi version store rowkey failed",
K(ret), K(src_range), K(version_range));
} else if (OB_FAIL(multi_version_range.to_collation_free_range_on_demand_and_cutoff_range(allocator))) {
COMMON_LOG(WARN, "fail to get collation free rowkey", K(ret));
} else {
@ -466,7 +473,11 @@ int ObVersionStoreRangeConversionHelper::range_to_multi_version_range(const ObEx
} else {
multi_version_range.get_range().set_left_open();
}
multi_version_range.get_range().set_right_open();
if (include_end) {
multi_version_range.get_range().set_right_closed();
} else {
multi_version_range.get_range().set_right_open();
}
}
return ret;
}