Files
oceanbase/src/rootserver/backup/ob_backup_base_service.h

82 lines
2.8 KiB
C++

// Copyright (c) 2021 OceanBase
// OceanBase 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_ROOTSERVER_OB_BACKUP_BASE_SERVICE_H_
#define OCEANBASE_ROOTSERVER_OB_BACKUP_BASE_SERVICE_H_
#include "lib/thread/thread_mgr_interface.h"
#include "rootserver/ob_tenant_thread_helper.h"
#include "lib/lock/ob_thread_cond.h"
#include "logservice/ob_log_base_type.h"
#include "storage/ls/ob_ls.h"
namespace oceanbase
{
namespace rootserver
{
class ObBackupBaseService : public lib::TGRunnable,
public logservice::ObIReplaySubHandler,
public logservice::ObIRoleChangeSubHandler,
public logservice::ObICheckpointSubHandler
{
public:
static const int64_t OB_MAX_IDLE_TIME = 60 * 1000 * 1000; // 1min
static const int64_t OB_MIDDLE_IDLE_TIME = 30 * 1000 * 1000; // 30s
static const int64_t OB_FALST_IDLE_TIME = 10 * 1000 * 1000; // 1s
public:
ObBackupBaseService();
virtual ~ObBackupBaseService();
public:
int create(const char* thread_name, ObBackupBaseService &tenant_thread, int32_t event_no);
virtual void run1() override final;
virtual void run2() = 0;
virtual void destroy();
int start();
void stop();
void wait();
void idle();
void wakeup();
void mtl_thread_stop();
void mtl_thread_wait();
void set_idle_time(const int64_t interval_time_us) { interval_idle_time_us_ = interval_time_us; }
int64_t get_idle_time() const { return interval_idle_time_us_; }
// role change
int check_leader();
virtual void switch_to_follower_forcedly() override;
virtual int switch_to_leader() override;
virtual int switch_to_follower_gracefully() override;
virtual int resume_leader() override;
// backup service no need to use the above func
virtual int replay(const void *buffer,
const int64_t nbytes,
const palf::LSN &lsn,
const share::SCN &scn) override final;
virtual share::SCN get_rec_scn() override final { return share::SCN::max_scn(); }
virtual int flush(share::SCN &scn) override final;
private:
bool is_created_;
int tg_id_;
int64_t proposal_id_;
int64_t wakeup_cnt_;
int64_t interval_idle_time_us_;
common::ObThreadCond thread_cond_;
const char* thread_name_;
private:
DISALLOW_COPY_AND_ASSIGN(ObBackupBaseService);
};
}
}
#endif /* !OCEANBASE_ROOTSERVER_OB_BACKUP_BASE_SERVICE_H_ */