fix ddl macro block handle reset without wait apply finished.
This commit is contained in:
@ -143,6 +143,15 @@ ObDDLMacroBlockClogCb::ObDDLMacroBlockClogCb()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ObDDLMacroBlockClogCb::~ObDDLMacroBlockClogCb()
|
||||||
|
{
|
||||||
|
int ret = OB_SUCCESS;
|
||||||
|
if (macro_block_id_.is_valid() && OB_FAIL(OB_SERVER_BLOCK_MGR.dec_ref(macro_block_id_))) {
|
||||||
|
LOG_ERROR("dec ref failed", K(ret), K(macro_block_id_), K(common::lbt()));
|
||||||
|
}
|
||||||
|
macro_block_id_.reset();
|
||||||
|
}
|
||||||
|
|
||||||
int ObDDLMacroBlockClogCb::init(const share::ObLSID &ls_id,
|
int ObDDLMacroBlockClogCb::init(const share::ObLSID &ls_id,
|
||||||
const blocksstable::ObDDLMacroBlockRedoInfo &redo_info,
|
const blocksstable::ObDDLMacroBlockRedoInfo &redo_info,
|
||||||
const blocksstable::MacroBlockId ¯o_block_id,
|
const blocksstable::MacroBlockId ¯o_block_id,
|
||||||
@ -156,6 +165,8 @@ int ObDDLMacroBlockClogCb::init(const share::ObLSID &ls_id,
|
|||||||
} else if (OB_UNLIKELY(!ls_id.is_valid() || !redo_info.is_valid() || !macro_block_id.is_valid() || !tablet_handle.is_valid() || !ddl_kv_mgr_handle.is_valid())) {
|
} else if (OB_UNLIKELY(!ls_id.is_valid() || !redo_info.is_valid() || !macro_block_id.is_valid() || !tablet_handle.is_valid() || !ddl_kv_mgr_handle.is_valid())) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid argument", K(ret), K(ls_id), K(redo_info), K(macro_block_id));
|
LOG_WARN("invalid argument", K(ret), K(ls_id), K(redo_info), K(macro_block_id));
|
||||||
|
} else if (OB_FAIL(OB_SERVER_BLOCK_MGR.inc_ref(macro_block_id))) {
|
||||||
|
LOG_WARN("inc reference count failed", K(ret), K(macro_block_id));
|
||||||
} else {
|
} else {
|
||||||
redo_info_.data_buffer_.assign(const_cast<char *>(redo_info.data_buffer_.ptr()), redo_info.data_buffer_.length());
|
redo_info_.data_buffer_.assign(const_cast<char *>(redo_info.data_buffer_.ptr()), redo_info.data_buffer_.length());
|
||||||
redo_info_.block_type_ = redo_info.block_type_;
|
redo_info_.block_type_ = redo_info.block_type_;
|
||||||
|
@ -103,7 +103,7 @@ class ObDDLMacroBlockClogCb : public logservice::AppendCb
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ObDDLMacroBlockClogCb();
|
ObDDLMacroBlockClogCb();
|
||||||
virtual ~ObDDLMacroBlockClogCb() = default;
|
virtual ~ObDDLMacroBlockClogCb();
|
||||||
int init(const share::ObLSID &ls_id,
|
int init(const share::ObLSID &ls_id,
|
||||||
const blocksstable::ObDDLMacroBlockRedoInfo &redo_info,
|
const blocksstable::ObDDLMacroBlockRedoInfo &redo_info,
|
||||||
const blocksstable::MacroBlockId ¯o_block_id,
|
const blocksstable::MacroBlockId ¯o_block_id,
|
||||||
|
@ -160,9 +160,14 @@ private:
|
|||||||
const blocksstable::ObColDescIArray *col_descs_;
|
const blocksstable::ObColDescIArray *col_descs_;
|
||||||
int64_t snapshot_version_;
|
int64_t snapshot_version_;
|
||||||
ObDDLSSTableRedoWriter sstable_redo_writer_;
|
ObDDLSSTableRedoWriter sstable_redo_writer_;
|
||||||
ObDDLRedoLogWriterCallback redo_log_writer_callback_;
|
|
||||||
blocksstable::ObDataStoreDesc data_desc_;
|
blocksstable::ObDataStoreDesc data_desc_;
|
||||||
|
/**
|
||||||
|
* ATTENTION!
|
||||||
|
* The deconstruction order of the `redo_log_writer_callback_` should be in front of the `macro_block_writer_`
|
||||||
|
* to ensure the safety-used of the ddl macro block.
|
||||||
|
*/
|
||||||
blocksstable::ObMacroBlockWriter macro_block_writer_;
|
blocksstable::ObMacroBlockWriter macro_block_writer_;
|
||||||
|
ObDDLRedoLogWriterCallback redo_log_writer_callback_;
|
||||||
common::ObArenaAllocator allocator_;
|
common::ObArenaAllocator allocator_;
|
||||||
common::ObArenaAllocator lob_allocator_;
|
common::ObArenaAllocator lob_allocator_;
|
||||||
int64_t lob_cnt_;
|
int64_t lob_cnt_;
|
||||||
|
Reference in New Issue
Block a user