Revert shrink memory usage of ddl kv mgr
This commit is contained in:
@ -1245,7 +1245,7 @@ int ObComplementMergeTask::add_build_hidden_table_sstable()
|
|||||||
} else if (OB_FAIL(param_->get_hidden_table_key(hidden_table_key))) {
|
} else if (OB_FAIL(param_->get_hidden_table_key(hidden_table_key))) {
|
||||||
LOG_WARN("fail to get hidden table key", K(ret), K(hidden_table_key));
|
LOG_WARN("fail to get hidden table key", K(ret), K(hidden_table_key));
|
||||||
} else if (OB_FAIL(context_->data_sstable_redo_writer_.end_ddl_redo_and_create_ddl_sstable(
|
} else if (OB_FAIL(context_->data_sstable_redo_writer_.end_ddl_redo_and_create_ddl_sstable(
|
||||||
ls_handle, context_->ddl_kv_mgr_handle_, hidden_table_key, param_->dest_table_id_, param_->execution_id_, param_->task_id_))) {
|
ls_handle, hidden_table_key, param_->dest_table_id_, param_->execution_id_, param_->task_id_))) {
|
||||||
LOG_WARN("failed to end ddl redo", K(ret));
|
LOG_WARN("failed to end ddl redo", K(ret));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@ -312,7 +312,7 @@ int ObDDLTableMergeTask::init(const ObDDLTableMergeDagParam &ddl_dag_param)
|
|||||||
int ObDDLTableMergeTask::process()
|
int ObDDLTableMergeTask::process()
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int64_t MAX_DDL_SSTABLE = ObTabletDDLKvMgr::MAX_DDL_KV_CNT_IN_STORAGE * 0.5;
|
int64_t MAX_DDL_SSTABLE = 128;
|
||||||
#ifdef ERRSIM
|
#ifdef ERRSIM
|
||||||
if (0 != GCONF.errsim_max_ddl_sstable_count) {
|
if (0 != GCONF.errsim_max_ddl_sstable_count) {
|
||||||
MAX_DDL_SSTABLE = GCONF.errsim_max_ddl_sstable_count;
|
MAX_DDL_SSTABLE = GCONF.errsim_max_ddl_sstable_count;
|
||||||
@ -426,10 +426,6 @@ int ObDDLTableMergeTask::process()
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_INFO("commit ddl sstable succ", K(ddl_param), K(merge_param_));
|
LOG_INFO("commit ddl sstable succ", K(ddl_param), K(merge_param_));
|
||||||
int tmp_ret = OB_SUCCESS;
|
|
||||||
if (OB_TMP_FAIL(ddl_kv_mgr_handle.get_obj()->unregister_from_tablet(merge_param_.start_scn_, ddl_kv_mgr_handle))) {
|
|
||||||
LOG_WARN("unregister ddl kv mgr from tablet failed", K(tmp_ret), K(merge_param_));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -689,27 +689,17 @@ int ObDDLRedoLogWriter::write_ddl_start_log(ObTabletHandle &tablet_handle,
|
|||||||
ret = OB_TASK_EXPIRED;
|
ret = OB_TASK_EXPIRED;
|
||||||
LOG_INFO("receive a old execution id, don't do ddl start", K(ret), K(log));
|
LOG_INFO("receive a old execution id, don't do ddl start", K(ret), K(log));
|
||||||
} else if (ddl_kv_mgr_handle.get_obj()->get_commit_scn_nolock(tablet_handle.get_obj()->get_tablet_meta()).is_valid_and_not_min()) {
|
} else if (ddl_kv_mgr_handle.get_obj()->get_commit_scn_nolock(tablet_handle.get_obj()->get_tablet_meta()).is_valid_and_not_min()) {
|
||||||
// ddl commit log already written
|
|
||||||
if (ddl_kv_mgr_handle.get_obj()->get_start_scn().is_valid_and_not_min()) {
|
|
||||||
start_scn = ddl_kv_mgr_handle.get_obj()->get_start_scn();
|
start_scn = ddl_kv_mgr_handle.get_obj()->get_start_scn();
|
||||||
if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->set_execution_id_nolock(log.get_execution_id()))) {
|
if (!start_scn.is_valid_and_not_min()) {
|
||||||
LOG_WARN("failed to set execution id", K(ret));
|
|
||||||
}
|
|
||||||
LOG_INFO("already committed, use new execution id", K(ret), K(start_scn),
|
|
||||||
K(log.get_execution_id()), "tablet_meta", tablet_handle.get_obj()->get_tablet_meta());
|
|
||||||
} else {
|
|
||||||
// ddl kv mgr is freed when ddl merge task finished, this is a new one, so recover it
|
|
||||||
start_scn = tablet_handle.get_obj()->get_tablet_meta().ddl_start_scn_;
|
start_scn = tablet_handle.get_obj()->get_tablet_meta().ddl_start_scn_;
|
||||||
SCN commit_scn = tablet_handle.get_obj()->get_tablet_meta().ddl_commit_scn_;
|
|
||||||
if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->ddl_recover_nolock(log.get_table_key(),
|
|
||||||
start_scn,
|
|
||||||
log.get_data_format_version(),
|
|
||||||
log.get_execution_id(),
|
|
||||||
commit_scn))) {
|
|
||||||
LOG_WARN("start ddl log failed", K(ret), K(start_scn), K(log));
|
|
||||||
}
|
}
|
||||||
LOG_INFO("already committed, recover to success status", K(ret), K(start_scn), K(commit_scn),
|
if (!start_scn.is_valid_and_not_min()) {
|
||||||
K(log.get_execution_id()), "tablet_meta", tablet_handle.get_obj()->get_tablet_meta());
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN("start scn must be valid after commit", K(ret), K(start_scn));
|
||||||
|
} else if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->set_execution_id_nolock(log.get_execution_id()))) {
|
||||||
|
LOG_WARN("failed to set execution id", K(ret));
|
||||||
|
} else {
|
||||||
|
LOG_INFO("already committed, use previous start scn", K(ret), K(tablet_handle.get_obj()->get_tablet_meta()));
|
||||||
}
|
}
|
||||||
} else if (OB_ISNULL(cb = op_alloc(ObDDLStartClogCb))) {
|
} else if (OB_ISNULL(cb = op_alloc(ObDDLStartClogCb))) {
|
||||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||||
@ -1089,7 +1079,6 @@ int ObDDLSSTableRedoWriter::start_ddl_redo(const ObITable::TableKey &table_key,
|
|||||||
|
|
||||||
int ObDDLSSTableRedoWriter::end_ddl_redo_and_create_ddl_sstable(
|
int ObDDLSSTableRedoWriter::end_ddl_redo_and_create_ddl_sstable(
|
||||||
ObLSHandle &ls_handle,
|
ObLSHandle &ls_handle,
|
||||||
ObDDLKvMgrHandle &ddl_kv_mgr_handle,
|
|
||||||
const ObITable::TableKey &table_key,
|
const ObITable::TableKey &table_key,
|
||||||
const uint64_t table_id,
|
const uint64_t table_id,
|
||||||
const int64_t execution_id,
|
const int64_t execution_id,
|
||||||
@ -1097,17 +1086,20 @@ int ObDDLSSTableRedoWriter::end_ddl_redo_and_create_ddl_sstable(
|
|||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
ObTabletHandle tablet_handle;
|
ObTabletHandle tablet_handle;
|
||||||
|
ObDDLKvMgrHandle ddl_kv_mgr_handle;
|
||||||
const ObTabletID &tablet_id = table_key.tablet_id_;
|
const ObTabletID &tablet_id = table_key.tablet_id_;
|
||||||
ObLS *ls = nullptr;
|
ObLS *ls = nullptr;
|
||||||
ObLSID ls_id;
|
ObLSID ls_id;
|
||||||
SCN ddl_start_scn = get_start_scn();
|
SCN ddl_start_scn = get_start_scn();
|
||||||
SCN commit_scn = SCN::min_scn();
|
SCN commit_scn = SCN::min_scn();
|
||||||
if (OB_ISNULL(ls = ls_handle.get_ls()) || !ddl_kv_mgr_handle.is_valid() || OB_UNLIKELY(!table_key.is_valid())) {
|
if (OB_ISNULL(ls = ls_handle.get_ls()) || OB_UNLIKELY(!table_key.is_valid())) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid ls", K(ret), KP(ls), K(ddl_kv_mgr_handle), K(table_key));
|
LOG_WARN("invalid ls", K(ret), K(table_key));
|
||||||
} else if (OB_FALSE_IT(ls_id = ls->get_ls_id())) {
|
} else if (OB_FALSE_IT(ls_id = ls->get_ls_id())) {
|
||||||
} else if (OB_FAIL(ObDDLUtil::ddl_get_tablet(ls_handle, tablet_id, tablet_handle))) {
|
} else if (OB_FAIL(ObDDLUtil::ddl_get_tablet(ls_handle, tablet_id, tablet_handle))) {
|
||||||
LOG_WARN("get tablet failed", K(ret));
|
LOG_WARN("get tablet failed", K(ret));
|
||||||
|
} else if (OB_FAIL(tablet_handle.get_obj()->get_ddl_kv_mgr(ddl_kv_mgr_handle))) {
|
||||||
|
LOG_WARN("get ddl kv manager failed", K(ret), K(ls_id), K(tablet_id));
|
||||||
} else if (OB_FALSE_IT(ddl_kv_mgr_handle.get_obj()->prepare_info_for_checksum_report(table_id, ddl_task_id))) {
|
} else if (OB_FALSE_IT(ddl_kv_mgr_handle.get_obj()->prepare_info_for_checksum_report(table_id, ddl_task_id))) {
|
||||||
} else if (OB_FAIL(write_commit_log(tablet_handle, ddl_kv_mgr_handle, table_key, table_id, execution_id, ddl_task_id, commit_scn))) {
|
} else if (OB_FAIL(write_commit_log(tablet_handle, ddl_kv_mgr_handle, table_key, table_id, execution_id, ddl_task_id, commit_scn))) {
|
||||||
if (OB_TASK_EXPIRED == ret) {
|
if (OB_TASK_EXPIRED == ret) {
|
||||||
|
|||||||
@ -269,7 +269,6 @@ public:
|
|||||||
const int64_t data_format_version,
|
const int64_t data_format_version,
|
||||||
ObDDLKvMgrHandle &ddl_kv_mgr_handle);
|
ObDDLKvMgrHandle &ddl_kv_mgr_handle);
|
||||||
int end_ddl_redo_and_create_ddl_sstable(ObLSHandle &ls_handle,
|
int end_ddl_redo_and_create_ddl_sstable(ObLSHandle &ls_handle,
|
||||||
ObDDLKvMgrHandle &ddl_kv_mgr_handle,
|
|
||||||
const ObITable::TableKey &table_key,
|
const ObITable::TableKey &table_key,
|
||||||
const uint64_t table_id,
|
const uint64_t table_id,
|
||||||
const int64_t execution_id,
|
const int64_t execution_id,
|
||||||
|
|||||||
@ -864,7 +864,7 @@ int ObSSTableInsertTabletContext::create_sstable_with_clog(
|
|||||||
} else {
|
} else {
|
||||||
DEBUG_SYNC(AFTER_REMOTE_WRITE_DDL_PREPARE_LOG);
|
DEBUG_SYNC(AFTER_REMOTE_WRITE_DDL_PREPARE_LOG);
|
||||||
if (OB_FAIL(data_sstable_redo_writer_.end_ddl_redo_and_create_ddl_sstable(
|
if (OB_FAIL(data_sstable_redo_writer_.end_ddl_redo_and_create_ddl_sstable(
|
||||||
ls_handle_, ddl_kv_mgr_handle_, table_key, table_id, build_param_.execution_id_, build_param_.ddl_task_id_))) {
|
ls_handle_, table_key, table_id, build_param_.execution_id_, build_param_.ddl_task_id_))) {
|
||||||
LOG_WARN("fail create ddl sstable", K(ret), K(table_key));
|
LOG_WARN("fail create ddl sstable", K(ret), K(table_key));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -170,39 +170,6 @@ int ObTabletDDLKvMgr::ddl_start(ObTablet &tablet,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObTabletDDLKvMgr::ddl_recover_nolock(const ObITable::TableKey &table_key,
|
|
||||||
const SCN &start_scn,
|
|
||||||
const int64_t data_format_version,
|
|
||||||
const int64_t execution_id,
|
|
||||||
const SCN &commit_scn)
|
|
||||||
{
|
|
||||||
int ret = OB_SUCCESS;
|
|
||||||
if (OB_UNLIKELY(!is_inited_)) {
|
|
||||||
ret = OB_NOT_INIT;
|
|
||||||
LOG_WARN("not init", K(ret), K(is_inited_));
|
|
||||||
} else if (OB_UNLIKELY(!table_key.is_valid() || !start_scn.is_valid_and_not_min() || execution_id < 0 || data_format_version < 0
|
|
||||||
|| (commit_scn.is_valid_and_not_min() && commit_scn < start_scn))) {
|
|
||||||
ret = OB_INVALID_ARGUMENT;
|
|
||||||
LOG_WARN("invalid argument", K(ret), K(table_key), K(start_scn), K(execution_id), K(data_format_version), K(commit_scn));
|
|
||||||
} else if (table_key.get_tablet_id() != tablet_id_) {
|
|
||||||
ret = OB_ERR_SYS;
|
|
||||||
LOG_WARN("tablet id not same", K(ret), K(table_key), K(tablet_id_));
|
|
||||||
} else if (start_scn_.is_valid_and_not_min()) {
|
|
||||||
ret = OB_ERR_SYS;
|
|
||||||
LOG_WARN("start scn has set", K(ret), K(start_scn_));
|
|
||||||
} else {
|
|
||||||
table_key_ = table_key;
|
|
||||||
data_format_version_ = data_format_version;
|
|
||||||
execution_id_ = execution_id;
|
|
||||||
start_scn_ = start_scn;
|
|
||||||
max_freeze_scn_ = commit_scn;
|
|
||||||
commit_scn_ = commit_scn;
|
|
||||||
success_start_scn_ = start_scn;
|
|
||||||
}
|
|
||||||
FLOG_INFO("ddl recover finished", K(ret), K(*this));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ObTabletDDLKvMgr::ddl_commit(const SCN &start_scn,
|
int ObTabletDDLKvMgr::ddl_commit(const SCN &start_scn,
|
||||||
const SCN &commit_scn,
|
const SCN &commit_scn,
|
||||||
const uint64_t table_id,
|
const uint64_t table_id,
|
||||||
@ -352,12 +319,6 @@ int ObTabletDDLKvMgr::wait_ddl_merge_success(const SCN &start_scn, const SCN &co
|
|||||||
"wait_elpased_s", (ObTimeUtility::fast_current_time() - wait_start_ts) / 1000000L);
|
"wait_elpased_s", (ObTimeUtility::fast_current_time() - wait_start_ts) / 1000000L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (OB_TASK_EXPIRED == ret) { // maybe ddl merge task has finished
|
|
||||||
if (is_commit_success()) {
|
|
||||||
ret = OB_SUCCESS;
|
|
||||||
FLOG_INFO("ddl commit already succeed", K(start_scn), K(commit_scn), K(*this));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,7 +80,6 @@ public:
|
|||||||
int get_ddl_major_merge_param(const ObTabletMeta &tablet_meta, ObDDLTableMergeDagParam &merge_param);
|
int get_ddl_major_merge_param(const ObTabletMeta &tablet_meta, ObDDLTableMergeDagParam &merge_param);
|
||||||
int get_rec_scn(share::SCN &rec_scn);
|
int get_rec_scn(share::SCN &rec_scn);
|
||||||
void prepare_info_for_checksum_report(const uint64_t table_id, const int64_t ddl_task_id) { table_id_ = table_id; ddl_task_id_ = ddl_task_id; }
|
void prepare_info_for_checksum_report(const uint64_t table_id, const int64_t ddl_task_id) { table_id_ = table_id; ddl_task_id_ = ddl_task_id; }
|
||||||
int ddl_recover_nolock(const ObITable::TableKey &table_key, const share::SCN &start_scn, const int64_t data_format_version, const int64_t execution_id, const share::SCN &commit_scn);
|
|
||||||
TO_STRING_KV(K_(is_inited), K_(success_start_scn), K_(ls_id), K_(tablet_id), K_(table_key),
|
TO_STRING_KV(K_(is_inited), K_(success_start_scn), K_(ls_id), K_(tablet_id), K_(table_key),
|
||||||
K_(data_format_version), K_(start_scn), K_(commit_scn), K_(max_freeze_scn),
|
K_(data_format_version), K_(start_scn), K_(commit_scn), K_(max_freeze_scn),
|
||||||
K_(table_id), K_(execution_id), K_(ddl_task_id), K_(head), K_(tail), K_(ref_cnt));
|
K_(table_id), K_(execution_id), K_(ddl_task_id), K_(head), K_(tail), K_(ref_cnt));
|
||||||
@ -98,9 +97,8 @@ private:
|
|||||||
void cleanup_unlock();
|
void cleanup_unlock();
|
||||||
void destroy();
|
void destroy();
|
||||||
bool is_commit_success_unlock() const;
|
bool is_commit_success_unlock() const;
|
||||||
public:
|
|
||||||
static const int64_t MAX_DDL_KV_CNT_IN_STORAGE = 64;
|
|
||||||
private:
|
private:
|
||||||
|
static const int64_t MAX_DDL_KV_CNT_IN_STORAGE = 64;
|
||||||
bool is_inited_;
|
bool is_inited_;
|
||||||
share::SCN success_start_scn_;
|
share::SCN success_start_scn_;
|
||||||
share::ObLSID ls_id_;
|
share::ObLSID ls_id_;
|
||||||
|
|||||||
Reference in New Issue
Block a user