fix backup delete switch tenant resource
This commit is contained in:
parent
d87eec46c9
commit
7205374e60
@ -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(¶m, 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(¶m, 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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user