fixed log data incorrect because of alloc memory failed.
This commit is contained in:
@ -777,7 +777,7 @@ int LogEngine::update_manifest(const block_id_t block_id)
|
|||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
if (OB_FAIL(log_meta_storage_.update_manifest_used_for_meta_storage(block_id))) {
|
if (OB_FAIL(log_meta_storage_.update_manifest_used_for_meta_storage(block_id))) {
|
||||||
PALF_LOG(WARN, "append_log_meta_ failed", K(ret), K_(palf_id), K_(is_inited));
|
PALF_LOG(WARN, "update_manifest_used_for_meta_storage failed", K(ret), K_(palf_id), K_(is_inited));
|
||||||
} else {
|
} else {
|
||||||
PALF_LOG(INFO,
|
PALF_LOG(INFO,
|
||||||
"update_max_block_id_for_switch_block_cb success",
|
"update_max_block_id_for_switch_block_cb success",
|
||||||
|
|||||||
@ -13,7 +13,6 @@
|
|||||||
#define USING_LOG_PREFIX PALF
|
#define USING_LOG_PREFIX PALF
|
||||||
#include "log_storage.h"
|
#include "log_storage.h"
|
||||||
#include "lib/ob_errno.h" // OB_INVALID_ARGUMENT
|
#include "lib/ob_errno.h" // OB_INVALID_ARGUMENT
|
||||||
#include "share/rc/ob_tenant_base.h" // mtl_malloc
|
|
||||||
#include "log_reader_utils.h" // ReadBuf
|
#include "log_reader_utils.h" // ReadBuf
|
||||||
#include "share/scn.h"
|
#include "share/scn.h"
|
||||||
|
|
||||||
@ -98,15 +97,15 @@ int LogStorage::load_manifest_for_meta_storage(block_id_t &expected_next_block_i
|
|||||||
void LogStorage::destroy()
|
void LogStorage::destroy()
|
||||||
{
|
{
|
||||||
is_inited_ = false;
|
is_inited_ = false;
|
||||||
palf_id_ = INVALID_PALF_ID;
|
|
||||||
logical_block_size_ = 0;
|
logical_block_size_ = 0;
|
||||||
block_mgr_.destroy();
|
palf_id_ = INVALID_PALF_ID;
|
||||||
log_reader_.destroy();
|
|
||||||
log_tail_.reset();
|
|
||||||
readable_log_tail_.reset();
|
|
||||||
log_block_header_.reset();
|
|
||||||
curr_block_writable_size_ = 0;
|
|
||||||
need_append_block_header_ = false;
|
need_append_block_header_ = false;
|
||||||
|
curr_block_writable_size_ = 0;
|
||||||
|
log_block_header_.reset();
|
||||||
|
readable_log_tail_.reset();
|
||||||
|
log_tail_.reset();
|
||||||
|
log_reader_.destroy();
|
||||||
|
block_mgr_.destroy();
|
||||||
PALF_LOG(INFO, "LogStorage destroy success");
|
PALF_LOG(INFO, "LogStorage destroy success");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -570,6 +569,7 @@ int LogStorage::do_init_(const char *base_dir,
|
|||||||
snprintf(log_dir, OB_MAX_FILE_NAME_LENGTH, "%s/%s", base_dir, sub_dir))) {
|
snprintf(log_dir, OB_MAX_FILE_NAME_LENGTH, "%s/%s", base_dir, sub_dir))) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
PALF_LOG(ERROR, "LogStorage snprintf failed", K(ret), K(tmp_ret));
|
PALF_LOG(ERROR, "LogStorage snprintf failed", K(ret), K(tmp_ret));
|
||||||
|
} else if (FALSE_IT(memset(block_header_serialize_buf_, '\0', MAX_INFO_BLOCK_SIZE))) {
|
||||||
} else if (OB_FAIL(block_mgr_.init(log_dir,
|
} else if (OB_FAIL(block_mgr_.init(log_dir,
|
||||||
lsn_2_block(base_lsn, logical_block_size),
|
lsn_2_block(base_lsn, logical_block_size),
|
||||||
align_size,
|
align_size,
|
||||||
@ -653,7 +653,6 @@ int LogStorage::update_block_header_(const block_id_t block_id,
|
|||||||
const SCN &block_min_scn)
|
const SCN &block_min_scn)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
char *block_header_seria_buf = NULL;
|
|
||||||
int64_t pos = 0;
|
int64_t pos = 0;
|
||||||
|
|
||||||
log_block_header_.update_lsn_and_scn(block_min_lsn, block_min_scn);
|
log_block_header_.update_lsn_and_scn(block_min_lsn, block_min_scn);
|
||||||
@ -661,23 +660,17 @@ int LogStorage::update_block_header_(const block_id_t block_id,
|
|||||||
palf_id_, lsn_2_block(log_tail_, logical_block_size_));
|
palf_id_, lsn_2_block(log_tail_, logical_block_size_));
|
||||||
log_block_header_.calc_checksum();
|
log_block_header_.calc_checksum();
|
||||||
|
|
||||||
if (OB_ISNULL(block_header_seria_buf =
|
if (FALSE_IT(memset(block_header_serialize_buf_, '\0', MAX_INFO_BLOCK_SIZE))) {
|
||||||
static_cast<char *>(mtl_malloc(MAX_INFO_BLOCK_SIZE, "LogStorage")))) {
|
} else if (OB_FAIL(log_block_header_.serialize(block_header_serialize_buf_,
|
||||||
} else if (FALSE_IT(memset(block_header_seria_buf, '\0', MAX_INFO_BLOCK_SIZE))) {
|
|
||||||
} else if (OB_FAIL(log_block_header_.serialize(block_header_seria_buf,
|
|
||||||
MAX_INFO_BLOCK_SIZE, pos))) {
|
MAX_INFO_BLOCK_SIZE, pos))) {
|
||||||
PALF_LOG(ERROR, "serialize info block failed", K(ret));
|
PALF_LOG(ERROR, "serialize info block failed", K(ret));
|
||||||
} else if (OB_FAIL(block_mgr_.pwrite(block_id, 0, block_header_seria_buf,
|
} else if (OB_FAIL(block_mgr_.pwrite(block_id, 0, block_header_serialize_buf_,
|
||||||
MAX_INFO_BLOCK_SIZE))) {
|
MAX_INFO_BLOCK_SIZE))) {
|
||||||
PALF_LOG(ERROR, "write info block failed", K(ret), K(block_id), KPC(this));
|
PALF_LOG(ERROR, "write info block failed", K(ret), K(block_id), KPC(this));
|
||||||
} else {
|
} else {
|
||||||
PALF_LOG(INFO, "append_block_header_ success", K(ret), K(block_id),
|
PALF_LOG(INFO, "append_block_header_ success", K(ret), K(block_id), K(log_block_header_));
|
||||||
K(log_block_header_));
|
|
||||||
need_append_block_header_ = false;
|
need_append_block_header_ = false;
|
||||||
}
|
}
|
||||||
if (NULL != block_header_seria_buf) {
|
|
||||||
mtl_free(block_header_seria_buf);
|
|
||||||
}
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -114,7 +114,8 @@ public:
|
|||||||
K_(log_block_header),
|
K_(log_block_header),
|
||||||
K_(block_mgr),
|
K_(block_mgr),
|
||||||
K(logical_block_size_),
|
K(logical_block_size_),
|
||||||
K(curr_block_writable_size_));
|
K(curr_block_writable_size_),
|
||||||
|
KP(block_header_serialize_buf_));
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int do_init_(const char *log_dir,
|
int do_init_(const char *log_dir,
|
||||||
@ -176,6 +177,7 @@ private:
|
|||||||
mutable ObSpinLock tail_info_lock_;
|
mutable ObSpinLock tail_info_lock_;
|
||||||
mutable ObSpinLock delete_block_lock_;
|
mutable ObSpinLock delete_block_lock_;
|
||||||
UpdateManifestCallback update_manifest_cb_;
|
UpdateManifestCallback update_manifest_cb_;
|
||||||
|
char block_header_serialize_buf_[MAX_INFO_BLOCK_SIZE];
|
||||||
bool is_inited_;
|
bool is_inited_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user