fixed allocate memory failed but the error is OB_INVALID_ARGUMENT
This commit is contained in:
@ -547,6 +547,9 @@ int LogEngine::read_group_entry_header(const LSN &lsn, LogGroupEntryHeader &log_
|
|||||||
ret = OB_NOT_INIT;
|
ret = OB_NOT_INIT;
|
||||||
} else if (false == lsn.is_valid()) {
|
} else if (false == lsn.is_valid()) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
|
} else if (!read_buf.is_valid()) {
|
||||||
|
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||||
|
PALF_LOG(WARN, "allocate memory failed", KPC(this), K(lsn));
|
||||||
} else if (OB_FAIL(log_storage_.pread_without_block_header(lsn, in_read_size, read_buf, out_read_size))) {
|
} else if (OB_FAIL(log_storage_.pread_without_block_header(lsn, in_read_size, read_buf, out_read_size))) {
|
||||||
PALF_LOG(WARN, "LogStorage pread failed", K(ret));
|
PALF_LOG(WARN, "LogStorage pread failed", K(ret));
|
||||||
} else if (OB_FAIL(log_group_entry_header.deserialize(read_buf.buf_, in_read_size, pos))) {
|
} else if (OB_FAIL(log_group_entry_header.deserialize(read_buf.buf_, in_read_size, pos))) {
|
||||||
@ -1150,6 +1153,9 @@ int LogEngine::construct_log_meta_(const LSN &lsn, block_id_t &expected_next_blo
|
|||||||
LogMetaEntry meta_entry;
|
LogMetaEntry meta_entry;
|
||||||
if (false == lsn.is_valid()) {
|
if (false == lsn.is_valid()) {
|
||||||
PALF_LOG(INFO, "there is no meta entry, maybe create palf failed", K(ret), K_(palf_id), K_(is_inited));
|
PALF_LOG(INFO, "there is no meta entry, maybe create palf failed", K(ret), K_(palf_id), K_(is_inited));
|
||||||
|
} else if (!read_buf.is_valid()) {
|
||||||
|
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||||
|
PALF_LOG(WARN, "allocate memory failed", KPC(this), K(lsn));
|
||||||
} else if (OB_FAIL(log_meta_storage_.pread(lsn, buf_len, read_buf, out_read_size))) {
|
} else if (OB_FAIL(log_meta_storage_.pread(lsn, buf_len, read_buf, out_read_size))) {
|
||||||
PALF_LOG(WARN, "ObLogMetaStorage pread failed", K(ret), K_(palf_id), K_(is_inited));
|
PALF_LOG(WARN, "ObLogMetaStorage pread failed", K(ret), K_(palf_id), K_(is_inited));
|
||||||
// NB: when lsn is invalid, means there is no data on disk.
|
// NB: when lsn is invalid, means there is no data on disk.
|
||||||
|
|||||||
@ -113,7 +113,6 @@ int LogReader::inner_pread_(const int read_io_fd,
|
|||||||
offset_t backoff = start_offset - aligned_start_offset;
|
offset_t backoff = start_offset - aligned_start_offset;
|
||||||
int64_t aligned_in_read_size = upper_align(in_read_size + backoff, LOG_DIO_ALIGN_SIZE);
|
int64_t aligned_in_read_size = upper_align(in_read_size + backoff, LOG_DIO_ALIGN_SIZE);
|
||||||
int64_t limited_and_aligned_in_read_size = 0;
|
int64_t limited_and_aligned_in_read_size = 0;
|
||||||
ReadBufGuard read_buf_guard("LogReader", aligned_in_read_size);
|
|
||||||
if (MAX_LOG_BUFFER_SIZE + LOG_DIO_ALIGN_SIZE < aligned_in_read_size) {
|
if (MAX_LOG_BUFFER_SIZE + LOG_DIO_ALIGN_SIZE < aligned_in_read_size) {
|
||||||
ret = OB_BUF_NOT_ENOUGH;
|
ret = OB_BUF_NOT_ENOUGH;
|
||||||
PALF_LOG(ERROR, "aligned_in_read_size is greater than MAX BUFFER LEN",
|
PALF_LOG(ERROR, "aligned_in_read_size is greater than MAX BUFFER LEN",
|
||||||
|
|||||||
@ -30,6 +30,11 @@ ReadBuf::ReadBuf(char *buf, const int64_t buf_len) : buf_(buf), buf_len_(buf_len
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReadBuf::ReadBuf(const ReadBuf &rhs)
|
||||||
|
{
|
||||||
|
*this = rhs;
|
||||||
|
}
|
||||||
|
|
||||||
ReadBuf::~ReadBuf()
|
ReadBuf::~ReadBuf()
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
@ -51,6 +56,12 @@ bool ReadBuf::operator!=(const ReadBuf &rhs) const
|
|||||||
return !operator==(rhs);
|
return !operator==(rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReadBuf &ReadBuf::operator=(const ReadBuf &rhs)
|
||||||
|
{
|
||||||
|
buf_ = rhs.buf_;
|
||||||
|
buf_len_ = rhs.buf_len_;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
bool ReadBuf::is_valid() const
|
bool ReadBuf::is_valid() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -22,8 +22,11 @@ struct ReadBuf
|
|||||||
{
|
{
|
||||||
ReadBuf();
|
ReadBuf();
|
||||||
ReadBuf(char *buf, const int64_t buf_len);
|
ReadBuf(char *buf, const int64_t buf_len);
|
||||||
|
ReadBuf(const ReadBuf &rhs);
|
||||||
bool operator==(const ReadBuf &rhs) const;
|
bool operator==(const ReadBuf &rhs) const;
|
||||||
bool operator!=(const ReadBuf &rhs) const;
|
bool operator!=(const ReadBuf &rhs) const;
|
||||||
|
|
||||||
|
ReadBuf &operator=(const ReadBuf &rhs);
|
||||||
~ReadBuf();
|
~ReadBuf();
|
||||||
void reset();
|
void reset();
|
||||||
bool is_valid() const;
|
bool is_valid() const;
|
||||||
|
|||||||
@ -733,7 +733,10 @@ int LogStorage::read_block_header_(const block_id_t block_id,
|
|||||||
LSN log_tail = get_readable_log_tail_guarded_by_lock_();
|
LSN log_tail = get_readable_log_tail_guarded_by_lock_();
|
||||||
block_id_t max_block_id = lsn_2_block(log_tail, logical_block_size_);
|
block_id_t max_block_id = lsn_2_block(log_tail, logical_block_size_);
|
||||||
bool last_block_has_data = (0 == lsn_2_offset(log_tail, logical_block_size_) ? false : true);
|
bool last_block_has_data = (0 == lsn_2_offset(log_tail, logical_block_size_) ? false : true);
|
||||||
if (block_id > max_block_id || (block_id == max_block_id && false == last_block_has_data)) {
|
if (!read_buf.is_valid()) {
|
||||||
|
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||||
|
PALF_LOG(WARN, "allocate memory failed");
|
||||||
|
} else if (block_id > max_block_id || (block_id == max_block_id && false == last_block_has_data)) {
|
||||||
ret = OB_ERR_OUT_OF_UPPER_BOUND;
|
ret = OB_ERR_OUT_OF_UPPER_BOUND;
|
||||||
PALF_LOG(WARN, "block_id is large than max_block_id", K(ret), K(block_id),
|
PALF_LOG(WARN, "block_id is large than max_block_id", K(ret), K(block_id),
|
||||||
K(log_tail), K(max_block_id), K(log_block_header));
|
K(log_tail), K(max_block_id), K(log_block_header));
|
||||||
|
|||||||
@ -3943,10 +3943,13 @@ int PalfHandleImpl::read_and_append_log_group_entry_before_ts_(
|
|||||||
};
|
};
|
||||||
|
|
||||||
last_log_buf = NULL;
|
last_log_buf = NULL;
|
||||||
if (OB_FAIL(iterator.init(start_lsn, get_file_end_lsn, log_engine_.get_log_storage()))) {
|
ReadBufGuard read_buf_guard("Palf", MAX_LOG_BUFFER_SIZE);
|
||||||
|
if (!read_buf_guard.read_buf_.is_valid()) {
|
||||||
|
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||||
|
PALF_LOG(WARN, "allocate memory failed", KPC(this));
|
||||||
|
} else if (OB_FAIL(iterator.init(start_lsn, get_file_end_lsn, log_engine_.get_log_storage()))) {
|
||||||
PALF_LOG(WARN, "iterator init failed", K(ret), KPC(this), K(start_lsn), K(flashback_scn));
|
PALF_LOG(WARN, "iterator init failed", K(ret), KPC(this), K(start_lsn), K(flashback_scn));
|
||||||
} else {
|
} else {
|
||||||
ReadBufGuard read_buf_guard("Palf", MAX_LOG_BUFFER_SIZE);
|
|
||||||
const int64_t read_buf_len = read_buf_guard.read_buf_.buf_len_;
|
const int64_t read_buf_len = read_buf_guard.read_buf_.buf_len_;
|
||||||
char *&read_buf = read_buf_guard.read_buf_.buf_;
|
char *&read_buf = read_buf_guard.read_buf_.buf_;
|
||||||
const char *buffer = NULL;
|
const char *buffer = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user