restrict archive send task count for ls gc
This commit is contained in:
parent
72161fdd87
commit
eb7f5dea9e
@ -453,7 +453,6 @@ int ObArchiveFetcher::check_need_delay_(const ObArchiveLogFetchTask &task,
|
||||
bool &need_delay)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
bool data_enough = false;
|
||||
bool data_full = false;
|
||||
const ObLSID &id = task.get_ls_id();
|
||||
const ArchiveWorkStation &station = task.get_station();
|
||||
@ -477,9 +476,6 @@ int ObArchiveFetcher::check_need_delay_(const ObArchiveLogFetchTask &task,
|
||||
ARCHIVE_LOG(WARN, "get ls failed", K(id));
|
||||
} else if (OB_FAIL(handle.get_ls()->get_offline_scn(offline_scn))) {
|
||||
ARCHIVE_LOG(WARN, "get offline_scn failed", K(id));
|
||||
} else if (OB_UNLIKELY(offline_scn.is_valid())) {
|
||||
// if ls is offline, it should be archived as soon as possible
|
||||
need_delay = false;
|
||||
} else {
|
||||
GET_LS_TASK_CTX(ls_mgr_, id) {
|
||||
if (OB_FAIL(ls_archive_task->get_fetcher_progress(station, offset, fetch_scn, last_fetch_timestamp))) {
|
||||
@ -500,20 +496,22 @@ int ObArchiveFetcher::check_need_delay_(const ObArchiveLogFetchTask &task,
|
||||
ARCHIVE_LOG(TRACE, "archive_sender_ task status count more than ls archive task count, just wait",
|
||||
K(ls_archive_task_count), K(send_task_status_count), K(need_delay));
|
||||
} else {
|
||||
check_capacity_enough_(commit_lsn, cur_lsn, end_lsn, data_enough, data_full);
|
||||
check_capacity_enough_(commit_lsn, cur_lsn, end_lsn, data_full);
|
||||
if (data_full) {
|
||||
// although data buffer not enough, but data reaches the end of the block, do archive
|
||||
ARCHIVE_LOG(TRACE, "data buffer reach clog block end, do archive",
|
||||
K(id), K(station), K(end_lsn), K(commit_lsn));
|
||||
} else if (OB_UNLIKELY(offline_scn.is_valid())) {
|
||||
if (fetch_scn.is_valid() && fetch_scn >= offline_scn) {
|
||||
// if ls is offline and does not archive all, it should be archived as soon as possible
|
||||
need_delay = true;
|
||||
} else {
|
||||
need_delay = false;
|
||||
}
|
||||
} else if (! check_scn_enough_(id, new_block, cur_lsn, max_no_limit_lsn, base_scn, fetch_scn, last_fetch_timestamp)) {
|
||||
need_delay = true;
|
||||
ARCHIVE_LOG(TRACE, "scn not enough, need delay", K(id), K(station), K(new_block), K(cur_lsn),
|
||||
K(max_no_limit_lsn), K(base_scn), K(fetch_scn));
|
||||
} else if (! data_enough) {
|
||||
// data not enough to fill unit, just wait
|
||||
need_delay = true;
|
||||
ARCHIVE_LOG(TRACE, "data not enough, need delay", K(id), K(station), K(commit_lsn),
|
||||
K(cur_lsn), K(end_lsn), K(data_enough));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -525,12 +523,10 @@ int ObArchiveFetcher::check_need_delay_(const ObArchiveLogFetchTask &task,
|
||||
void ObArchiveFetcher::check_capacity_enough_(const LSN &commit_lsn,
|
||||
const LSN &cur_lsn,
|
||||
const LSN &end_lsn,
|
||||
bool &data_enough,
|
||||
bool &data_full)
|
||||
{
|
||||
// 已有足够大用以压缩加密单元或者到达归档文件尾(也是ob日志文件尾)
|
||||
data_full = end_lsn <= commit_lsn;
|
||||
data_enough = data_full || commit_lsn >= cur_lsn + unit_size_;
|
||||
}
|
||||
|
||||
bool ObArchiveFetcher::check_scn_enough_(const share::ObLSID &id,
|
||||
|
@ -139,7 +139,7 @@ private:
|
||||
|
||||
// 1.1.1 检查ob日志是否有产生满足处理单元大小的数据
|
||||
void check_capacity_enough_(const LSN &commit_lsn, const LSN &cur_lsn,
|
||||
const LSN &end_offset, bool &data_enough, bool &data_full);
|
||||
const LSN &end_offset, bool &data_full);
|
||||
|
||||
// 1.1.2 检查日志流落后程度是否需要触发归档
|
||||
bool check_scn_enough_(const share::ObLSID &id, const bool new_block, const palf::LSN &lsn,
|
||||
|
Loading…
x
Reference in New Issue
Block a user