[BUGFIX] fix read lob over 64K from 4.0
This commit is contained in:
5
deps/oblib/src/common/object/ob_object.cpp
vendored
5
deps/oblib/src/common/object/ob_object.cpp
vendored
@ -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;
|
||||
|
1
deps/oblib/src/common/object/ob_object.h
vendored
1
deps/oblib/src/common/object/ob_object.h
vendored
@ -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;
|
||||
|
@ -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)))) {
|
||||
|
@ -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))) {
|
||||
|
Reference in New Issue
Block a user