Files
oceanbase/src/archive/ob_ilog_fetcher.h
gm 4a92b6d7df reformat source code
according to code styles, 'AccessModifierOffset' should be -2.
2021-06-17 10:40:36 +08:00

123 lines
4.4 KiB
C++

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#ifndef OCEANBASE_ARCHIVE_OB_ILOG_FETCHER_H_
#define OCEANBASE_ARCHIVE_OB_ILOG_FETCHER_H_
#include "lib/utility/ob_print_utils.h" // TO_STRING_KV
#include "lib/allocator/ob_small_allocator.h"
#include "ob_log_archive_struct.h"
#include "ob_archive_log_wrapper.h" // ObArchiveLogWrapper
#include "ob_archive_pg_mgr.h"
#include "ob_ilog_fetch_task_mgr.h"
#include "share/ob_thread_pool.h"
#include "clog/ob_log_define.h"
namespace oceanbase {
namespace archive {
using oceanbase::clog::ObGetCursorResult;
using oceanbase::clog::ObILogEngine;
class StartArchiveHelper;
class ObArCLogSplitEngine;
class ObArchiveAllocator;
class ObArchiveIlogFetcher : public share::ObThreadPool {
// only single thread work mode
static const int64_t ARCHIVE_ILOG_FETCHER_NUM = 1;
static const int64_t WAIT_TIME_AFTER_EAGAIN = 100;
public:
ObArchiveIlogFetcher();
virtual ~ObArchiveIlogFetcher();
public:
int start();
void stop();
void wait();
int init(ObArchiveAllocator* allocator, ObILogEngine* log_engine, ObArchiveLogWrapper* log_wrapper,
ObArchivePGMgr* pg_mgr, ObArCLogSplitEngine* clog_split_engine, ObArchiveIlogFetchTaskMgr* ilog_fetch_mgr);
void destroy();
public:
int build_archive_clog_task(const uint64_t start_log_id, ObGetCursorResult& cursor_result, ObPGArchiveCLogTask& task,
PGFetchTask& fetch_task);
void notify_start_archive_round();
void notify_stop();
int generate_and_submit_checkpoint_task(const common::ObPartitionKey& pg_key, const uint64_t log_id,
const int64_t log_submit_ts, const int64_t checkpoint_ts);
int generate_and_submit_pg_first_log(StartArchiveHelper& helper);
ObPGArchiveCLogTask* alloc_clog_split_task();
void free_clog_split_task(ObPGArchiveCLogTask* task);
int set_archive_round_info(const int64_t round, const int64_t incarnation);
void clear_archive_info();
private:
struct IlogPGClogTask;
void run1();
void do_thread_task_();
int get_pg_ilog_fetch_task_(PGFetchTask& task, bool& task_exist);
int construct_pg_next_ilog_fetch_task_(
PGFetchTask& fetch_task, ObPGArchiveTask& pg_archive_task, PGFetchTask& new_task);
int push_back_pg_ilog_fetch_task_(PGFetchTask& task);
int update_pg_split_progress_(
const uint64_t end_log_id, bool empty_task, ObPGArchiveTask& pg_archive_task, PGFetchTask& task);
int handle_ilog_fetch_task_(
PGFetchTask& task, ObPGArchiveTask& pg_archive_task, bool& empty_task, uint64_t& end_log_id);
int affirm_pg_log_consume_progress_(PGFetchTask& task, ObPGArchiveTask& pg_archive_task);
int update_ilog_fetch_info_(PGFetchTask& task, ObPGArchiveTask& pg_archive_task, uint64_t& end_log_id, bool& need_do);
int init_log_cursor_result_(const ObPGKey& pg_key, const int64_t arr_len, ObGetCursorResult& cursor_result);
int build_clog_cursor_(
PGFetchTask& fetch_task, const uint64_t min_log_id, const uint64_t max_log_id, ObPGArchiveCLogTask& task);
int init_clog_split_task_meta_info_(
const ObPGKey& pg_key, const uint64_t start_log_id, ObPGArchiveTask& pg_archive_task, ObPGArchiveCLogTask& task);
int consume_clog_task_(ObPGArchiveCLogTask*& task, file_id_t ilog_file_id = -1);
int check_and_consume_clog_task_(PGFetchTask& fetch_task, PGFetchTask& next_task);
void mark_fatal_error_(
const ObPGKey& pg_key, const int64_t epoch, const int64_t incarnation, const int64_t round, const int ret_code);
private:
bool inited_;
bool start_flag_;
int64_t log_archive_round_;
int64_t incarnation_;
file_id_t cur_consume_ilog_file_id_;
file_id_t cur_handle_ilog_file_id_;
ObILogEngine* log_engine_;
ObArchiveLogWrapper* log_wrapper_;
ObArchivePGMgr* pg_mgr_;
ObArCLogSplitEngine* clog_split_engine_;
ObArchiveIlogFetchTaskMgr* ilog_fetch_mgr_;
ObArchiveAllocator* allocator_;
private:
DISALLOW_COPY_AND_ASSIGN(ObArchiveIlogFetcher);
};
} // namespace archive
} // namespace oceanbase
#endif /* OCEANBASE_ARCHIVE_OB_ILOG_FETCHER_H_ */