提交 7205374e 编写于 作者: O obdev 提交者: wangzelin.wzl

fix backup delete switch tenant resource

上级 d87eec46
......@@ -13,6 +13,7 @@
#define USING_LOG_PREFIX RS
#include "ob_backup_task_scheduler.h"
#include "share/location_cache/ob_location_service.h"
#include "share/backup/ob_backup_data_table_operator.h"
#include "share/backup/ob_backup_clean_operator.h"
#include "share/ob_srv_rpc_proxy.h"
......@@ -931,7 +932,7 @@ int64_t ObBackupCleanLSTask::get_deep_copy_size() const
bool ObBackupCleanLSTask::can_execute_on_any_server() const
{
return true;
return false;
}
int ObBackupCleanLSTask::do_update_dst_and_doing_status_(common::ObMySQLProxy &sql_proxy, common::ObAddr &dst, share::ObTaskId &trace_id)
......@@ -944,6 +945,50 @@ int ObBackupCleanLSTask::do_update_dst_and_doing_status_(common::ObMySQLProxy &s
return ret;
}
int ObBackupCleanLSTask::set_optional_servers_()
{
int ret = OB_SUCCESS;
ObArray<ObBackupServer> servers;
uint64_t tenant_id = get_tenant_id();
share::ObLocationService *location_service = GCTX.location_service_;
int64_t cluster_id = GCONF.cluster_id;
share::ObLSID ls_id(share::ObLSID::SYS_LS_ID);
share::ObLSLocation location;
bool is_cache_hit = false;
if (OB_ISNULL(location_service)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("location_service ptr is null", K(ret));
} else if (OB_FAIL(location_service->get(cluster_id, tenant_id, ls_id, INT64_MAX/*expire_renew_time*/,
is_cache_hit, location))) {
LOG_WARN("failed to get location", K(ret), K(cluster_id), K(tenant_id), K(ls_id));
} else {
const common::ObIArray<ObLSReplicaLocation> &replica_array = location.get_replica_locations();
for (int i = 0; OB_SUCC(ret) && i < replica_array.count(); ++i) {
const ObLSReplicaLocation &replica = replica_array.at(i);
if (replica.is_valid()) {
ObBackupServer server;
server.set(replica.get_server(), 1/*high priority*/);
if (OB_FAIL(servers.push_back(server))) {
LOG_WARN("failed to push server", K(ret), K(server));
}
}
}
if (OB_SUCC(ret) && servers.empty()) {
ret = OB_EAGAIN;
LOG_WARN("no optional servers, retry_later", K(ret), K(*this));
}
}
if (OB_SUCC(ret) && OB_FAIL(set_optional_servers(servers))) {
LOG_WARN("failed to optional servers", K(ret));
} else {
FLOG_INFO("task optional servers are:", K(*this), K(servers));
}
return ret;
}
int ObBackupCleanLSTask::execute(obrpc::ObSrvRpcProxy &rpc_proxy) const
{
int ret = OB_SUCCESS;
......@@ -1008,7 +1053,9 @@ int ObBackupCleanLSTask::build(const ObBackupCleanTaskAttr &task_attr, const ObB
LOG_WARN("failed to assign backup path", K(ret), K(task_attr.backup_path_));
} else if (OB_FAIL(task_attr.get_backup_clean_id(id_))) {
LOG_WARN("failed to get task id", K(ret), K(task_attr));
}
} else if (OB_FAIL(set_optional_servers_())) {
LOG_WARN("failed to set optional servers", K(ret), K(task_attr));
}
}
return ret;
}
......
......@@ -385,6 +385,7 @@ public:
virtual int cancel(obrpc::ObSrvRpcProxy &rpc_proxy) const override;
private:
virtual int do_update_dst_and_doing_status_(common::ObMySQLProxy &sql_proxy, common::ObAddr &dst, share::ObTaskId &trace_id) override;
int set_optional_servers_();
public:
int build(const share::ObBackupCleanTaskAttr &task_attr, const share::ObBackupCleanLSTaskAttr &ls_attr);
INHERIT_TO_STRING_KV("ObBackupScheduleTask", ObBackupScheduleTask, K_(job_id), K_(incarnation_id), K_(id), K_(round_id),
......
......@@ -30,10 +30,6 @@ using namespace lib;
using namespace common;
using namespace share;
bool share::has_independ_inc_backup_set(const int64_t version)
{
return version >= OB_BACKUP_COMPATIBLE_VERSION_V2 && version < OB_BACKUP_COMPATIBLE_VERSION_MAX;
}
bool share::is_valid_backup_inner_table_version(const ObBackupInnerTableVersion &version)
{
return version > 0 && version < OB_BACKUP_INNER_TABLE_VMAX;
......
......@@ -33,16 +33,6 @@ namespace oceanbase
namespace share
{
enum ObBackupCompatibleVersion // used for data backup TODO(chongrong): delete it?
{
OB_BACKUP_COMPATIBLE_VERSION_V1 = 1, // since 2.2.60
OB_BACKUP_COMPATIBLE_VERSION_V2 = 2, // since 2.2.77
OB_BACKUP_COMPATIBLE_VERSION_V3 = 3, // since 3.1
OB_BACKUP_COMPATIBLE_VERSION_V4 = 4, // since 4.0
OB_BACKUP_COMPATIBLE_VERSION_MAX,
};
bool has_independ_inc_backup_set(const int64_t version);
// for log archive and data backup, exclude backup lease service inner table
enum ObBackupInnerTableVersion {
OB_BACKUP_INNER_TABLE_V1 = 1, // since 2.2.60
......
......@@ -33,21 +33,23 @@ int ObLSBackupCleanScheduler::schedule_backup_clean_dag(const obrpc::ObLSBackupC
int ret = OB_SUCCESS;
ObLSBackupCleanDagNetInitParam param;
ObLSBackupCleanDagNet *clean_dag_net = nullptr;
ObTenantDagScheduler *scheduler = MTL(ObTenantDagScheduler *);
if (OB_ISNULL(scheduler)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected null MTL scheduler", K(ret), K(scheduler));
} else if (OB_FAIL(param.set(args))) {
LOG_WARN("failed to set ls backup clean net init param",K(ret), K(args));
} else if (OB_FAIL(scheduler->create_and_add_dag_net(&param, clean_dag_net))) {
if (OB_TASK_EXIST == ret) {
ret = OB_SUCCESS;
LOG_INFO("[BACKUP_CLEAN]alreadly have log stream backup dag net in DagScheduler", K(ret));
MTL_SWITCH(args.tenant_id_) {
ObTenantDagScheduler *scheduler = MTL(ObTenantDagScheduler *);
if (OB_ISNULL(scheduler)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected null MTL scheduler", K(ret), K(scheduler));
} else if (OB_FAIL(param.set(args))) {
LOG_WARN("failed to set ls backup clean net init param",K(ret), K(args));
} else if (OB_FAIL(scheduler->create_and_add_dag_net(&param, clean_dag_net))) {
if (OB_TASK_EXIST == ret) {
ret = OB_SUCCESS;
LOG_INFO("[BACKUP_CLEAN]alreadly have log stream backup dag net in DagScheduler", K(ret));
} else {
LOG_WARN("failed to create log stream backup dag net", K(ret));
}
} else {
LOG_WARN("failed to create log stream backup dag net", K(ret));
LOG_INFO("[BACKUP_CLEAN]success to create log stream backup dag net", K(ret), K(param));
}
} else {
LOG_INFO("[BACKUP_CLEAN]success to create log stream backup dag net", K(ret), K(param));
}
return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册