try schedule more tablet
This commit is contained in:
		@ -53,7 +53,7 @@ int ObTabletMergeChecker::check_need_merge(const ObMergeType merge_type, const O
 | 
				
			|||||||
    } else if (!need_merge) {
 | 
					    } else if (!need_merge) {
 | 
				
			||||||
      ret = OB_NO_NEED_MERGE;
 | 
					      ret = OB_NO_NEED_MERGE;
 | 
				
			||||||
      LOG_INFO("tablet has no need to merge", K(ret), K(ls_id), K(tablet_id),
 | 
					      LOG_INFO("tablet has no need to merge", K(ret), K(ls_id), K(tablet_id),
 | 
				
			||||||
          "merge_type", merge_type_to_str(merge_type));
 | 
					          "merge_type", merge_type_to_str(merge_type), K(is_empty_shell));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1148,18 +1148,20 @@ int ObTenantTabletScheduler::schedule_ls_medium_merge(
 | 
				
			|||||||
      } else if (OB_FAIL(ObTabletMergeChecker::check_need_merge(ObMergeType::MEDIUM_MERGE, *tablet))) {
 | 
					      } else if (OB_FAIL(ObTabletMergeChecker::check_need_merge(ObMergeType::MEDIUM_MERGE, *tablet))) {
 | 
				
			||||||
        if (OB_NO_NEED_MERGE != ret) {
 | 
					        if (OB_NO_NEED_MERGE != ret) {
 | 
				
			||||||
          LOG_WARN("failed to check need merge", K(ret));
 | 
					          LOG_WARN("failed to check need merge", K(ret));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          ret = OB_SUCCESS;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      } else if (FALSE_IT(tablet_id = tablet->get_tablet_meta().tablet_id_)) {
 | 
					      } else if (FALSE_IT(tablet_id = tablet->get_tablet_meta().tablet_id_)) {
 | 
				
			||||||
      } else if (tablet_id.is_special_merge_tablet()) { // data tablet
 | 
					      } else if (tablet_id.is_special_merge_tablet()) { // data tablet
 | 
				
			||||||
        // do nothing
 | 
					        // do nothing
 | 
				
			||||||
 | 
					      } else if (OB_TMP_FAIL(tablet->fetch_table_store(table_store_wrapper))) {
 | 
				
			||||||
 | 
					        LOG_WARN("fail to fetch table store", K(tmp_ret));
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        ++schedule_tablet_cnt; // inc tablet cnt
 | 
					        ++schedule_tablet_cnt; // inc tablet cnt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ObMediumCompactionScheduleFunc func(ls, tablet_handle, weak_read_ts);
 | 
					        ObMediumCompactionScheduleFunc func(ls, tablet_handle, weak_read_ts);
 | 
				
			||||||
        ObITable *latest_major = nullptr;
 | 
					        ObITable *latest_major = nullptr;
 | 
				
			||||||
        if (OB_FAIL(tablet->fetch_table_store(table_store_wrapper))) {
 | 
					        if (FALSE_IT(latest_major =
 | 
				
			||||||
          LOG_WARN("fail to fetch table store", K(ret));
 | 
					 | 
				
			||||||
        } else if (FALSE_IT(latest_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 (OB_NOT_NULL(latest_major) && latest_major->get_snapshot_version() >= merge_version) {
 | 
					        } else if (OB_NOT_NULL(latest_major) && latest_major->get_snapshot_version() >= merge_version) {
 | 
				
			||||||
          tablet_merge_finish = true;
 | 
					          tablet_merge_finish = true;
 | 
				
			||||||
@ -1173,57 +1175,60 @@ int ObTenantTabletScheduler::schedule_ls_medium_merge(
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        ObArenaAllocator allocator;
 | 
					        if (OB_SUCCESS != tmp_ret) {
 | 
				
			||||||
        const compaction::ObMediumCompactionInfoList *medium_list = nullptr;
 | 
					        } else {
 | 
				
			||||||
        LOG_DEBUG("schedule tablet medium", K(ret), K(ls_id), K(tablet_id), K(tablet_merge_finish),
 | 
					          ObArenaAllocator allocator;
 | 
				
			||||||
            KPC(latest_major), K(merge_version), K(role), K(is_leader));
 | 
					          const compaction::ObMediumCompactionInfoList *medium_list = nullptr;
 | 
				
			||||||
        bool could_schedule_next_medium = true;
 | 
					          LOG_DEBUG("schedule tablet medium", K(ret), K(ls_id), K(tablet_id), K(tablet_merge_finish),
 | 
				
			||||||
        bool check_medium_finish = false;
 | 
					              KPC(latest_major), K(merge_version), K(role), K(is_leader));
 | 
				
			||||||
        ObTabletHandle new_handle;
 | 
					          bool could_schedule_next_medium = true;
 | 
				
			||||||
        if (!is_leader || OB_ISNULL(latest_major)) {
 | 
					          bool check_medium_finish = false;
 | 
				
			||||||
          // follower or no major: do nothing
 | 
					          ObTabletHandle new_handle;
 | 
				
			||||||
          could_schedule_next_medium = false;
 | 
					          if (!is_leader || OB_ISNULL(latest_major)) {
 | 
				
			||||||
        } else if (OB_FAIL(tablet_handle.get_obj()->read_medium_info_list(allocator, medium_list))) {
 | 
					            // follower or no major: do nothing
 | 
				
			||||||
          LOG_WARN("failed to read medium info list", K(ret), K(tablet_id));
 | 
					            could_schedule_next_medium = false;
 | 
				
			||||||
        } else if (medium_list->need_check_finish()) { // need check finished
 | 
					          } else if (OB_TMP_FAIL(tablet_handle.get_obj()->read_medium_info_list(allocator, medium_list))) {
 | 
				
			||||||
          if (OB_TMP_FAIL(func.check_medium_finish(ls_locality))) {
 | 
					            LOG_WARN("failed to read medium info list", K(tmp_ret), K(tablet_id));
 | 
				
			||||||
            LOG_WARN("failed to check medium finish", K(tmp_ret), K(ls_id), K(tablet_id));
 | 
					          } else if (medium_list->need_check_finish()) { // need check finished
 | 
				
			||||||
          } else if (FALSE_IT(check_medium_finish = true)) {
 | 
					            if (OB_TMP_FAIL(func.check_medium_finish(ls_locality))) {
 | 
				
			||||||
          } else if (FALSE_IT(func.get_tablet_handle(new_handle))) {
 | 
					              LOG_WARN("failed to check medium finish", K(tmp_ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
          } else if (ObTimeUtility::current_time_ns() <
 | 
					            } else if (FALSE_IT(check_medium_finish = true)) {
 | 
				
			||||||
              medium_list->get_wait_check_medium_scn() + WAIT_MEDIUM_CHECK_THRESHOLD) {
 | 
					            } else if (FALSE_IT(func.get_tablet_handle(new_handle))) {
 | 
				
			||||||
            // need wait 10 mins before schedule meta major
 | 
					            } else if (ObTimeUtility::current_time_ns() <
 | 
				
			||||||
          } else if (enable_adaptive_compaction && OB_TMP_FAIL(schedule_tablet_meta_major_merge(ls_handle, new_handle))) {
 | 
					                medium_list->get_wait_check_medium_scn() + WAIT_MEDIUM_CHECK_THRESHOLD) {
 | 
				
			||||||
            if (OB_SIZE_OVERFLOW != tmp_ret && OB_EAGAIN != tmp_ret) {
 | 
					              // need wait 10 mins before schedule meta major
 | 
				
			||||||
              LOG_WARN("failed to schedule tablet merge", K(tmp_ret), K(ls_id), K(tablet_id));
 | 
					            } else if (enable_adaptive_compaction && OB_TMP_FAIL(schedule_tablet_meta_major_merge(ls_handle, new_handle))) {
 | 
				
			||||||
 | 
					              if (OB_SIZE_OVERFLOW != tmp_ret && OB_EAGAIN != tmp_ret) {
 | 
				
			||||||
 | 
					                LOG_WARN("failed to schedule tablet merge", K(tmp_ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					          if (could_schedule_next_medium && could_major_merge
 | 
				
			||||||
        if (could_schedule_next_medium && could_major_merge
 | 
					              && (!tablet_merge_finish || enable_adaptive_compaction_ || check_medium_finish)
 | 
				
			||||||
            && (!tablet_merge_finish || enable_adaptive_compaction_ || check_medium_finish)
 | 
					              && allow_schedule_medium_flag_) {
 | 
				
			||||||
            && allow_schedule_medium_flag_) {
 | 
					            if (OB_TMP_FAIL(func.schedule_next_medium_for_leader(
 | 
				
			||||||
          if (OB_TMP_FAIL(func.schedule_next_medium_for_leader(
 | 
					                    tablet_merge_finish ? 0 : merge_version, schedule_stats_))) { // schedule another round
 | 
				
			||||||
              tablet_merge_finish ? 0 : merge_version, schedule_stats_))) { // schedule another round
 | 
					              if (OB_NOT_MASTER == tmp_ret) {
 | 
				
			||||||
            if (OB_NOT_MASTER == tmp_ret) {
 | 
					                is_leader = false;
 | 
				
			||||||
              is_leader = false;
 | 
					              } else {
 | 
				
			||||||
 | 
					                LOG_WARN("failed to schedule next medium", K(tmp_ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
              LOG_WARN("failed to schedule next medium", K(tmp_ret), K(ls_id), K(tablet_id));
 | 
					              schedule_stats_.schedule_cnt_++;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          } else {
 | 
					 | 
				
			||||||
            schedule_stats_.schedule_cnt_++;
 | 
					 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (could_major_merge && OB_TMP_FAIL(ObMediumCompactionScheduleFunc::schedule_tablet_medium_merge(
 | 
					          if (could_major_merge && OB_TMP_FAIL(ObMediumCompactionScheduleFunc::schedule_tablet_medium_merge(
 | 
				
			||||||
            ls,
 | 
					                  ls,
 | 
				
			||||||
            *tablet,
 | 
					                  *tablet,
 | 
				
			||||||
            major_frozen_scn,
 | 
					                  major_frozen_scn,
 | 
				
			||||||
            true/*scheduler_called*/))) {
 | 
					                  true/*scheduler_called*/))) {
 | 
				
			||||||
          if (OB_EAGAIN != ret) {
 | 
					            if (OB_EAGAIN != ret) {
 | 
				
			||||||
            LOG_WARN("failed to schedule medium", K(tmp_ret), K(ls_id), K(tablet_id));
 | 
					              LOG_WARN("failed to schedule medium", K(tmp_ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					          medium_ls_tablet_iter_.update_merge_finish(tablet_merge_finish);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        medium_ls_tablet_iter_.update_merge_finish(tablet_merge_finish);
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } // end of while
 | 
					    } // end of while
 | 
				
			||||||
    } // end of RLock allow_schedule_medium_lock_
 | 
					    } // end of RLock allow_schedule_medium_lock_
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user