keep all medium info for standby cluster
This commit is contained in:
@ -248,7 +248,7 @@ int ObAllVirtualSysStat::update_all_stats_(const int64_t tenant_id, ObStatEventS
|
|||||||
// it is ok to not have any records
|
// it is ok to not have any records
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
if (!is_virtual_tenant_id(tenant_id)) { // skip virtual tenant
|
||||||
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id));
|
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id));
|
||||||
if (tenant_config.is_valid()) {
|
if (tenant_config.is_valid()) {
|
||||||
MTL_SWITCH(tenant_id) {
|
MTL_SWITCH(tenant_id) {
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
#include "storage/tx_storage/ob_ls_service.h"
|
#include "storage/tx_storage/ob_ls_service.h"
|
||||||
#include "storage/meta_mem/ob_tenant_meta_mem_mgr.h"
|
#include "storage/meta_mem/ob_tenant_meta_mem_mgr.h"
|
||||||
#include "storage/compaction/ob_medium_compaction_mgr.h"
|
#include "storage/compaction/ob_medium_compaction_mgr.h"
|
||||||
|
#include "storage/compaction/ob_medium_compaction_func.h"
|
||||||
|
|
||||||
using namespace oceanbase;
|
using namespace oceanbase;
|
||||||
using namespace common;
|
using namespace common;
|
||||||
@ -199,7 +200,8 @@ int ObAllVirtualTabletCompactionInfo::process_curr_tenant(common::ObNewRow *&row
|
|||||||
cur_row_.cells_[i].set_int(medium_info_list->get_wait_check_medium_scn());
|
cur_row_.cells_[i].set_int(medium_info_list->get_wait_check_medium_scn());
|
||||||
break;
|
break;
|
||||||
case MAX_RECEIVED_SCN:
|
case MAX_RECEIVED_SCN:
|
||||||
if (OB_SUCCESS == tablet->get_max_sync_medium_scn(max_sync_medium_scn)) {
|
if (OB_SUCCESS == compaction::ObMediumCompactionScheduleFunc::get_max_sync_medium_scn(
|
||||||
|
*tablet, *medium_info_list, max_sync_medium_scn)) {
|
||||||
cur_row_.cells_[i].set_int(max_sync_medium_scn);
|
cur_row_.cells_[i].set_int(max_sync_medium_scn);
|
||||||
} else {
|
} else {
|
||||||
cur_row_.cells_[i].set_int(-1);
|
cur_row_.cells_[i].set_int(-1);
|
||||||
|
|||||||
@ -1152,7 +1152,10 @@ int ObCompactionDiagnoseMgr::diagnose_tablet_major_and_medium(
|
|||||||
LOG_WARN("fail to fetch table store", K(ret));
|
LOG_WARN("fail to fetch table store", K(ret));
|
||||||
} else if (OB_ISNULL(last_major_sstable =
|
} else if (OB_ISNULL(last_major_sstable =
|
||||||
table_store_wrapper.get_member()->get_major_sstables().get_boundary_table(true/*last*/))) {
|
table_store_wrapper.get_member()->get_major_sstables().get_boundary_table(true/*last*/))) {
|
||||||
} else if (OB_FAIL(tablet.get_max_sync_medium_scn(max_sync_medium_scn))){
|
} else if (OB_FAIL(tablet.read_medium_info_list(allocator, medium_list))) {
|
||||||
|
LOG_WARN("failed to load medium info list", K(ret), K(tablet));
|
||||||
|
} else if (OB_FAIL(ObMediumCompactionScheduleFunc::get_max_sync_medium_scn(
|
||||||
|
tablet, *medium_list, max_sync_medium_scn))){
|
||||||
LOG_WARN("failed to get max sync medium scn", K(ret), K(ls_id), K(tablet_id));
|
LOG_WARN("failed to get max sync medium scn", K(ret), K(ls_id), K(tablet_id));
|
||||||
} else {
|
} else {
|
||||||
// diagnose medium
|
// diagnose medium
|
||||||
|
|||||||
@ -181,7 +181,7 @@ int ObMediumCompactionScheduleFunc::choose_major_snapshot(
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
medium_info.compaction_type_ = ObMediumCompactionInfo::MAJOR_COMPACTION;
|
medium_info.compaction_type_ = ObMediumCompactionInfo::MAJOR_COMPACTION;
|
||||||
medium_info.medium_merge_reason_ = ObAdaptiveMergePolicy::AdaptiveMergeReason::NONE;
|
medium_info.medium_merge_reason_ = ObAdaptiveMergePolicy::AdaptiveMergeReason::TENANT_MAJOR;
|
||||||
medium_info.medium_snapshot_ = freeze_info.freeze_version;
|
medium_info.medium_snapshot_ = freeze_info.freeze_version;
|
||||||
schema_version = freeze_info.schema_version;
|
schema_version = freeze_info.schema_version;
|
||||||
}
|
}
|
||||||
@ -275,6 +275,41 @@ int ObMediumCompactionScheduleFunc::schedule_next_medium_for_leader(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ObMediumCompactionScheduleFunc::get_adaptive_reason(
|
||||||
|
const int64_t schedule_major_snapshot,
|
||||||
|
ObAdaptiveMergePolicy::AdaptiveMergeReason &adaptive_merge_reason)
|
||||||
|
{
|
||||||
|
int ret = OB_SUCCESS;
|
||||||
|
int64_t max_sync_medium_scn = 0;
|
||||||
|
ObTablet *tablet = tablet_handle_.get_obj();
|
||||||
|
if (OB_FAIL(ObMediumCompactionScheduleFunc::get_max_sync_medium_scn(
|
||||||
|
*tablet, *medium_info_list_, max_sync_medium_scn))) {
|
||||||
|
LOG_WARN("failed to get max received medium scn", KR(ret), KPC(this));
|
||||||
|
} else if (schedule_major_snapshot > max_sync_medium_scn) {
|
||||||
|
adaptive_merge_reason = ObAdaptiveMergePolicy::AdaptiveMergeReason::TENANT_MAJOR;
|
||||||
|
} else if (OB_FAIL(ObAdaptiveMergePolicy::get_adaptive_merge_reason(*tablet, adaptive_merge_reason))) {
|
||||||
|
if (OB_HASH_NOT_EXIST != ret) {
|
||||||
|
LOG_WARN("failed to get meta merge priority", K(ret), KPC(this));
|
||||||
|
} else {
|
||||||
|
ret = OB_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef ERRSIM
|
||||||
|
if (OB_SUCC(ret)) {
|
||||||
|
if (tablet->get_tablet_meta().tablet_id_.id() > ObTabletID::MIN_USER_TABLET_ID) {
|
||||||
|
ret = OB_E(EventTable::EN_SCHEDULE_MEDIUM_COMPACTION) ret;
|
||||||
|
LOG_INFO("errsim", K(ret), KPC(this));
|
||||||
|
if (OB_FAIL(ret)) {
|
||||||
|
FLOG_INFO("errsim EN_SCHEDULE_MEDIUM_COMPACTION", KPC(this));
|
||||||
|
ret = OB_SUCCESS;
|
||||||
|
adaptive_merge_reason = ObAdaptiveMergePolicy::AdaptiveMergeReason::LOAD_DATA_SCENE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int ObMediumCompactionScheduleFunc::schedule_next_medium_primary_cluster(
|
int ObMediumCompactionScheduleFunc::schedule_next_medium_primary_cluster(
|
||||||
const int64_t schedule_major_snapshot,
|
const int64_t schedule_major_snapshot,
|
||||||
ObTenantTabletScheduler::ObScheduleStatistics &schedule_stat)
|
ObTenantTabletScheduler::ObScheduleStatistics &schedule_stat)
|
||||||
@ -284,8 +319,6 @@ int ObMediumCompactionScheduleFunc::schedule_next_medium_primary_cluster(
|
|||||||
ObTabletCompactionScnInfo ret_info;
|
ObTabletCompactionScnInfo ret_info;
|
||||||
// check last medium type, select inner table for last major
|
// check last medium type, select inner table for last major
|
||||||
bool schedule_medium_flag = false;
|
bool schedule_medium_flag = false;
|
||||||
int64_t max_sync_medium_scn = 0;
|
|
||||||
const bool is_major = 0 != schedule_major_snapshot;
|
|
||||||
ObITable *last_major = nullptr;
|
ObITable *last_major = nullptr;
|
||||||
ObTablet *tablet = nullptr;
|
ObTablet *tablet = nullptr;
|
||||||
ObTabletMemberWrapper<ObTabletTableStore> table_store_wrapper;
|
ObTabletMemberWrapper<ObTabletTableStore> table_store_wrapper;
|
||||||
@ -305,38 +338,15 @@ int ObMediumCompactionScheduleFunc::schedule_next_medium_primary_cluster(
|
|||||||
} else if (OB_ISNULL(medium_info_list_)) {
|
} else if (OB_ISNULL(medium_info_list_)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("medium info list is unexpected null", K(ret), KPC(this), KPC_(medium_info_list));
|
LOG_WARN("medium info list is unexpected null", K(ret), KPC(this), KPC_(medium_info_list));
|
||||||
} else if (!medium_info_list_->could_schedule_next_round()) { // check serialized list
|
} else if (!medium_info_list_->could_schedule_next_round()) { // check medium list int mds_table
|
||||||
// do nothing
|
// do nothing
|
||||||
} else if (OB_FAIL(tablet->get_max_sync_medium_scn(max_sync_medium_scn))) { // check info in memory
|
} else if (OB_FAIL(get_adaptive_reason(schedule_major_snapshot, adaptive_merge_reason))) {
|
||||||
LOG_WARN("failed to get max sync medium scn", K(ret), K(max_sync_medium_scn));
|
LOG_WARN("failed to get adaptive reason", KR(ret), K(schedule_major_snapshot));
|
||||||
} else if (nullptr != last_major && last_major->get_snapshot_version() < max_sync_medium_scn) {
|
|
||||||
// there is unfinish medium info, schedule next time
|
|
||||||
} else if (is_major && schedule_major_snapshot > max_sync_medium_scn) {
|
|
||||||
schedule_medium_flag = true;
|
|
||||||
} else if (OB_FAIL(ObAdaptiveMergePolicy::get_adaptive_merge_reason(*tablet, adaptive_merge_reason))) {
|
|
||||||
if (OB_HASH_NOT_EXIST != ret) {
|
|
||||||
LOG_WARN("failed to get meta merge priority", K(ret), KPC(this));
|
|
||||||
} else {
|
|
||||||
ret = OB_SUCCESS;
|
|
||||||
}
|
|
||||||
} else if (adaptive_merge_reason > ObAdaptiveMergePolicy::AdaptiveMergeReason::NONE) {
|
} else if (adaptive_merge_reason > ObAdaptiveMergePolicy::AdaptiveMergeReason::NONE) {
|
||||||
schedule_medium_flag = true;
|
schedule_medium_flag = true;
|
||||||
}
|
}
|
||||||
LOG_TRACE("schedule next medium in primary cluster", K(ret), KPC(this), K(schedule_medium_flag),
|
LOG_TRACE("schedule next medium in primary cluster", K(ret), KPC(this), K(schedule_medium_flag),
|
||||||
K(schedule_major_snapshot), K(adaptive_merge_reason), KPC(last_major), KPC_(medium_info_list), K(max_sync_medium_scn));
|
K(schedule_major_snapshot), K(adaptive_merge_reason), KPC(last_major), KPC_(medium_info_list));
|
||||||
#ifdef ERRSIM
|
|
||||||
if (OB_SUCC(ret)) {
|
|
||||||
if (tablet->get_tablet_meta().tablet_id_.id() > ObTabletID::MIN_USER_TABLET_ID) {
|
|
||||||
ret = OB_E(EventTable::EN_SCHEDULE_MEDIUM_COMPACTION) ret;
|
|
||||||
LOG_INFO("errsim", K(ret), KPC(this));
|
|
||||||
if (OB_FAIL(ret)) {
|
|
||||||
FLOG_INFO("set schedule medium with errsim", KPC(this));
|
|
||||||
ret = OB_SUCCESS;
|
|
||||||
schedule_medium_flag = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (OB_FAIL(ret) || !schedule_medium_flag) {
|
if (OB_FAIL(ret) || !schedule_medium_flag) {
|
||||||
} else if (ObMediumCompactionInfo::MAJOR_COMPACTION == medium_info_list_->get_last_compaction_type()) {
|
} else if (ObMediumCompactionInfo::MAJOR_COMPACTION == medium_info_list_->get_last_compaction_type()) {
|
||||||
@ -346,13 +356,13 @@ int ObMediumCompactionScheduleFunc::schedule_next_medium_primary_cluster(
|
|||||||
LOG_WARN("failed to get status from inner tablet", K(ret), KPC(this));
|
LOG_WARN("failed to get status from inner tablet", K(ret), KPC(this));
|
||||||
} else if (ret_info.could_schedule_next_round(medium_info_list_->get_last_compaction_scn())) {
|
} else if (ret_info.could_schedule_next_round(medium_info_list_->get_last_compaction_scn())) {
|
||||||
LOG_INFO("success to check RS major checksum validation finished", K(ret), KPC(this), K(ret_info));
|
LOG_INFO("success to check RS major checksum validation finished", K(ret), KPC(this), K(ret_info));
|
||||||
ret = decide_medium_snapshot(is_major);
|
ret = decide_medium_snapshot(adaptive_merge_reason);
|
||||||
} else {
|
} else {
|
||||||
++schedule_stat.wait_rs_validate_cnt_;
|
++schedule_stat.wait_rs_validate_cnt_;
|
||||||
LOG_TRACE("cannot schedule next round merge now", K(ret), K(ret_info), KPC_(medium_info_list), KPC(tablet));
|
LOG_TRACE("cannot schedule next round merge now", K(ret), K(ret_info), KPC_(medium_info_list), KPC(tablet), K(adaptive_merge_reason));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = decide_medium_snapshot(is_major, adaptive_merge_reason);
|
ret = decide_medium_snapshot(adaptive_merge_reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -453,12 +463,12 @@ int ObMediumCompactionScheduleFunc::choose_medium_schema_version(
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ObMediumCompactionScheduleFunc::decide_medium_snapshot(
|
int ObMediumCompactionScheduleFunc::decide_medium_snapshot(
|
||||||
const bool is_major,
|
|
||||||
const ObAdaptiveMergePolicy::AdaptiveMergeReason merge_reason)
|
const ObAdaptiveMergePolicy::AdaptiveMergeReason merge_reason)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int tmp_ret = OB_SUCCESS;
|
int tmp_ret = OB_SUCCESS;
|
||||||
ObTablet *tablet = nullptr;
|
ObTablet *tablet = nullptr;
|
||||||
|
const bool is_major = (merge_reason == ObAdaptiveMergePolicy::TENANT_MAJOR);
|
||||||
if (OB_UNLIKELY(!tablet_handle_.is_valid())) {
|
if (OB_UNLIKELY(!tablet_handle_.is_valid())) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("invalid tablet_handle", K(ret), K(tablet_handle_));
|
LOG_WARN("invalid tablet_handle", K(ret), K(tablet_handle_));
|
||||||
@ -466,41 +476,32 @@ int ObMediumCompactionScheduleFunc::decide_medium_snapshot(
|
|||||||
tablet = tablet_handle_.get_obj();
|
tablet = tablet_handle_.get_obj();
|
||||||
const ObTabletID &tablet_id = tablet->get_tablet_meta().tablet_id_;
|
const ObTabletID &tablet_id = tablet->get_tablet_meta().tablet_id_;
|
||||||
int64_t max_sync_medium_scn = 0;
|
int64_t max_sync_medium_scn = 0;
|
||||||
uint64_t compat_version = 0;
|
ObMediumCompactionInfo medium_info;
|
||||||
LOG_TRACE("decide_medium_snapshot", K(ret), KPC(this), K(tablet_id));
|
LOG_TRACE("decide_medium_snapshot", K(ret), KPC(this), K(tablet_id), K(merge_reason));
|
||||||
if (OB_FAIL(tablet->get_max_sync_medium_scn(max_sync_medium_scn))) {
|
if (OB_FAIL(ObMediumCompactionScheduleFunc::get_max_sync_medium_scn(
|
||||||
LOG_WARN("failed to get max sync medium scn", K(ret), KPC(this));
|
*tablet, *medium_info_list_, max_sync_medium_scn))) {
|
||||||
|
LOG_WARN("failed to get max sync medium scn", KR(ret), KPC(this));
|
||||||
} else if (OB_FAIL(ls_.add_dependent_medium_tablet(tablet_id))) { // add dependent_id in ObLSReservedSnapshotMgr
|
} else if (OB_FAIL(ls_.add_dependent_medium_tablet(tablet_id))) { // add dependent_id in ObLSReservedSnapshotMgr
|
||||||
LOG_WARN("failed to add dependent tablet", K(ret), KPC(this));
|
LOG_WARN("failed to add dependent tablet", K(ret), KPC(this));
|
||||||
} else if (OB_FAIL(GET_MIN_DATA_VERSION(MTL_ID(), compat_version))) {
|
} else if (OB_FAIL(medium_info.init_data_version())) {
|
||||||
LOG_WARN("fail to get data version", K(ret));
|
LOG_WARN("fail to set data version", K(ret));
|
||||||
} else if (OB_UNLIKELY(compat_version < DATA_VERSION_4_1_0_0)) {
|
|
||||||
ret = OB_ERR_UNEXPECTED;
|
|
||||||
LOG_WARN("invalid data version to schedule medium compaction", K(ret), K(compat_version));
|
|
||||||
} else {
|
} else {
|
||||||
int64_t max_reserved_snapshot = 0;
|
int64_t max_reserved_snapshot = 0;
|
||||||
ObGetMergeTablesResult result;
|
ObGetMergeTablesResult result;
|
||||||
ObMediumCompactionInfo medium_info;
|
|
||||||
medium_info.data_version_ = compat_version;
|
|
||||||
int64_t schema_version = 0;
|
int64_t schema_version = 0;
|
||||||
if (medium_info.data_version_ < DATA_VERSION_4_2_0_0) {
|
|
||||||
medium_info.medium_compat_version_ = ObMediumCompactionInfo::MEDIUM_COMPAT_VERSION;
|
|
||||||
} else {
|
|
||||||
medium_info.medium_compat_version_ = ObMediumCompactionInfo::MEDIUM_COMPAT_VERSION_V2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (OB_FAIL(choose_medium_scn[is_major](*this, ls_, *tablet, merge_reason, allocator_, medium_info, result, schema_version))) {
|
if (OB_FAIL(choose_medium_scn[is_major](*this, ls_, *tablet, merge_reason, allocator_, medium_info, result, schema_version))) {
|
||||||
if (OB_NO_NEED_MERGE != ret) {
|
if (OB_NO_NEED_MERGE != ret) {
|
||||||
LOG_WARN("failed to choose medium snapshot", K(ret), KPC(this));
|
LOG_WARN("failed to choose medium snapshot", K(ret), KPC(this));
|
||||||
}
|
}
|
||||||
} else if (medium_info.medium_snapshot_ <= max_sync_medium_scn) {
|
} else if (medium_info.medium_snapshot_ <= max_sync_medium_scn) {
|
||||||
|
// for standby -> primary cluster, new chosen medium_snapshot should larger than max_sync_medium_scn
|
||||||
ret = OB_NO_NEED_MERGE;
|
ret = OB_NO_NEED_MERGE;
|
||||||
} else if (is_major) {
|
} else if (is_major) {
|
||||||
// do nothing
|
// do nothing
|
||||||
} else if (OB_FAIL(get_max_reserved_snapshot(max_reserved_snapshot))) {
|
} else if (OB_FAIL(get_max_reserved_snapshot(max_reserved_snapshot))) {
|
||||||
LOG_WARN("failed to get multi_version_start", K(ret), KPC(this));
|
LOG_WARN("failed to get multi_version_start", K(ret), KPC(this));
|
||||||
} else if (medium_info.medium_snapshot_ < max_reserved_snapshot &&
|
} else if (medium_info.medium_snapshot_ < max_reserved_snapshot
|
||||||
OB_FAIL(choose_new_medium_snapshot(max_reserved_snapshot, medium_info, result))) {
|
&& OB_FAIL(choose_new_medium_snapshot(max_reserved_snapshot, medium_info, result))) {
|
||||||
// chosen medium snapshot is far too old
|
// chosen medium snapshot is far too old
|
||||||
LOG_WARN("failed to choose new medium snapshot", KR(ret), K(max_reserved_snapshot), K(medium_info));
|
LOG_WARN("failed to choose new medium snapshot", KR(ret), K(max_reserved_snapshot), K(medium_info));
|
||||||
} else if (OB_FAIL(choose_medium_schema_version(allocator_, medium_info.medium_snapshot_, *tablet, schema_version))) {
|
} else if (OB_FAIL(choose_medium_schema_version(allocator_, medium_info.medium_snapshot_, *tablet, schema_version))) {
|
||||||
@ -545,13 +546,10 @@ int ObMediumCompactionScheduleFunc::decide_medium_snapshot(
|
|||||||
if (OB_TABLE_IS_DELETED == ret) {
|
if (OB_TABLE_IS_DELETED == ret) {
|
||||||
ret = OB_SUCCESS;
|
ret = OB_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
LOG_WARN("failed to prepare medium info", K(ret), K(result));
|
LOG_WARN("failed to prepare medium info", K(ret), K(result), K(schema_version));
|
||||||
}
|
}
|
||||||
} else if (OB_FAIL(submit_medium_clog(medium_info))) {
|
} else if (OB_FAIL(submit_medium_clog(medium_info))) {
|
||||||
LOG_WARN("failed to submit medium clog and update inner table", K(ret), KPC(this));
|
LOG_WARN("failed to submit medium clog and update inner table", K(ret), KPC(this));
|
||||||
} else if (OB_TMP_FAIL(ls_.tablet_freeze(tablet_id, true/*is_sync*/))) {
|
|
||||||
// need to freeze memtable with MediumCompactionInfo
|
|
||||||
LOG_WARN("failed to freeze tablet", K(tmp_ret), KPC(this));
|
|
||||||
}
|
}
|
||||||
// delete tablet_id in ObLSReservedSnapshotMgr even if submit clog or update inner table failed
|
// delete tablet_id in ObLSReservedSnapshotMgr even if submit clog or update inner table failed
|
||||||
if (OB_TMP_FAIL(ls_.del_dependent_medium_tablet(tablet_id))) {
|
if (OB_TMP_FAIL(ls_.del_dependent_medium_tablet(tablet_id))) {
|
||||||
@ -1234,5 +1232,26 @@ int ObMediumCompactionScheduleFunc::check_need_merge_and_schedule(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ObMediumCompactionScheduleFunc::get_max_sync_medium_scn(
|
||||||
|
const ObTablet &tablet,
|
||||||
|
const ObMediumCompactionInfoList &medium_list,
|
||||||
|
int64_t &max_sync_medium_scn)
|
||||||
|
{
|
||||||
|
int ret = OB_SUCCESS;
|
||||||
|
max_sync_medium_scn = 0;
|
||||||
|
int64_t max_sync_medium_scn_on_tablet = 0;
|
||||||
|
int64_t max_sync_medium_scn_from_list = 0;
|
||||||
|
if (OB_FAIL(tablet.get_max_sync_medium_scn(max_sync_medium_scn_on_tablet))) {
|
||||||
|
LOG_WARN("failed to get max sync medium scn from tablet", KR(ret), K(tablet));
|
||||||
|
} else if (OB_FAIL(medium_list.get_max_sync_medium_scn(max_sync_medium_scn_from_list))) {
|
||||||
|
LOG_WARN("failed to get max sync medium scn from medium_list", KR(ret), K(medium_list));
|
||||||
|
} else {
|
||||||
|
max_sync_medium_scn = MAX(max_sync_medium_scn_on_tablet, max_sync_medium_scn_from_list);
|
||||||
|
LOG_TRACE("get max sync medium scn", KR(ret), K(max_sync_medium_scn), K(max_sync_medium_scn_on_tablet),
|
||||||
|
K(max_sync_medium_scn_from_list));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
} //namespace compaction
|
} //namespace compaction
|
||||||
} // namespace oceanbase
|
} // namespace oceanbase
|
||||||
|
|||||||
@ -48,6 +48,10 @@ public:
|
|||||||
ObMediumCompactionInfo::ObCompactionType &compaction_type,
|
ObMediumCompactionInfo::ObCompactionType &compaction_type,
|
||||||
int64_t &schedule_scn);
|
int64_t &schedule_scn);
|
||||||
static int get_palf_role(const share::ObLSID &ls_id, ObRole &role);
|
static int get_palf_role(const share::ObLSID &ls_id, ObRole &role);
|
||||||
|
static int get_max_sync_medium_scn(
|
||||||
|
const ObTablet &tablet,
|
||||||
|
const ObMediumCompactionInfoList &medium_list,
|
||||||
|
int64_t &max_sync_medium_scn);
|
||||||
static int get_table_schema_to_merge(
|
static int get_table_schema_to_merge(
|
||||||
ObMultiVersionSchemaService &schema_service,
|
ObMultiVersionSchemaService &schema_service,
|
||||||
const ObTablet &tablet,
|
const ObTablet &tablet,
|
||||||
@ -56,10 +60,8 @@ public:
|
|||||||
ObMediumCompactionInfo &medium_info);
|
ObMediumCompactionInfo &medium_info);
|
||||||
|
|
||||||
int schedule_next_medium_for_leader(const int64_t major_snapshot, ObTenantTabletScheduler::ObScheduleStatistics &schedule_stat);
|
int schedule_next_medium_for_leader(const int64_t major_snapshot, ObTenantTabletScheduler::ObScheduleStatistics &schedule_stat);
|
||||||
|
|
||||||
int decide_medium_snapshot(
|
int decide_medium_snapshot(
|
||||||
const bool is_major,
|
const ObAdaptiveMergePolicy::AdaptiveMergeReason merge_reason);
|
||||||
const ObAdaptiveMergePolicy::AdaptiveMergeReason merge_reason = ObAdaptiveMergePolicy::AdaptiveMergeReason::NONE);
|
|
||||||
|
|
||||||
int check_medium_finish(const ObLSLocality &ls_locality);
|
int check_medium_finish(const ObLSLocality &ls_locality);
|
||||||
|
|
||||||
@ -149,6 +151,9 @@ protected:
|
|||||||
const ObTabletID &tablet_id,
|
const ObTabletID &tablet_id,
|
||||||
const int64_t schema_version,
|
const int64_t schema_version,
|
||||||
uint64_t &table_id);
|
uint64_t &table_id);
|
||||||
|
int get_adaptive_reason(
|
||||||
|
const int64_t schedule_major_snapshot,
|
||||||
|
ObAdaptiveMergePolicy::AdaptiveMergeReason &adaptive_merge_reason);
|
||||||
static const int64_t DEFAULT_SCHEDULE_MEDIUM_INTERVAL = 60L * 1000L * 1000L; // 60s
|
static const int64_t DEFAULT_SCHEDULE_MEDIUM_INTERVAL = 60L * 1000L * 1000L; // 60s
|
||||||
static constexpr double SCHEDULE_RANGE_INC_ROW_COUNT_PERCENRAGE_THRESHOLD = 0.2;
|
static constexpr double SCHEDULE_RANGE_INC_ROW_COUNT_PERCENRAGE_THRESHOLD = 0.2;
|
||||||
static const int64_t SCHEDULE_RANGE_ROW_COUNT_THRESHOLD = 1000 * 1000L; // 100w
|
static const int64_t SCHEDULE_RANGE_ROW_COUNT_THRESHOLD = 1000 * 1000L; // 100w
|
||||||
|
|||||||
@ -359,7 +359,7 @@ const char *ObMediumCompactionInfo::get_compaction_type_str(enum ObCompactionTyp
|
|||||||
}
|
}
|
||||||
|
|
||||||
ObMediumCompactionInfo::ObMediumCompactionInfo()
|
ObMediumCompactionInfo::ObMediumCompactionInfo()
|
||||||
: medium_compat_version_(MEDIUM_COMPAT_VERSION_V2),
|
: medium_compat_version_(MEDIUM_COMPAT_VERSION_V3),
|
||||||
compaction_type_(COMPACTION_TYPE_MAX),
|
compaction_type_(COMPACTION_TYPE_MAX),
|
||||||
contain_parallel_range_(false),
|
contain_parallel_range_(false),
|
||||||
medium_merge_reason_(ObAdaptiveMergePolicy::NONE),
|
medium_merge_reason_(ObAdaptiveMergePolicy::NONE),
|
||||||
@ -409,6 +409,28 @@ int ObMediumCompactionInfo::init(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ObMediumCompactionInfo::init_data_version()
|
||||||
|
{
|
||||||
|
int ret = OB_SUCCESS;
|
||||||
|
uint64_t compat_version = 0;
|
||||||
|
if (OB_FAIL(GET_MIN_DATA_VERSION(MTL_ID(), compat_version))) {
|
||||||
|
LOG_WARN("fail to get data version", K(ret));
|
||||||
|
} else if (OB_UNLIKELY(compat_version < DATA_VERSION_4_1_0_0)) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN("invalid data version to schedule medium compaction", K(ret), K(compat_version));
|
||||||
|
} else {
|
||||||
|
data_version_ = compat_version;
|
||||||
|
if (compat_version < DATA_VERSION_4_2_0_0) {
|
||||||
|
medium_compat_version_ = ObMediumCompactionInfo::MEDIUM_COMPAT_VERSION;
|
||||||
|
} else if (compat_version < DATA_VERSION_4_2_1_0) {
|
||||||
|
medium_compat_version_ = ObMediumCompactionInfo::MEDIUM_COMPAT_VERSION_V2;
|
||||||
|
} else {
|
||||||
|
medium_compat_version_ = ObMediumCompactionInfo::MEDIUM_COMPAT_VERSION_V3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
bool ObMediumCompactionInfo::is_valid() const
|
bool ObMediumCompactionInfo::is_valid() const
|
||||||
{
|
{
|
||||||
return COMPACTION_TYPE_MAX != compaction_type_
|
return COMPACTION_TYPE_MAX != compaction_type_
|
||||||
@ -417,7 +439,7 @@ bool ObMediumCompactionInfo::is_valid() const
|
|||||||
&& storage_schema_.is_valid()
|
&& storage_schema_.is_valid()
|
||||||
&& parallel_merge_info_.is_valid()
|
&& parallel_merge_info_.is_valid()
|
||||||
&& (MEDIUM_COMPAT_VERSION == medium_compat_version_
|
&& (MEDIUM_COMPAT_VERSION == medium_compat_version_
|
||||||
|| (MEDIUM_COMPAT_VERSION_V2 == medium_compat_version_ && last_medium_snapshot_ != 0));
|
|| (MEDIUM_COMPAT_VERSION_V2 <= medium_compat_version_ && last_medium_snapshot_ != 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObMediumCompactionInfo::reset()
|
void ObMediumCompactionInfo::reset()
|
||||||
@ -437,6 +459,19 @@ void ObMediumCompactionInfo::reset()
|
|||||||
parallel_merge_info_.destroy();
|
parallel_merge_info_.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ObMediumCompactionInfo::should_throw_for_standby_cluster() const
|
||||||
|
{
|
||||||
|
bool bret = false;
|
||||||
|
if (medium_compat_version_ < MEDIUM_COMPAT_VERSION_V3) {
|
||||||
|
// for old version medium, should throw if cluster_id is different
|
||||||
|
bret = !cluster_id_equal() && is_medium_compaction();
|
||||||
|
} else {
|
||||||
|
// for new version medium, all medium should be kept
|
||||||
|
bret = false;
|
||||||
|
}
|
||||||
|
return bret;
|
||||||
|
}
|
||||||
|
|
||||||
int ObMediumCompactionInfo::gene_parallel_info(
|
int ObMediumCompactionInfo::gene_parallel_info(
|
||||||
ObIAllocator &allocator,
|
ObIAllocator &allocator,
|
||||||
ObArrayArray<ObStoreRange> ¶l_range)
|
ObArrayArray<ObStoreRange> ¶l_range)
|
||||||
@ -475,7 +510,7 @@ int ObMediumCompactionInfo::serialize(char *buf, const int64_t buf_len, int64_t
|
|||||||
OB_UNIS_ENCODE,
|
OB_UNIS_ENCODE,
|
||||||
parallel_merge_info_);
|
parallel_merge_info_);
|
||||||
}
|
}
|
||||||
if (OB_SUCC(ret) && MEDIUM_COMPAT_VERSION_V2 == medium_compat_version_) {
|
if (OB_SUCC(ret) && MEDIUM_COMPAT_VERSION_V2 <= medium_compat_version_) {
|
||||||
LST_DO_CODE(
|
LST_DO_CODE(
|
||||||
OB_UNIS_ENCODE,
|
OB_UNIS_ENCODE,
|
||||||
last_medium_snapshot_);
|
last_medium_snapshot_);
|
||||||
@ -512,7 +547,7 @@ int ObMediumCompactionInfo::deserialize(
|
|||||||
clear_parallel_range();
|
clear_parallel_range();
|
||||||
LOG_DEBUG("ObMediumCompactionInfo::deserialize", K(ret), K(buf), K(data_len), K(pos));
|
LOG_DEBUG("ObMediumCompactionInfo::deserialize", K(ret), K(buf), K(data_len), K(pos));
|
||||||
}
|
}
|
||||||
if (OB_SUCC(ret) && MEDIUM_COMPAT_VERSION_V2 == medium_compat_version_) {
|
if (OB_SUCC(ret) && MEDIUM_COMPAT_VERSION_V2 <= medium_compat_version_) {
|
||||||
LST_DO_CODE(
|
LST_DO_CODE(
|
||||||
OB_UNIS_DECODE,
|
OB_UNIS_DECODE,
|
||||||
last_medium_snapshot_);
|
last_medium_snapshot_);
|
||||||
@ -534,7 +569,7 @@ int64_t ObMediumCompactionInfo::get_serialize_size() const
|
|||||||
if (contain_parallel_range_) {
|
if (contain_parallel_range_) {
|
||||||
LST_DO_CODE(OB_UNIS_ADD_LEN, parallel_merge_info_);
|
LST_DO_CODE(OB_UNIS_ADD_LEN, parallel_merge_info_);
|
||||||
}
|
}
|
||||||
if (MEDIUM_COMPAT_VERSION_V2 == medium_compat_version_) {
|
if (MEDIUM_COMPAT_VERSION_V2 <= medium_compat_version_) {
|
||||||
LST_DO_CODE(
|
LST_DO_CODE(
|
||||||
OB_UNIS_ADD_LEN,
|
OB_UNIS_ADD_LEN,
|
||||||
last_medium_snapshot_);
|
last_medium_snapshot_);
|
||||||
|
|||||||
@ -180,6 +180,7 @@ public:
|
|||||||
|
|
||||||
int assign(ObIAllocator &allocator, const ObMediumCompactionInfo &medium_info);
|
int assign(ObIAllocator &allocator, const ObMediumCompactionInfo &medium_info);
|
||||||
int init(ObIAllocator &allocator, const ObMediumCompactionInfo &medium_info);
|
int init(ObIAllocator &allocator, const ObMediumCompactionInfo &medium_info);
|
||||||
|
int init_data_version();
|
||||||
int gene_parallel_info(
|
int gene_parallel_info(
|
||||||
ObIAllocator &allocator,
|
ObIAllocator &allocator,
|
||||||
common::ObArrayArray<ObStoreRange> ¶l_range);
|
common::ObArrayArray<ObStoreRange> ¶l_range);
|
||||||
@ -197,6 +198,7 @@ public:
|
|||||||
bool is_valid() const;
|
bool is_valid() const;
|
||||||
bool from_cur_cluster() const { return cluster_id_ == GCONF.cluster_id && tenant_id_ == MTL_ID(); }
|
bool from_cur_cluster() const { return cluster_id_ == GCONF.cluster_id && tenant_id_ == MTL_ID(); }
|
||||||
bool cluster_id_equal() const { return cluster_id_ == GCONF.cluster_id; } // for compat
|
bool cluster_id_equal() const { return cluster_id_ == GCONF.cluster_id; } // for compat
|
||||||
|
bool should_throw_for_standby_cluster() const;
|
||||||
// serialize & deserialize
|
// serialize & deserialize
|
||||||
int serialize(char *buf, const int64_t buf_len, int64_t &pos) const;
|
int serialize(char *buf, const int64_t buf_len, int64_t &pos) const;
|
||||||
int deserialize(
|
int deserialize(
|
||||||
@ -210,8 +212,8 @@ public:
|
|||||||
int64_t to_string(char* buf, const int64_t buf_len) const;
|
int64_t to_string(char* buf, const int64_t buf_len) const;
|
||||||
public:
|
public:
|
||||||
static const int64_t MEDIUM_COMPAT_VERSION = 1;
|
static const int64_t MEDIUM_COMPAT_VERSION = 1;
|
||||||
static const int64_t MEDIUM_COMPAT_VERSION_V2 = 2;
|
static const int64_t MEDIUM_COMPAT_VERSION_V2 = 2; // for add last_medium_snapshot_
|
||||||
|
static const int64_t MEDIUM_COMPAT_VERSION_V3 = 3; // for stanby tenant, not throw medium info
|
||||||
private:
|
private:
|
||||||
static const int32_t SCS_ONE_BIT = 1;
|
static const int32_t SCS_ONE_BIT = 1;
|
||||||
static const int32_t SCS_RESERVED_BITS = 32;
|
static const int32_t SCS_RESERVED_BITS = 32;
|
||||||
|
|||||||
@ -235,8 +235,7 @@ int ObTabletMediumCompactionInfoRecorder::inner_replay_clog(
|
|||||||
ObMediumCompactionInfo replay_medium_info;
|
ObMediumCompactionInfo replay_medium_info;
|
||||||
if (OB_FAIL(replay_medium_info.deserialize(tmp_allocator, buf, size, pos))) {
|
if (OB_FAIL(replay_medium_info.deserialize(tmp_allocator, buf, size, pos))) {
|
||||||
LOG_WARN("failed to deserialize medium compaction info", K(ret));
|
LOG_WARN("failed to deserialize medium compaction info", K(ret));
|
||||||
} else if (!replay_medium_info.cluster_id_equal()
|
} else if (replay_medium_info.should_throw_for_standby_cluster()) {
|
||||||
&& replay_medium_info.is_medium_compaction()) {
|
|
||||||
// throw medium compaction clog from other cluster
|
// throw medium compaction clog from other cluster
|
||||||
ret = OB_NO_NEED_UPDATE;
|
ret = OB_NO_NEED_UPDATE;
|
||||||
} else { // new mds path
|
} else { // new mds path
|
||||||
@ -661,5 +660,20 @@ void ObMediumCompactionInfoList::gene_info(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ObMediumCompactionInfoList::get_max_sync_medium_scn(int64_t &max_sync_medium_scn) const
|
||||||
|
{
|
||||||
|
int ret = OB_SUCCESS;
|
||||||
|
max_sync_medium_scn = 0;
|
||||||
|
if (OB_UNLIKELY(!is_valid())) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN("medium list is invalid", KR(ret), KPC(this));
|
||||||
|
} else if (FALSE_IT(max_sync_medium_scn = get_last_compaction_scn())) {
|
||||||
|
} else if (!medium_info_list_.is_empty()) {
|
||||||
|
max_sync_medium_scn = MAX(max_sync_medium_scn,
|
||||||
|
((ObMediumCompactionInfo *)medium_info_list_.get_last())->medium_snapshot_);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
} //namespace compaction
|
} //namespace compaction
|
||||||
} // namespace oceanbase
|
} // namespace oceanbase
|
||||||
|
|||||||
@ -131,6 +131,7 @@ public:
|
|||||||
{
|
{
|
||||||
return extra_info_;
|
return extra_info_;
|
||||||
}
|
}
|
||||||
|
int get_max_sync_medium_scn(int64_t &max_received_medium_scn) const;
|
||||||
|
|
||||||
// serialize & deserialize
|
// serialize & deserialize
|
||||||
int serialize(char *buf, const int64_t buf_len, int64_t &pos) const;
|
int serialize(char *buf, const int64_t buf_len, int64_t &pos) const;
|
||||||
|
|||||||
@ -30,6 +30,7 @@
|
|||||||
#include "observer/omt/ob_tenant_config_mgr.h"
|
#include "observer/omt/ob_tenant_config_mgr.h"
|
||||||
#include "share/scn.h"
|
#include "share/scn.h"
|
||||||
#include "storage/compaction/ob_tenant_tablet_scheduler.h"
|
#include "storage/compaction/ob_tenant_tablet_scheduler.h"
|
||||||
|
#include "storage/compaction/ob_medium_compaction_func.h"
|
||||||
|
|
||||||
using namespace oceanbase;
|
using namespace oceanbase;
|
||||||
using namespace common;
|
using namespace common;
|
||||||
@ -430,7 +431,12 @@ int ObPartitionMergePolicy::get_boundary_snapshot_version(
|
|||||||
}
|
}
|
||||||
|
|
||||||
int64_t max_medium_scn = 0;
|
int64_t max_medium_scn = 0;
|
||||||
if (OB_FAIL(tablet.get_max_sync_medium_scn(max_medium_scn))) {
|
ObArenaAllocator allocator("GetMediumList", OB_MALLOC_NORMAL_BLOCK_SIZE, MTL_ID());
|
||||||
|
const compaction::ObMediumCompactionInfoList *medium_list = nullptr;
|
||||||
|
if (OB_FAIL(tablet.read_medium_info_list(allocator, medium_list))) {
|
||||||
|
LOG_WARN("failed to read medium info list", K(ret), KPC(medium_list));
|
||||||
|
} else if (OB_FAIL(compaction::ObMediumCompactionScheduleFunc::get_max_sync_medium_scn(
|
||||||
|
tablet, *medium_list, max_medium_scn))) {
|
||||||
LOG_WARN("failed to get max medium snapshot", K(ret), K(tablet));
|
LOG_WARN("failed to get max medium snapshot", K(ret), K(tablet));
|
||||||
} else {
|
} else {
|
||||||
min_snapshot = max(min_snapshot, max_medium_scn);
|
min_snapshot = max(min_snapshot, max_medium_scn);
|
||||||
@ -941,9 +947,8 @@ int ObPartitionMergePolicy::check_need_medium_merge(
|
|||||||
|
|
||||||
if (OB_FAIL(tablet.fetch_table_store(table_store_wrapper))) {
|
if (OB_FAIL(tablet.fetch_table_store(table_store_wrapper))) {
|
||||||
LOG_WARN("fail to fetch table store", K(ret));
|
LOG_WARN("fail to fetch table store", K(ret));
|
||||||
} else if (FALSE_IT(last_major =
|
} else if (OB_ISNULL(last_major =
|
||||||
table_store_wrapper.get_member()->get_major_sstables().get_boundary_table(true/*last*/))) {
|
table_store_wrapper.get_member()->get_major_sstables().get_boundary_table(true/*last*/))) {
|
||||||
} else if (nullptr == last_major) {
|
|
||||||
// no major, no medium
|
// no major, no medium
|
||||||
} else {
|
} else {
|
||||||
need_merge = last_major->get_snapshot_version() < medium_snapshot;
|
need_merge = last_major->get_snapshot_version() < medium_snapshot;
|
||||||
@ -986,8 +991,7 @@ int ObPartitionMergePolicy::check_need_medium_merge(
|
|||||||
tablet_id,
|
tablet_id,
|
||||||
ObSuspectInfoType::SUSPECT_CANT_MAJOR_MERGE,
|
ObSuspectInfoType::SUSPECT_CANT_MAJOR_MERGE,
|
||||||
medium_snapshot, static_cast<int64_t>(is_tablet_data_status_complete),
|
medium_snapshot, static_cast<int64_t>(is_tablet_data_status_complete),
|
||||||
static_cast<int64_t>(need_force_freeze),
|
static_cast<int64_t>(need_force_freeze)))) {
|
||||||
tablet.get_tablet_meta().max_serialized_medium_scn_))) {
|
|
||||||
LOG_WARN("failed to add suspect info", K(tmp_ret));
|
LOG_WARN("failed to add suspect info", K(tmp_ret));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1269,7 +1273,8 @@ const char * ObAdaptiveMergeReasonStr[] = {
|
|||||||
"LOAD_DATA_SCENE",
|
"LOAD_DATA_SCENE",
|
||||||
"TOMBSTONE_SCENE",
|
"TOMBSTONE_SCENE",
|
||||||
"INEFFICIENT_QUERY",
|
"INEFFICIENT_QUERY",
|
||||||
"FREQUENT_WRITE"
|
"FREQUENT_WRITE",
|
||||||
|
"TENANT_MAJOR"
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* ObAdaptiveMergePolicy::merge_reason_to_str(const int64_t merge_reason)
|
const char* ObAdaptiveMergePolicy::merge_reason_to_str(const int64_t merge_reason)
|
||||||
|
|||||||
@ -218,6 +218,7 @@ public:
|
|||||||
TOMBSTONE_SCENE = 2,
|
TOMBSTONE_SCENE = 2,
|
||||||
INEFFICIENT_QUERY = 3,
|
INEFFICIENT_QUERY = 3,
|
||||||
FREQUENT_WRITE = 4,
|
FREQUENT_WRITE = 4,
|
||||||
|
TENANT_MAJOR = 5,
|
||||||
INVALID_REASON
|
INVALID_REASON
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1183,7 +1183,11 @@ int ObTabletMergeCtx::try_swap_tablet_handle()
|
|||||||
const ObTabletMapKey key(param_.ls_id_, param_.tablet_id_);
|
const ObTabletMapKey key(param_.ls_id_, param_.tablet_id_);
|
||||||
if (OB_FAIL(MTL(ObTenantMetaMemMgr*)->get_tablet_with_allocator(
|
if (OB_FAIL(MTL(ObTenantMetaMemMgr*)->get_tablet_with_allocator(
|
||||||
WashTabletPriority::WTP_LOW, key, allocator_, tablet_handle_, true/*force_alloc_new*/))) {
|
WashTabletPriority::WTP_LOW, key, allocator_, tablet_handle_, true/*force_alloc_new*/))) {
|
||||||
LOG_WARN("failed to get alloc tablet handle", K(ret), K(key));
|
if (OB_ENTRY_NOT_EXIST == ret) {
|
||||||
|
ret = OB_TABLET_NOT_EXIST;
|
||||||
|
} else {
|
||||||
|
LOG_WARN("failed to get alloc tablet handle", K(ret), K(key));
|
||||||
|
}
|
||||||
} else if (OB_FAIL(inner_init_for_medium())) {
|
} else if (OB_FAIL(inner_init_for_medium())) {
|
||||||
LOG_WARN("failed to init for medium", K(ret), K(param_));
|
LOG_WARN("failed to init for medium", K(ret), K(param_));
|
||||||
} else if (OB_FAIL(tablet_handle_.get_obj()->clear_memtables_on_table_store())) {
|
} else if (OB_FAIL(tablet_handle_.get_obj()->clear_memtables_on_table_store())) {
|
||||||
|
|||||||
@ -668,7 +668,8 @@ const char *ObProhibitScheduleMediumMap::ProhibitFlagStr[] = {
|
|||||||
"MEDIUM",
|
"MEDIUM",
|
||||||
};
|
};
|
||||||
ObProhibitScheduleMediumMap::ObProhibitScheduleMediumMap()
|
ObProhibitScheduleMediumMap::ObProhibitScheduleMediumMap()
|
||||||
: lock_(),
|
: transfer_flag_cnt_(0),
|
||||||
|
lock_(),
|
||||||
ls_id_map_()
|
ls_id_map_()
|
||||||
{
|
{
|
||||||
STATIC_ASSERT(static_cast<int64_t>(FLAG_MAX) == ARRAYSIZEOF(ProhibitFlagStr), "flag str len is mismatch");
|
STATIC_ASSERT(static_cast<int64_t>(FLAG_MAX) == ARRAYSIZEOF(ProhibitFlagStr), "flag str len is mismatch");
|
||||||
@ -739,6 +740,7 @@ int ObProhibitScheduleMediumMap::clear_flag(const ObLSID &ls_id, const ProhibitF
|
|||||||
|
|
||||||
void ObProhibitScheduleMediumMap::destroy()
|
void ObProhibitScheduleMediumMap::destroy()
|
||||||
{
|
{
|
||||||
|
transfer_flag_cnt_ = 0;
|
||||||
ls_id_map_.destroy();
|
ls_id_map_.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -922,10 +924,11 @@ int ObTenantTabletScheduler::schedule_tablet_meta_major_merge(
|
|||||||
if (OB_FAIL(tablet_handle.get_obj()->fetch_table_store(table_store_wrapper))) {
|
if (OB_FAIL(tablet_handle.get_obj()->fetch_table_store(table_store_wrapper))) {
|
||||||
LOG_WARN("fail to fetch table store", K(ret));
|
LOG_WARN("fail to fetch table store", K(ret));
|
||||||
} else if (FALSE_IT(last_major = table_store_wrapper.get_member()->get_major_sstables().get_boundary_table(true/*last*/))) {
|
} else if (FALSE_IT(last_major = table_store_wrapper.get_member()->get_major_sstables().get_boundary_table(true/*last*/))) {
|
||||||
} else if (OB_FAIL(tablet_handle.get_obj()->get_max_sync_medium_scn(max_sync_medium_scn))) {
|
|
||||||
LOG_WARN("failed to get max sync medium snapshot", K(ret), K(ls_id), K(tablet_id));
|
|
||||||
} else if (OB_FAIL(tablet_handle.get_obj()->read_medium_info_list(allocator, medium_list))) {
|
} else if (OB_FAIL(tablet_handle.get_obj()->read_medium_info_list(allocator, medium_list))) {
|
||||||
LOG_WARN("failed to read medium info list", K(ret), K(tablet_id));
|
LOG_WARN("failed to read medium info list", K(ret), K(tablet_id));
|
||||||
|
} else if (OB_FAIL(ObMediumCompactionScheduleFunc::get_max_sync_medium_scn(
|
||||||
|
*tablet_handle.get_obj(), *medium_list, max_sync_medium_scn))) {
|
||||||
|
LOG_WARN("failed to get max sync medium snapshot", K(ret), K(ls_id), K(tablet_id));
|
||||||
} else if ((nullptr != medium_list && medium_list->size() > 0)
|
} else if ((nullptr != medium_list && medium_list->size() > 0)
|
||||||
|| nullptr == last_major
|
|| nullptr == last_major
|
||||||
|| max_sync_medium_scn > last_major->get_snapshot_version()) {
|
|| max_sync_medium_scn > last_major->get_snapshot_version()) {
|
||||||
|
|||||||
@ -1077,7 +1077,7 @@ int ObStorageHATabletsBuilder::hold_local_reuse_sstable_(
|
|||||||
} else if (OB_FAIL(hold_local_complete_tablet_sstable_(tablet, tables_handle))) {
|
} else if (OB_FAIL(hold_local_complete_tablet_sstable_(tablet, tables_handle))) {
|
||||||
LOG_WARN("failed to hold local complete tablet sstable", K(ret), KP(tablet));
|
LOG_WARN("failed to hold local complete tablet sstable", K(ret), KP(tablet));
|
||||||
} else {
|
} else {
|
||||||
if (!storage_schema.is_valid()
|
if (!storage_schema.is_inited()
|
||||||
|| storage_schema.compare_schema_newer(*tablet_storage_schema)) {
|
|| storage_schema.compare_schema_newer(*tablet_storage_schema)) {
|
||||||
storage_schema.reset();
|
storage_schema.reset();
|
||||||
if (OB_FAIL(storage_schema.init(allocator, *tablet_storage_schema))) {
|
if (OB_FAIL(storage_schema.init(allocator, *tablet_storage_schema))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user