fix split partition invalid argument
This commit is contained in:
parent
ce0877a2c1
commit
b06c76337f
@ -198,7 +198,8 @@ int FakeObTableScanRange::do_split_datum_range(int64_t split_start_val, int64_t
|
||||
}
|
||||
|
||||
if (OB_SUCC(ret)) {
|
||||
if (OB_FAIL(split_query_.get_tablet_split_range(*tablet_handle_.get_obj(), datum_utils_, split_info_, allocator_, datum_range_))) {
|
||||
bool is_empty_range = false;
|
||||
if (OB_FAIL(split_query_.get_tablet_split_range(*tablet_handle_.get_obj(), datum_utils_, split_info_, allocator_, datum_range_, is_empty_range))) {
|
||||
STORAGE_LOG(WARN, "fail to do split range", K(ret));
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,8 @@ int ObPartitionSplitQuery::get_tablet_split_range(
|
||||
const blocksstable::ObStorageDatumUtils &datum_utils,
|
||||
const storage::ObTabletSplitTscInfo &split_info,
|
||||
ObIAllocator &allocator,
|
||||
blocksstable::ObDatumRange &src_range)
|
||||
blocksstable::ObDatumRange &src_range,
|
||||
bool &is_empty_range)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int compare_ret = 0;
|
||||
@ -75,12 +76,12 @@ int ObPartitionSplitQuery::get_tablet_split_range(
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("fail to split range, invalid argument", K(ret), K(src_range), K(split_info));
|
||||
} else {
|
||||
is_empty_range = false;
|
||||
if (split_info.split_type_ == ObTabletSplitType::RANGE && split_info.partkey_is_rowkey_prefix_) {
|
||||
const ObDatumRowkey &split_start_key = split_info.start_partkey_;
|
||||
const ObDatumRowkey &split_end_key = split_info.end_partkey_;
|
||||
const ObDatumRowkey &src_start_key = src_range.get_start_key();
|
||||
const ObDatumRowkey &src_end_key = src_range.get_end_key();
|
||||
bool is_empty_range = false;
|
||||
// ObDatumRowkey
|
||||
if (OB_FAIL(split_start_key.compare(split_end_key, datum_utils, compare_ret))) {
|
||||
LOG_WARN("fail to split range, compare error.", K(ret), K(split_info));
|
||||
@ -222,6 +223,7 @@ int ObPartitionSplitQuery::get_tablet_split_ranges(
|
||||
tablet_handle_.get_obj()->get_rowkey_read_info().get_datum_utils();
|
||||
const ObColDescIArray &col_descs =
|
||||
tablet_handle_.get_obj()->get_rowkey_read_info().get_columns_desc();
|
||||
bool is_empty_range = false;
|
||||
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < ori_ranges.count(); i++) {
|
||||
tmp_range.reset();
|
||||
@ -229,8 +231,10 @@ int ObPartitionSplitQuery::get_tablet_split_ranges(
|
||||
LOG_WARN("Fail to deep copy src range", K(ret), K(ori_ranges.at(i)));
|
||||
} else if (OB_FAIL(datum_range.from_range(tmp_range, allocator))) {
|
||||
LOG_WARN("Failed to transfer store range", K(ret), K(tmp_range));
|
||||
} else if (OB_FAIL(get_tablet_split_range(*tablet_handle_.get_obj(), datum_utils, split_info_, allocator, datum_range))) {
|
||||
} else if (OB_FAIL(get_tablet_split_range(*tablet_handle_.get_obj(), datum_utils, split_info_, allocator, datum_range, is_empty_range))) {
|
||||
LOG_WARN("Fail to get tabelt split range", K(ret), K(split_info_));
|
||||
} else if (is_empty_range) {
|
||||
LOG_INFO("Range after split is empty", K(ori_ranges.at(i)));
|
||||
} else if (OB_FAIL(datum_range.to_store_range(col_descs, allocator, tmp_range))) {
|
||||
LOG_WARN("fail to transfer to store range", K(ret), K(datum_range));
|
||||
} else if (OB_FALSE_IT(tmp_range.set_table_id(ori_ranges.at(i).get_table_id()))) {
|
||||
@ -246,7 +250,8 @@ int ObPartitionSplitQuery::get_tablet_split_ranges(
|
||||
int ObPartitionSplitQuery::get_split_datum_range(
|
||||
const blocksstable::ObStorageDatumUtils *datum_utils,
|
||||
ObIAllocator &allocator,
|
||||
blocksstable::ObDatumRange &datum_range)
|
||||
blocksstable::ObDatumRange &datum_range,
|
||||
bool &is_empty_range)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (tablet_handle_.is_valid() && split_info_.is_valid()) {
|
||||
@ -254,7 +259,7 @@ int ObPartitionSplitQuery::get_split_datum_range(
|
||||
datum_utils = &tablet_handle_.get_obj()->get_rowkey_read_info().get_datum_utils();
|
||||
}
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (OB_FAIL(get_tablet_split_range(*tablet_handle_.get_obj(), *datum_utils, split_info_, allocator, datum_range))) {
|
||||
} else if (OB_FAIL(get_tablet_split_range(*tablet_handle_.get_obj(), *datum_utils, split_info_, allocator, datum_range, is_empty_range))) {
|
||||
STORAGE_LOG(WARN, "Failed to split range", K(ret), K(split_info_));
|
||||
}
|
||||
}
|
||||
@ -338,9 +343,6 @@ int ObPartitionSplitQuery::split_multi_ranges_if_need(
|
||||
} else if (OB_FAIL(get_tablet_split_ranges(src_ranges, new_ranges, allocator))) {
|
||||
LOG_INFO("get tablet split new ranges err, maybe no spilitng is happening",
|
||||
K(ret), K(src_ranges), K(new_ranges));
|
||||
} else if (new_ranges.count() != src_ranges.count()) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("fail to get tablet split range.", K(ret));
|
||||
} else {
|
||||
is_splited_range = true;
|
||||
}
|
||||
|
@ -58,7 +58,8 @@ public:
|
||||
const blocksstable::ObStorageDatumUtils &datum_utils,
|
||||
const storage::ObTabletSplitTscInfo &split_info,
|
||||
ObIAllocator &allocator,
|
||||
blocksstable::ObDatumRange &src_range);
|
||||
blocksstable::ObDatumRange &src_range,
|
||||
bool &is_empty_range);
|
||||
|
||||
int get_tablet_split_ranges(
|
||||
const common::ObIArray<common::ObStoreRange> &ori_ranges,
|
||||
@ -68,7 +69,8 @@ public:
|
||||
int get_split_datum_range(
|
||||
const blocksstable::ObStorageDatumUtils *datum_utils,
|
||||
ObIAllocator &allocator,
|
||||
blocksstable::ObDatumRange &datum_range);
|
||||
blocksstable::ObDatumRange &datum_range,
|
||||
bool &is_empty_range);
|
||||
|
||||
int get_tablet_split_info(
|
||||
const ObTabletID &tablet_id,
|
||||
|
@ -328,8 +328,10 @@ int ObTableScanRange::init_ranges(
|
||||
} else if (is_tablet_spliting && OB_FAIL(split_query.get_split_datum_range(
|
||||
datum_utils,
|
||||
*allocator_,
|
||||
datum_range))) {
|
||||
datum_range,
|
||||
is_false))) {
|
||||
STORAGE_LOG(WARN, "Failed to get split datum range", K(ret), K(tablet_id), K(ls_id));
|
||||
} else if (is_false) {
|
||||
} else if (OB_FAIL(ranges_.push_back(datum_range))) {
|
||||
STORAGE_LOG(WARN, "Failed to push back datum range", K(ret));
|
||||
}
|
||||
|
@ -1243,10 +1243,12 @@ int ObPartitionMultiRangeSpliter::get_multi_range_size(
|
||||
total_size = 0;
|
||||
int64_t estimate_size = 0, range_size = 0;
|
||||
|
||||
if (OB_UNLIKELY(0 == table_iter.count() || range_array.empty())) {
|
||||
if (OB_UNLIKELY(0 == table_iter.count())) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
STORAGE_LOG(WARN, "Invalid argument to get multi range size", K(ret), K(table_iter),
|
||||
K(range_array));
|
||||
} else if (0 == range_array.count()) {
|
||||
total_size = estimate_size;
|
||||
} else if (OB_FAIL(get_split_tables(table_iter, tables))) {
|
||||
STORAGE_LOG(WARN, "Failed to get all sstables", K(ret), K(table_iter));
|
||||
} else if (OB_FAIL(try_estimate_range_size(range_array, tables, estimate_size))) {
|
||||
@ -1542,10 +1544,12 @@ int ObPartitionMultiRangeSpliter::get_split_multi_ranges(
|
||||
int64_t fast_range_array_cnt = 0;
|
||||
multi_range_split_array.reset();
|
||||
|
||||
if (OB_UNLIKELY(0 == table_iter.count() || range_array.empty() || expected_task_count <= 0)) {
|
||||
if (OB_UNLIKELY(0 == table_iter.count() || expected_task_count <= 0)) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
STORAGE_LOG(WARN, "Invalid argument to get split multi ranges", K(ret), K(table_iter),
|
||||
K(range_array), K(expected_task_count));
|
||||
} else if (range_array.empty()) {
|
||||
// do nothing
|
||||
} else if (OB_UNLIKELY(expected_task_count == 1)) {
|
||||
STORAGE_LOG(DEBUG, "Unexpected only one split task", K(expected_task_count), K(range_array));
|
||||
fast_range_array_cnt = 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user