[BUGFIX] fix read lob over 64K from 4.0

This commit is contained in:
obdev
2023-03-28 14:40:59 +00:00
committed by ob-robot
parent d8d5f00849
commit 6a2c35e367
4 changed files with 8 additions and 1 deletions

View File

@ -368,6 +368,7 @@ int ObLobLocatorV2::fill(ObMemLobType type,
const ObString &rowkey_str,
const ObLobCommon *disk_loc,
uint32_t disk_lob_full_size,
uint32_t disk_lob_header_size,
bool is_simple)
{
validate_has_lob_header(has_lob_header_);
@ -453,6 +454,8 @@ int ObLobLocatorV2::fill(ObMemLobType type,
if (disk_loc->is_init_) {
disk_loc_header_size += sizeof(ObLobData);
}
} else if (disk_lob_header_size != 0) {
disk_loc_header_size = disk_lob_header_size;
} else {
int64_t tbz = disk_loc->get_byte_size(disk_lob_full_size);
int64_t thz = disk_loc->get_handle_size(tbz);
@ -461,7 +464,7 @@ int ObLobLocatorV2::fill(ObMemLobType type,
if (offset + disk_loc_header_size > size_ || disk_lob_full_size < disk_loc_header_size) {
ret = OB_INVALID_ARGUMENT;
COMMON_LOG(WARN, "Lob: invalid disk locator",
K(ret), K(type), KP(offset), K(size_), K(flags), K(offset),
K(ret), K(type), K(offset), K(size_), K(flags), K(disk_lob_header_size),
K(disk_loc_header_size), K(disk_lob_full_size), K(*disk_loc));
} else {
offset += disk_loc_header_size;

View File

@ -929,6 +929,7 @@ public:
const ObString &rowkey_str,
const ObLobCommon *disk_loc,
uint32_t disk_lob_full_size,
uint32_t disk_lob_header_size,
bool is_simple);
int copy(const ObLobLocatorV2* src_locator) const;

View File

@ -1048,6 +1048,7 @@ int ObTextStringResult::fill_temp_lob_header(const int64_t res_len)
rowkey_str,
&lob_common,
static_cast<uint32_t>(res_len + sizeof(ObLobCommon)),
0,
false))) {
LOG_WARN("Lob: fill temp lob locator failed", K(type_), K(ret));
} else if (OB_FAIL((locator.set_payload_data(&lob_common, empty_str)))) {

View File

@ -303,6 +303,7 @@ int ObLobLocatorHelper::fuse_mem_lob_header(ObObj &def_obj, uint64_t col_id, boo
rowkey_str_,
&lob_common,
payload_size,
0,
false))) {
STORAGE_LOG(WARN, "Lob: init locator in build_lob_locatorv2", K(ret), K(column_id));
} else if (OB_FAIL(locator.set_payload_data(&lob_common, def_obj.get_string()))) {
@ -500,6 +501,7 @@ int ObLobLocatorHelper::build_lob_locatorv2(ObLobLocatorV2 &locator,
rowid_str,
lob_common,
out_payload_len,
is_dst_inrow ? 0 : payload.length(),
is_simple))) {
STORAGE_LOG(WARN, "Lob: init locator in build_lob_locatorv2", K(ret), K(column_id));
} else if (OB_SUCC(locator.get_mem_locator(mem_lob_common))) {