[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 ObString &rowkey_str,
|
||||||
const ObLobCommon *disk_loc,
|
const ObLobCommon *disk_loc,
|
||||||
uint32_t disk_lob_full_size,
|
uint32_t disk_lob_full_size,
|
||||||
|
uint32_t disk_lob_header_size,
|
||||||
bool is_simple)
|
bool is_simple)
|
||||||
{
|
{
|
||||||
validate_has_lob_header(has_lob_header_);
|
validate_has_lob_header(has_lob_header_);
|
||||||
@ -453,6 +454,8 @@ int ObLobLocatorV2::fill(ObMemLobType type,
|
|||||||
if (disk_loc->is_init_) {
|
if (disk_loc->is_init_) {
|
||||||
disk_loc_header_size += sizeof(ObLobData);
|
disk_loc_header_size += sizeof(ObLobData);
|
||||||
}
|
}
|
||||||
|
} else if (disk_lob_header_size != 0) {
|
||||||
|
disk_loc_header_size = disk_lob_header_size;
|
||||||
} else {
|
} else {
|
||||||
int64_t tbz = disk_loc->get_byte_size(disk_lob_full_size);
|
int64_t tbz = disk_loc->get_byte_size(disk_lob_full_size);
|
||||||
int64_t thz = disk_loc->get_handle_size(tbz);
|
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) {
|
if (offset + disk_loc_header_size > size_ || disk_lob_full_size < disk_loc_header_size) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
COMMON_LOG(WARN, "Lob: invalid disk locator",
|
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));
|
K(disk_loc_header_size), K(disk_lob_full_size), K(*disk_loc));
|
||||||
} else {
|
} else {
|
||||||
offset += disk_loc_header_size;
|
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 ObString &rowkey_str,
|
||||||
const ObLobCommon *disk_loc,
|
const ObLobCommon *disk_loc,
|
||||||
uint32_t disk_lob_full_size,
|
uint32_t disk_lob_full_size,
|
||||||
|
uint32_t disk_lob_header_size,
|
||||||
bool is_simple);
|
bool is_simple);
|
||||||
|
|
||||||
int copy(const ObLobLocatorV2* src_locator) const;
|
int copy(const ObLobLocatorV2* src_locator) const;
|
||||||
|
@ -1048,6 +1048,7 @@ int ObTextStringResult::fill_temp_lob_header(const int64_t res_len)
|
|||||||
rowkey_str,
|
rowkey_str,
|
||||||
&lob_common,
|
&lob_common,
|
||||||
static_cast<uint32_t>(res_len + sizeof(ObLobCommon)),
|
static_cast<uint32_t>(res_len + sizeof(ObLobCommon)),
|
||||||
|
0,
|
||||||
false))) {
|
false))) {
|
||||||
LOG_WARN("Lob: fill temp lob locator failed", K(type_), K(ret));
|
LOG_WARN("Lob: fill temp lob locator failed", K(type_), K(ret));
|
||||||
} else if (OB_FAIL((locator.set_payload_data(&lob_common, empty_str)))) {
|
} 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_,
|
rowkey_str_,
|
||||||
&lob_common,
|
&lob_common,
|
||||||
payload_size,
|
payload_size,
|
||||||
|
0,
|
||||||
false))) {
|
false))) {
|
||||||
STORAGE_LOG(WARN, "Lob: init locator in build_lob_locatorv2", K(ret), K(column_id));
|
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()))) {
|
} 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,
|
rowid_str,
|
||||||
lob_common,
|
lob_common,
|
||||||
out_payload_len,
|
out_payload_len,
|
||||||
|
is_dst_inrow ? 0 : payload.length(),
|
||||||
is_simple))) {
|
is_simple))) {
|
||||||
STORAGE_LOG(WARN, "Lob: init locator in build_lob_locatorv2", K(ret), K(column_id));
|
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))) {
|
} else if (OB_SUCC(locator.get_mem_locator(mem_lob_common))) {
|
||||||
|
Reference in New Issue
Block a user