Release memtables in remove_tablet
This commit is contained in:
parent
517bc412b9
commit
75e30dfb3e
@ -554,8 +554,8 @@ int ObLSTabletService::remove_tablets(const common::ObIArray<common::ObTabletID>
|
||||
} else {
|
||||
LOG_WARN("failed to get tablet", K(ret), K(key));
|
||||
}
|
||||
} else if (OB_FAIL(tablet_handle.get_obj()->remove_memtables_from_data_checkpoint())) {
|
||||
LOG_WARN("failed to remove memtables from data_checkpoint", K(ret), K(key));
|
||||
} else if (OB_FAIL(tablet_handle.get_obj()->wait_release_memtables())) {
|
||||
LOG_ERROR("failed to release memtables", K(ret), K(tablet_id));
|
||||
} else if (OB_FAIL(tablet_handle.get_obj()->get_meta_disk_addr(tablet_addr))) {
|
||||
LOG_WARN("failed to get tablet addr", K(ret), K(key));
|
||||
} else if (!tablet_addr.is_disked()) {
|
||||
|
@ -294,7 +294,6 @@ public:
|
||||
{ // do nothing
|
||||
return OB_NOT_SUPPORTED;
|
||||
}
|
||||
virtual int remove_memtables_from_data_checkpoint() { return OB_SUCCESS; }
|
||||
virtual int set_frozen_for_all_memtables() { return OB_SUCCESS; }
|
||||
DECLARE_VIRTUAL_TO_STRING;
|
||||
protected:
|
||||
|
@ -1927,6 +1927,33 @@ int ObTablet::release_memtables()
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTablet::wait_release_memtables()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObIMemtableMgr *memtable_mgr = nullptr;
|
||||
|
||||
if (IS_NOT_INIT) {
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret), K_(is_inited));
|
||||
} else if (OB_FAIL(get_memtable_mgr(memtable_mgr))) {
|
||||
LOG_WARN("failed to get memtable mgr", K(ret));
|
||||
} else {
|
||||
const int64_t start = ObTimeUtility::current_time();
|
||||
do {
|
||||
if (OB_FAIL(memtable_mgr->release_memtables())) {
|
||||
const int64_t cost_time = ObTimeUtility::current_time() - start;
|
||||
if (cost_time > 1000 * 1000) {
|
||||
if (TC_REACH_TIME_INTERVAL(1000 * 1000)) {
|
||||
LOG_WARN("failed to release memtables", K(ret), KPC(memtable_mgr));
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (OB_FAIL(ret));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTablet::reset_storage_related_member()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
@ -3351,23 +3378,6 @@ int ObTablet::clear_memtables_on_table_store() // be careful to call this func
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
int ObTablet::remove_memtables_from_data_checkpoint()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObIMemtableMgr *memtable_mgr = nullptr;
|
||||
|
||||
if (OB_UNLIKELY(!is_inited_)) {
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret), K_(is_inited));
|
||||
} else if (OB_FAIL(get_memtable_mgr(memtable_mgr))) {
|
||||
LOG_WARN("failed to get memtable mgr", K(ret));
|
||||
} else if (OB_FAIL(memtable_mgr->remove_memtables_from_data_checkpoint())){
|
||||
LOG_WARN("failed to remove memtables from data_checkpoint", K(ret));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// only check storage_schema & medium_list when ha_status is none
|
||||
int ObTablet::check_valid() const
|
||||
{
|
||||
|
@ -235,6 +235,7 @@ public:
|
||||
// force release all memtables
|
||||
// just for rebuild or migrate retry.
|
||||
int release_memtables();
|
||||
int wait_release_memtables();
|
||||
int reset_storage_related_member();
|
||||
|
||||
// multi-source data operation
|
||||
@ -389,7 +390,6 @@ public:
|
||||
int set_memtable_clog_checkpoint_scn(
|
||||
const ObMigrationTabletParam *tablet_meta);
|
||||
int clear_memtables_on_table_store(); // be careful to call this func, will destroy memtables array on table_store
|
||||
int remove_memtables_from_data_checkpoint();
|
||||
int set_frozen_for_all_memtables();
|
||||
// different from the is_valid() function
|
||||
// typically used for check valid for migration or restore
|
||||
|
@ -686,35 +686,6 @@ void ObTabletMemtableMgr::wait_memtable_mgr_op_cnt_(memtable::ObMemtable *memtab
|
||||
}
|
||||
}
|
||||
|
||||
int ObTabletMemtableMgr::remove_memtables_from_data_checkpoint()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
MemMgrWLockGuard lock_guard(lock_);
|
||||
|
||||
if (IS_NOT_INIT) {
|
||||
ret = OB_NOT_INIT;
|
||||
STORAGE_LOG(WARN, "not inited", K(ret));
|
||||
} else if (OB_ISNULL(ls_)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
STORAGE_LOG(WARN, "ls is null", K(ret));
|
||||
} else {
|
||||
const share::ObLSID &ls_id = ls_->get_ls_id();
|
||||
for (int64_t i = memtable_head_; OB_SUCC(ret) && i < memtable_tail_; ++i) {
|
||||
// memtable that cannot be released will block memtables behind it
|
||||
ObMemtable *memtable = static_cast<memtable::ObMemtable *>(tables_[get_memtable_idx(i)]);
|
||||
if (OB_ISNULL(memtable)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
STORAGE_LOG(WARN, "memtable is nullptr", K(ret), K(ls_id), KP(memtable), K(i));
|
||||
} else {
|
||||
STORAGE_LOG(INFO, "remove memtable from data_checkpoint", K(ls_id), K(i), K(*memtable));
|
||||
memtable->remove_from_data_checkpoint();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTabletMemtableMgr::get_first_frozen_memtable(ObTableHandleV2 &handle) const
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
|
@ -103,7 +103,6 @@ public:
|
||||
const lib::Worker::CompatMode compat_mode,
|
||||
logservice::ObLogHandler *log_handler) override;
|
||||
virtual int reset_storage_recorder() override;
|
||||
virtual int remove_memtables_from_data_checkpoint() override;
|
||||
virtual int set_frozen_for_all_memtables() override;
|
||||
DECLARE_VIRTUAL_TO_STRING;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user