cherry-pick omitted fixs to open-source branch
This commit is contained in:
53
deps/oblib/src/common/ob_store_range.cpp
vendored
53
deps/oblib/src/common/ob_store_range.cpp
vendored
@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user