ob_root_service.h 41.4 KB
Newer Older
O
oceanbase-admin 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/**
 * 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_ROOTSERVER_OB_ROOT_SERVICE_H_
#define OCEANBASE_ROOTSERVER_OB_ROOT_SERVICE_H_

#include "lib/net/ob_addr.h"
#include "lib/thread/ob_work_queue.h"

#include "share/backup/ob_backup_info_mgr.h"
#include "share/ob_common_rpc_proxy.h"
W
wangzelin.wzl 已提交
21
#include "share/ob_tenant_id_schema_version.h"
O
oceanbase-admin 已提交
22 23 24 25
#include "share/ob_inner_config_root_addr.h"
#include "share/ob_root_addr_agent.h"
#include "share/ob_web_service_root_addr.h"
#include "share/ob_unit_replica_counter.h"
W
wangzelin.wzl 已提交
26
#include "share/ob_ls_id.h"
O
oceanbase-admin 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

#include "rpc/ob_packet.h"
#include "observer/ob_restore_ctx.h"
#include "rootserver/restore/ob_restore_scheduler.h"
#include "rootserver/ob_server_manager.h"
#include "rootserver/ob_all_server_task.h"
#include "rootserver/ob_all_server_checker.h"
#include "rootserver/ob_ddl_service.h"
#include "rootserver/ob_zone_manager.h"
#include "rootserver/ob_root_minor_freeze.h"
#include "rootserver/ob_unit_manager.h"
#include "rootserver/ob_vtable_location_getter.h"
#include "rootserver/ob_root_balancer.h"
#include "rootserver/ob_system_admin_util.h"
#include "rootserver/ob_root_inspection.h"
#include "rootserver/ob_rs_event_history_table_operator.h"
#include "rootserver/ob_rs_thread_checker.h"
#include "rootserver/ob_inner_table_monitor.h"
W
wangzelin.wzl 已提交
45
#include "rootserver/ob_snapshot_info_manager.h"
O
oceanbase-admin 已提交
46 47 48 49
#include "rootserver/ob_upgrade_storage_format_version_executor.h"
#include "rootserver/ob_upgrade_executor.h"
#include "rootserver/ob_upgrade_storage_format_version_executor.h"
#include "rootserver/ob_create_inner_schema_executor.h"
W
wangzelin.wzl 已提交
50 51
#include "rootserver/backup/ob_backup_service.h"
#include "rootserver/backup/ob_backup_task_scheduler.h"
O
oceanbase-admin 已提交
52 53 54
#include "rootserver/ob_update_rs_list_task.h"
#include "rootserver/ob_schema_history_recycler.h"
#include "rootserver/backup/ob_backup_lease_service.h"
W
wangzelin.wzl 已提交
55 56 57 58 59 60 61 62
#include "rootserver/ddl_task/ob_ddl_scheduler.h"
#include "share/ls/ob_ls_info.h"
#include "share/ls/ob_ls_table_operator.h"
#include "rootserver/backup/ob_archive_scheduler_service.h"
#include "rootserver/ob_disaster_recovery_task_mgr.h"
#include "rootserver/ob_disaster_recovery_task_executor.h"
#include "rootserver/ob_empty_server_checker.h"
#include "rootserver/ob_lost_replica_checker.h"
O
oceanbase-admin 已提交
63

W
wangzelin.wzl 已提交
64 65
namespace oceanbase
{
O
oceanbase-admin 已提交
66

W
wangzelin.wzl 已提交
67 68
namespace common
{
O
oceanbase-admin 已提交
69 70 71 72 73 74 75
class ObPacket;
class ObServerConfig;
class ObConfigManager;
class ObMySQLProxy;
class ObRequestTZInfoResult;
class ObRequestTZInfoArg;
class ObString;
W
wangzelin.wzl 已提交
76
}
O
oceanbase-admin 已提交
77

W
wangzelin.wzl 已提交
78 79
namespace share
{
O
oceanbase-admin 已提交
80

W
wangzelin.wzl 已提交
81 82
namespace status
{
O
oceanbase-admin 已提交
83 84 85
enum ObRootServiceStatus;
}
class ObAutoincrementService;
W
wangzelin.wzl 已提交
86 87
namespace schema
{
O
oceanbase-admin 已提交
88 89 90 91 92 93
class ObMultiVersionSchemaService;
class ObTenantSchema;
class ObDatabaseSchema;
class ObTablegroupSchema;
class ObTableSchema;
class ObSchemaGetterGuard;
W
wangzelin.wzl 已提交
94 95
}
class ObLSTableOperator;
O
oceanbase-admin 已提交
96
class ObRsMgr;
W
wangzelin.wzl 已提交
97
}
O
oceanbase-admin 已提交
98

W
wangzelin.wzl 已提交
99 100
namespace obrpc
{
O
oceanbase-admin 已提交
101 102 103
class ObSrvRpcProxy;
class ObCommonRpcProxy;
struct ObGetSwitchoverStatusRes;
W
wangzelin.wzl 已提交
104 105 106
}
namespace storage
{
O
oceanbase-admin 已提交
107 108 109
class ObMajorFreeze;
}

W
wangzelin.wzl 已提交
110 111 112 113
namespace rootserver
{
class ObRsStatus
{
G
gm 已提交
114
public:
W
wangzelin.wzl 已提交
115 116
  ObRsStatus() : rs_status_(share::status::INIT) {}
  virtual ~ObRsStatus() {}
O
oceanbase-admin 已提交
117 118 119 120 121 122 123 124 125 126 127
  int set_rs_status(const share::status::ObRootServiceStatus status);
  share::status::ObRootServiceStatus get_rs_status() const;
  bool need_do_restart() const;
  bool can_start_service() const;
  bool is_start() const;
  bool is_stopping() const;
  bool is_full_service() const;
  bool in_service() const;
  bool is_need_stop() const;
  int revoke_rs();
  int try_set_stopping();
G
gm 已提交
128
private:
O
oceanbase-admin 已提交
129 130 131 132
  common::SpinRWLock lock_;
  share::status::ObRootServiceStatus rs_status_;
};
// Root Service Entry Class
W
wangzelin.wzl 已提交
133 134
class ObRootService
{
G
gm 已提交
135
public:
O
oceanbase-admin 已提交
136 137
  friend class TestRootServiceCreateTable_check_rs_capacity_Test;
  friend class ObTenantWrsTask;
W
wangzelin.wzl 已提交
138 139
  class ObStartStopServerTask : public share::ObAsyncTask
  {
G
gm 已提交
140
  public:
W
wangzelin.wzl 已提交
141 142 143 144 145
    ObStartStopServerTask(ObRootService &root_service,
                          const common::ObAddr &server,
                          const bool start)
      : root_service_(root_service), server_(server), start_(start) {}
    virtual ~ObStartStopServerTask() {}
O
oceanbase-admin 已提交
146 147
    virtual int process();
    virtual int64_t get_deep_copy_size() const;
W
wangzelin.wzl 已提交
148
    share::ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const;
G
gm 已提交
149
  private:
W
wangzelin.wzl 已提交
150
    ObRootService &root_service_;
O
oceanbase-admin 已提交
151 152 153 154
    const common::ObAddr server_;
    const bool start_;
  };

W
wangzelin.wzl 已提交
155 156
  class ObOfflineServerTask : public share::ObAsyncTask
  {
G
gm 已提交
157
  public:
W
wangzelin.wzl 已提交
158 159 160 161
    ObOfflineServerTask(ObRootService &root_service,
                          const common::ObAddr &server)
      : root_service_(root_service), server_(server) { set_retry_times(0); /*not repeat*/ }
    virtual ~ObOfflineServerTask() {}
O
oceanbase-admin 已提交
162 163
    virtual int process();
    virtual int64_t get_deep_copy_size() const;
W
wangzelin.wzl 已提交
164
    share::ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const;
G
gm 已提交
165
  private:
W
wangzelin.wzl 已提交
166
    ObRootService &root_service_;
O
oceanbase-admin 已提交
167 168 169
    const common::ObAddr server_;
  };

W
wangzelin.wzl 已提交
170 171
  class ObRefreshServerTask : public common::ObAsyncTimerTask
  {
G
gm 已提交
172
  public:
W
wangzelin.wzl 已提交
173 174 175
    const static int64_t REFRESH_SERVER_INTERVAL = 1L * 1000 * 1000; // 1 second
    explicit ObRefreshServerTask(ObRootService &root_service);
    virtual ~ObRefreshServerTask() {};
O
oceanbase-admin 已提交
176 177
    // interface of AsyncTask
    virtual int process() override;
W
wangzelin.wzl 已提交
178 179
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
G
gm 已提交
180
  private:
W
wangzelin.wzl 已提交
181
    ObRootService &root_service_;
O
oceanbase-admin 已提交
182 183 184
    DISALLOW_COPY_AND_ASSIGN(ObRefreshServerTask);
  };

W
wangzelin.wzl 已提交
185 186
  class ObStatusChangeCallback : public ObIStatusChangeCallback
  {
G
gm 已提交
187
  public:
W
wangzelin.wzl 已提交
188
    explicit ObStatusChangeCallback(ObRootService &root_service);
O
oceanbase-admin 已提交
189 190 191 192
    virtual ~ObStatusChangeCallback();

    virtual int wakeup_balancer() override;
    virtual int wakeup_daily_merger() override;
W
wangzelin.wzl 已提交
193 194 195 196
    virtual int on_server_status_change(const common::ObAddr &server) override;
    virtual int on_start_server(const common::ObAddr &server) override;
    virtual int on_stop_server(const common::ObAddr &server) override;
    virtual int on_offline_server(const common::ObAddr &server) override;
O
oceanbase-admin 已提交
197

G
gm 已提交
198
  private:
W
wangzelin.wzl 已提交
199
    ObRootService &root_service_;
G
gm 已提交
200
  private:
O
oceanbase-admin 已提交
201 202 203
    DISALLOW_COPY_AND_ASSIGN(ObStatusChangeCallback);
  };

W
wangzelin.wzl 已提交
204 205
class ObServerChangeCallback : public ObIServerChangeCallback
  {
G
gm 已提交
206
  public:
W
wangzelin.wzl 已提交
207 208
    explicit ObServerChangeCallback(ObRootService &root_service) : root_service_(root_service) {}
    virtual ~ObServerChangeCallback() {}
O
oceanbase-admin 已提交
209 210 211

    virtual int on_server_change() override;

G
gm 已提交
212
  private:
W
wangzelin.wzl 已提交
213
    ObRootService &root_service_;
G
gm 已提交
214
  private:
O
oceanbase-admin 已提交
215 216 217
    DISALLOW_COPY_AND_ASSIGN(ObServerChangeCallback);
  };

W
wangzelin.wzl 已提交
218 219 220

  class ObRestartTask : public common::ObAsyncTimerTask
  {
G
gm 已提交
221
  public:
W
wangzelin.wzl 已提交
222
    explicit ObRestartTask(ObRootService &root_service);
O
oceanbase-admin 已提交
223 224 225 226
    virtual ~ObRestartTask();

    // interface of AsyncTask
    virtual int process() override;
W
wangzelin.wzl 已提交
227 228
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
G
gm 已提交
229
  private:
W
wangzelin.wzl 已提交
230
    ObRootService &root_service_;
G
gm 已提交
231
  private:
O
oceanbase-admin 已提交
232 233 234
    DISALLOW_COPY_AND_ASSIGN(ObRestartTask);
  };

W
wangzelin.wzl 已提交
235 236
  class ObReportCoreTableReplicaTask : public common::ObAsyncTimerTask
  {
G
gm 已提交
237
  public:
W
wangzelin.wzl 已提交
238 239
    explicit ObReportCoreTableReplicaTask(ObRootService &root_service);
    virtual ~ObReportCoreTableReplicaTask() {}
G
gm 已提交
240
  public:
O
oceanbase-admin 已提交
241 242
    // interface of AsyncTask
    virtual int process() override;
W
wangzelin.wzl 已提交
243 244
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
G
gm 已提交
245
  private:
W
wangzelin.wzl 已提交
246
    ObRootService &root_service_;
O
oceanbase-admin 已提交
247 248 249
    DISALLOW_COPY_AND_ASSIGN(ObReportCoreTableReplicaTask);
  };

W
wangzelin.wzl 已提交
250 251
  class ObReloadUnitManagerTask : public common::ObAsyncTimerTask
  {
G
gm 已提交
252
  public:
W
wangzelin.wzl 已提交
253 254
    explicit ObReloadUnitManagerTask(ObRootService &root_service, ObUnitManager &unit_manager);
    virtual ~ObReloadUnitManagerTask() {}
G
gm 已提交
255
  public:
O
oceanbase-admin 已提交
256 257
    // interface of AsyncTask
    virtual int process() override;
W
wangzelin.wzl 已提交
258 259
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
G
gm 已提交
260
  private:
W
wangzelin.wzl 已提交
261 262
    ObRootService &root_service_;
    ObUnitManager &unit_manager_;
O
oceanbase-admin 已提交
263 264 265
    DISALLOW_COPY_AND_ASSIGN(ObReloadUnitManagerTask);
  };

W
wangzelin.wzl 已提交
266 267
  class ObLoadDDLTask : public common::ObAsyncTimerTask
  {
G
gm 已提交
268
  public:
W
wangzelin.wzl 已提交
269 270
    explicit ObLoadDDLTask(ObRootService &root_service);
    virtual ~ObLoadDDLTask() = default;
O
oceanbase-admin 已提交
271
    virtual int process() override;
W
wangzelin.wzl 已提交
272 273
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
G
gm 已提交
274
  private:
W
wangzelin.wzl 已提交
275
    ObRootService &root_service_;
O
oceanbase-admin 已提交
276 277
  };

W
wangzelin.wzl 已提交
278 279
  class ObRefreshIOCalibrationTask : public common::ObAsyncTimerTask
  {
G
gm 已提交
280
  public:
W
wangzelin.wzl 已提交
281 282 283 284 285 286 287 288
    explicit ObRefreshIOCalibrationTask(ObRootService &root_service);
    virtual ~ObRefreshIOCalibrationTask() = default;
    virtual int process() override;
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
  private:
    ObRootService &root_service_;
  };
O
oceanbase-admin 已提交
289

W
wangzelin.wzl 已提交
290 291 292 293 294
class ObUpdateAllServerConfigTask : public common::ObAsyncTimerTask
  {
  public:
    explicit ObUpdateAllServerConfigTask(ObRootService &root_service);
    virtual ~ObUpdateAllServerConfigTask() {}
G
gm 已提交
295
  public:
O
oceanbase-admin 已提交
296 297
    // interface of AsyncTask
    virtual int process() override;
W
wangzelin.wzl 已提交
298 299
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
G
gm 已提交
300
  private:
W
wangzelin.wzl 已提交
301
    ObRootService &root_service_;
O
oceanbase-admin 已提交
302 303 304
    DISALLOW_COPY_AND_ASSIGN(ObUpdateAllServerConfigTask);
  };

W
wangzelin.wzl 已提交
305 306
  class ObSelfCheckTask : public common::ObAsyncTimerTask
  {
G
gm 已提交
307
  public:
W
wangzelin.wzl 已提交
308 309
    explicit ObSelfCheckTask(ObRootService &root_service);
    virtual ~ObSelfCheckTask() {};
O
oceanbase-admin 已提交
310 311
    // interface of AsyncTask
    virtual int process() override;
W
wangzelin.wzl 已提交
312 313
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
G
gm 已提交
314
  private:
O
oceanbase-admin 已提交
315
    void print_error_log();
G
gm 已提交
316
  private:
W
wangzelin.wzl 已提交
317
    ObRootService &root_service_;
O
oceanbase-admin 已提交
318 319 320
    DISALLOW_COPY_AND_ASSIGN(ObSelfCheckTask);
  };

W
wangzelin.wzl 已提交
321 322
  class RsListChangeCb: public share::ObIRsListChangeCb
  {
G
gm 已提交
323
  public:
W
wangzelin.wzl 已提交
324 325 326
    explicit RsListChangeCb(ObRootService &rs)
        :rs_(rs) {}
    virtual ~RsListChangeCb() {}
O
oceanbase-admin 已提交
327
    // interface of ObIRsListChangeCb
W
wangzelin.wzl 已提交
328 329 330 331
    virtual int submit_update_rslist_task(const bool force_update = false) override { return rs_.submit_update_rslist_task(force_update); }
    virtual int submit_report_replica() override { return rs_.report_replica(); }
    virtual int submit_report_replica(const int64_t tenant_id, const share::ObLSID &ls_id) override
    { return rs_.report_single_replica(tenant_id, ls_id); }
G
gm 已提交
332
  private:
W
wangzelin.wzl 已提交
333
    ObRootService &rs_;
O
oceanbase-admin 已提交
334 335 336
    DISALLOW_COPY_AND_ASSIGN(RsListChangeCb);
  };

W
wangzelin.wzl 已提交
337 338
  class ObInnerTableMonitorTask: public common::ObAsyncTimerTask
  {
G
gm 已提交
339
  public:
W
wangzelin.wzl 已提交
340 341 342
    const static int64_t PURGE_INTERVAL = 3600L * 1000L * 1000L;//1h
    ObInnerTableMonitorTask(ObRootService &rs);
    virtual ~ObInnerTableMonitorTask() {}
O
oceanbase-admin 已提交
343 344 345

    // interface of AsyncTask
    virtual int process() override;
W
wangzelin.wzl 已提交
346 347
    virtual int64_t get_deep_copy_size() const override { return sizeof(*this); }
    virtual ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override;
G
gm 已提交
348
  private:
W
wangzelin.wzl 已提交
349
    ObRootService &rs_;
O
oceanbase-admin 已提交
350 351
    DISALLOW_COPY_AND_ASSIGN(ObInnerTableMonitorTask);
  };
W
wangzelin.wzl 已提交
352 353
  class ObMinorFreezeTask : public share::ObAsyncTask
  {
G
gm 已提交
354
  public:
W
wangzelin.wzl 已提交
355 356
    explicit ObMinorFreezeTask(const obrpc::ObRootMinorFreezeArg &arg) : arg_(arg) {}
    virtual ~ObMinorFreezeTask() {}
O
oceanbase-admin 已提交
357 358
    virtual int process();
    virtual int64_t get_deep_copy_size() const;
W
wangzelin.wzl 已提交
359
    share::ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const;
G
gm 已提交
360
  private:
O
oceanbase-admin 已提交
361 362
    obrpc::ObRootMinorFreezeArg arg_;
  };
W
wangzelin.wzl 已提交
363 364
  class ObTenantGlobalContextCleanTimerTask : private common::ObTimerTask
  {
G
gm 已提交
365
  public:
W
wangzelin.wzl 已提交
366 367 368
    explicit ObTenantGlobalContextCleanTimerTask(ObRootService &root_service);
    virtual ~ObTenantGlobalContextCleanTimerTask() {};
    int schedule(int tg_id);
G
gm 已提交
369
  private:
W
wangzelin.wzl 已提交
370
    void runTimerTask() override;
G
gm 已提交
371
  private:
W
wangzelin.wzl 已提交
372 373
    static constexpr int64_t SCHEDULE_PERIOD = 3600 * 1000L * 1000L; // 1h
    ObRootService &root_service_;
O
oceanbase-admin 已提交
374 375
  };

G
gm 已提交
376
public:
O
oceanbase-admin 已提交
377 378 379 380
  ObRootService();
  virtual ~ObRootService();
  void reset_fail_count();
  void update_fail_count(int ret);
W
wangzelin.wzl 已提交
381 382 383 384 385 386 387 388 389 390 391 392 393
  int fake_init(common::ObServerConfig &config, common::ObConfigManager &config_mgr,
           obrpc::ObSrvRpcProxy &rpc_proxy, obrpc::ObCommonRpcProxy &common_proxy,
           common::ObAddr &self, common::ObMySQLProxy &sql_proxy, share::ObRsMgr &rs_mgr,
           share::schema::ObMultiVersionSchemaService *schema_mgr_,
	   share::ObLSTableOperator &lst_operator_);

  int init(common::ObServerConfig &config, common::ObConfigManager &config_mgr,
           obrpc::ObSrvRpcProxy &rpc_proxy, obrpc::ObCommonRpcProxy &common_proxy,
           common::ObAddr &self, common::ObMySQLProxy &sql_proxy,
           observer::ObRestoreCtx &restore_ctx,
           share::ObRsMgr &rs_mgr, share::schema::ObMultiVersionSchemaService *schema_mgr_,
	   share::ObLSTableOperator &lst_operator_);
  inline bool is_inited() const { return inited_; }
O
oceanbase-admin 已提交
394 395 396 397 398 399 400 401 402 403 404 405 406
  void destroy();

  // add virtual make the following functions mockable
  virtual int start_service();
  int revoke_rs();
  bool is_need_stop() const;
  virtual int stop_service();
  virtual int stop();
  virtual void wait();
  virtual bool in_service() const;
  bool need_do_restart() const;
  int set_rs_status(const share::status::ObRootServiceStatus status);
  virtual bool is_full_service() const;
W
wangzelin.wzl 已提交
407 408
  virtual bool is_major_freeze_done() const { return is_full_service(); }
  virtual bool is_ddl_allowed() const { return is_full_service(); }
O
oceanbase-admin 已提交
409 410 411 412
  bool can_start_service() const;
  bool is_stopping() const;
  bool is_start() const;
  share::status::ObRootServiceStatus get_status() const;
W
wangzelin.wzl 已提交
413 414
  bool in_debug() const { return debug_; }
  void set_debug() { debug_ = true; }
O
oceanbase-admin 已提交
415
  int reload_config();
W
wangzelin.wzl 已提交
416
  virtual bool check_config(const ObConfigItem &item, const char *&err_info);
O
oceanbase-admin 已提交
417
  // misc get functions
W
wangzelin.wzl 已提交
418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441
  share::ObLSTableOperator &get_lst_operator() { return *lst_operator_; }
  share::schema::ObMultiVersionSchemaService &get_schema_service() { return *schema_service_; }
  ObBackupTaskScheduler &get_backup_task_scheduler() { return backup_task_scheduler_;}
  ObServerManager &get_server_mgr() { return server_manager_; }
  ObZoneManager &get_zone_mgr() { return zone_manager_; }
  ObUnitManager &get_unit_mgr() { return unit_manager_; }
  ObRootBalancer &get_root_balancer() { return root_balancer_; }
  ObRootInspection &get_root_inspection() { return root_inspection_; }
  common::ObMySQLProxy &get_sql_proxy() { return sql_proxy_; }
  common::ObOracleSqlProxy &get_oracle_sql_proxy() { return oracle_sql_proxy_; }
  obrpc::ObCommonRpcProxy &get_common_rpc_proxy() { return common_proxy_; }
  obrpc::ObSrvRpcProxy &get_rpc_proxy() { return rpc_proxy_; }
  common::ObWorkQueue &get_task_queue() { return task_queue_; }
  common::ObWorkQueue &get_inspect_task_queue() { return inspect_task_queue_; }
  common::ObServerConfig *get_server_config() { return config_; }
  ObDDLScheduler &get_ddl_task_scheduler() { return ddl_scheduler_; }
  int64_t get_core_meta_table_version() { return core_meta_table_version_; }
  ObSchemaHistoryRecycler &get_schema_history_recycler() { return schema_history_recycler_; }
  ObRootMinorFreeze &get_root_minor_freeze() { return root_minor_freeze_; }
  int admin_clear_balance_task(const obrpc::ObAdminClearBalanceTaskArg &arg);
  int generate_user(const ObClusterRole &cluster_role, const char* usr_name, const char* user_passwd);
  int check_server_have_enough_resource_for_delete_server(
      const ObIArray<ObAddr> &servers,
      const ObZone &zone);
O
oceanbase-admin 已提交
442 443 444 445

  // not implemented rpc, helper function for rs rpc processor define.
  int not_implement();

W
wangzelin.wzl 已提交
446
  int execute_bootstrap(const obrpc::ObBootstrapArg &arg);
O
oceanbase-admin 已提交
447

W
wangzelin.wzl 已提交
448
  int check_config_result(const char *name, const char *value);
O
oceanbase-admin 已提交
449 450
  int check_ddl_allowed();

W
wangzelin.wzl 已提交
451 452 453 454 455 456 457
  int renew_lease(const share::ObLeaseRequest &lease_request,
                  share::ObLeaseResponse &lease_response);
  int report_sys_ls(const share::ObLSReplica &replica);
  int remove_sys_ls(const obrpc::ObRemoveSysLsArg &arg);
  int fetch_location(const obrpc::ObFetchLocationArg &arg,
                     obrpc::ObFetchLocationResult &res);
  int merge_finish(const obrpc::ObMergeFinishArg &arg);
O
oceanbase-admin 已提交
458

W
wangzelin.wzl 已提交
459
  int try_block_server(int rc, const common::ObAddr &server);
O
oceanbase-admin 已提交
460

W
wangzelin.wzl 已提交
461
  // 4.0 backup
O
oceanbase-admin 已提交
462
  // balance over
W
wangzelin.wzl 已提交
463 464 465 466 467 468 469 470 471 472 473
  int receive_backup_over(const obrpc::ObBackupTaskRes &res);
  int receive_backup_clean_over(const obrpc::ObBackupTaskRes &res);

  int broadcast_ds_action(const obrpc::ObDebugSyncActionArg &arg);
  int check_dangling_replica_finish(const obrpc::ObCheckDanglingReplicaFinishArg &arg);
  int fetch_alive_server(const obrpc::ObFetchAliveServerArg &arg,
      obrpc::ObFetchAliveServerResult &result);
  int fetch_active_server_status(const obrpc::ObFetchAliveServerArg &arg,
      obrpc::ObFetchActiveServerAddrResult &result);
  int get_tenant_schema_versions(const obrpc::ObGetSchemaArg &arg,
                                 obrpc::ObTenantSchemaVersions &tenant_schema_versions);
O
oceanbase-admin 已提交
474 475

  // ddl related
W
wangzelin.wzl 已提交
476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516
  int create_resource_unit(const obrpc::ObCreateResourceUnitArg &arg);
  int alter_resource_unit(const obrpc::ObAlterResourceUnitArg &arg);
  int drop_resource_unit(const obrpc::ObDropResourceUnitArg &arg);
  int create_resource_pool(const obrpc::ObCreateResourcePoolArg &arg);
  int alter_resource_pool(const obrpc::ObAlterResourcePoolArg &arg);
  int drop_resource_pool(const obrpc::ObDropResourcePoolArg &arg);
  int split_resource_pool(const obrpc::ObSplitResourcePoolArg &arg);
  int merge_resource_pool(const obrpc::ObMergeResourcePoolArg &arg);
  int alter_resource_tenant(const obrpc::ObAlterResourceTenantArg &arg);
  int create_tenant(const obrpc::ObCreateTenantArg &arg, obrpc::UInt64 &tenant_id);
  int create_tenant_end(const obrpc::ObCreateTenantEndArg &arg);
  int commit_alter_tenant_locality(const rootserver::ObCommitAlterTenantLocalityArg &arg);
  int drop_tenant(const obrpc::ObDropTenantArg &arg);
  int flashback_tenant(const obrpc::ObFlashBackTenantArg &arg);
  int purge_tenant(const obrpc::ObPurgeTenantArg &arg);
  int modify_tenant(const obrpc::ObModifyTenantArg &arg);
  int lock_tenant(const obrpc::ObLockTenantArg &arg);
  int modify_system_variable(const obrpc::ObModifySysVarArg &arg);
  int add_system_variable(const obrpc::ObAddSysVarArg &arg);
  int create_database(const obrpc::ObCreateDatabaseArg &arg, obrpc::UInt64 &db_id);
  int create_tablegroup(const obrpc::ObCreateTablegroupArg &arg, obrpc::UInt64 &tg_id);
  int handle_security_audit(const obrpc::ObSecurityAuditArg &arg);
  int create_table(const obrpc::ObCreateTableArg &arg, obrpc::ObCreateTableRes &res);
  int alter_database(const obrpc::ObAlterDatabaseArg &arg);
  int alter_table(const obrpc::ObAlterTableArg &arg, obrpc::ObAlterTableRes &res);
  int execute_ddl_task(const obrpc::ObAlterTableArg &arg, common::ObSArray<uint64_t> &obj_ids);
  int cancel_ddl_task(const obrpc::ObCancelDDLTaskArg &arg);
  int alter_tablegroup(const obrpc::ObAlterTablegroupArg &arg);
  int maintain_obj_dependency_info(const obrpc::ObDependencyObjDDLArg &arg);
  int rename_table(const obrpc::ObRenameTableArg &arg);
  int truncate_table(const obrpc::ObTruncateTableArg &arg, obrpc::ObDDLRes &res);
  int create_index(const obrpc::ObCreateIndexArg &arg, obrpc::ObAlterTableRes &res);
  int drop_table(const obrpc::ObDropTableArg &arg, obrpc::ObDDLRes &res);
  int drop_database(const obrpc::ObDropDatabaseArg &arg, obrpc::ObDropDatabaseRes &drop_database_res);
  int drop_tablegroup(const obrpc::ObDropTablegroupArg &arg);
  int drop_index(const obrpc::ObDropIndexArg &arg, obrpc::ObDropIndexRes &res);
  int rebuild_index(const obrpc::ObRebuildIndexArg &arg, obrpc::ObAlterTableRes &res);
  //the interface only for switchover: execute skip check enable_ddl
  int flashback_index(const obrpc::ObFlashBackIndexArg &arg);
  int purge_index(const obrpc::ObPurgeIndexArg &arg);
  int create_table_like(const obrpc::ObCreateTableLikeArg &arg);
O
oceanbase-admin 已提交
517
  int refresh_config();
W
wangzelin.wzl 已提交
518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533
  int root_minor_freeze(const obrpc::ObRootMinorFreezeArg &arg);
  int update_index_status(const obrpc::ObUpdateIndexStatusArg &arg);
  int purge_table(const obrpc::ObPurgeTableArg &arg);
  int flashback_table_from_recyclebin(const obrpc::ObFlashBackTableFromRecyclebinArg &arg);
  int flashback_table_to_time_point(const obrpc::ObFlashBackTableToScnArg &arg);
  int purge_database(const obrpc::ObPurgeDatabaseArg &arg);
  int flashback_database(const obrpc::ObFlashBackDatabaseArg &arg);
  int check_tenant_in_alter_locality(const uint64_t tenant_id, bool &in_alter_locality);

  int create_restore_point(const obrpc::ObCreateRestorePointArg &arg);
  int drop_restore_point(const obrpc::ObDropRestorePointArg &arg);
  //for inner table monitor, purge in fixed time
  int purge_expire_recycle_objects(const obrpc::ObPurgeRecycleBinArg &arg, obrpc::Int64 &affected_rows);
  int calc_column_checksum_repsonse(const obrpc::ObCalcColumnChecksumResponseArg &arg);
  int build_ddl_single_replica_response(const obrpc::ObDDLBuildSingleReplicaResponseArg &arg);
  int optimize_table(const obrpc::ObOptimizeTableArg &arg);
O
oceanbase-admin 已提交
534 535

  //----Functions for managing privileges----
W
wangzelin.wzl 已提交
536 537 538 539 540 541 542 543 544 545 546 547 548 549 550
  int create_user(obrpc::ObCreateUserArg &arg,
                  common::ObSArray<int64_t> &failed_index);
  int drop_user(const obrpc::ObDropUserArg &arg,
                common::ObSArray<int64_t> &failed_index);
  int rename_user(const obrpc::ObRenameUserArg &arg,
                  common::ObSArray<int64_t> &failed_index);
  int set_passwd(const obrpc::ObSetPasswdArg &arg);
  int grant(const obrpc::ObGrantArg &arg);
  int revoke_user(const obrpc::ObRevokeUserArg &arg);
  int lock_user(const obrpc::ObLockUserArg &arg, common::ObSArray<int64_t> &failed_index);
  int revoke_database(const obrpc::ObRevokeDBArg &arg);
  int revoke_table(const obrpc::ObRevokeTableArg &arg);
  int revoke_syspriv(const obrpc::ObRevokeSysPrivArg &arg);
  int alter_user_profile(const obrpc::ObAlterUserProfileArg &arg);
  int alter_role(const obrpc::ObAlterRoleArg &arg);
O
oceanbase-admin 已提交
551 552 553
  //----End of functions for managing privileges----

  //----Functions for managing outlines----
W
wangzelin.wzl 已提交
554 555 556
  int create_outline(const obrpc::ObCreateOutlineArg &arg);
  int alter_outline(const obrpc::ObAlterOutlineArg &arg);
  int drop_outline(const obrpc::ObDropOutlineArg &arg);
O
oceanbase-admin 已提交
557 558
  //----End of functions for managing outlines----

W
wangzelin.wzl 已提交
559 560 561 562
  //----Functions for managing schema revise----
  int schema_revise(const obrpc::ObSchemaReviseArg &arg);
  //----End of functions for managing schema revise----

O
oceanbase-admin 已提交
563
  //----Functions for managing UDF----
W
wangzelin.wzl 已提交
564 565
  int create_user_defined_function(const obrpc::ObCreateUserDefinedFunctionArg &arg);
  int drop_user_defined_function(const obrpc::ObDropUserDefinedFunctionArg &arg);
O
oceanbase-admin 已提交
566
  //----End of functions for managing UDF----
W
wangzelin.wzl 已提交
567 568 569 570 571 572 573 574 575 576 577 578

  //----Functions for managing routines----
  int create_routine(const obrpc::ObCreateRoutineArg &arg);
  int drop_routine(const obrpc::ObDropRoutineArg &arg);
  int alter_routine(const obrpc::ObCreateRoutineArg &arg);
  //----End of functions for managing routines----

  //----Functions for managing routines----
  int create_udt(const obrpc::ObCreateUDTArg &arg);
  int drop_udt(const obrpc::ObDropUDTArg &arg);
  //----End of functions for managing routines----

O
oceanbase-admin 已提交
579
  //----Functions for managing dblinks----
W
wangzelin.wzl 已提交
580 581
  int create_dblink(const obrpc::ObCreateDbLinkArg &arg);
  int drop_dblink(const obrpc::ObDropDbLinkArg &arg);
O
oceanbase-admin 已提交
582 583 584
  //----End of functions for managing dblinks----

  //----Functions for managing synonyms----
W
wangzelin.wzl 已提交
585 586
  int create_synonym(const obrpc::ObCreateSynonymArg &arg);
  int drop_synonym(const obrpc::ObDropSynonymArg &arg);
O
oceanbase-admin 已提交
587 588
  //----End of functions for managing synonyms----

W
wangzelin.wzl 已提交
589 590 591 592 593 594 595 596 597 598 599 600 601

  //----Functions for managing package----
  int create_package(const obrpc::ObCreatePackageArg &arg);
  int alter_package(const obrpc::ObAlterPackageArg &arg);
  int drop_package(const obrpc::ObDropPackageArg &arg);
  //----End of functions for managing package----

  //----Functions for managing trigger----
  int create_trigger(const obrpc::ObCreateTriggerArg &arg);
  int alter_trigger(const obrpc::ObAlterTriggerArg &arg);
  int drop_trigger(const obrpc::ObDropTriggerArg &arg);
  //----End of functions for managing trigger----

O
oceanbase-admin 已提交
602 603
  //----Functions for managing sequence----
  // create alter drop actions all in one, avoid noodle-like code
W
wangzelin.wzl 已提交
604
  int do_sequence_ddl(const obrpc::ObSequenceDDLArg &arg);
O
oceanbase-admin 已提交
605 606
  //----End of functions for managing sequence----

W
wangzelin.wzl 已提交
607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624
  //----Functions for managing context----
  // create alter drop actions all in one, avoid noodle-like code
  int do_context_ddl(const obrpc::ObContextDDLArg &arg);
  //----End of functions for managing context----

   //----Functions for managing keystore----
  int do_keystore_ddl(const obrpc::ObKeystoreDDLArg &arg);
  //----End of functions for managing keystore----

  //----Functions for managing label security policies----
  int handle_label_se_policy_ddl(const obrpc::ObLabelSePolicyDDLArg &arg);
  int handle_label_se_component_ddl(const obrpc::ObLabelSeComponentDDLArg &arg);
  int handle_label_se_label_ddl(const obrpc::ObLabelSeLabelDDLArg &arg);
  int handle_label_se_user_level_ddl(const obrpc::ObLabelSeUserLevelDDLArg &arg);
  //----End of functions for managing label security policies----
  // for tablespace
  int do_tablespace_ddl(const obrpc::ObTablespaceDDLArg &arg);

O
oceanbase-admin 已提交
625
  //----Functions for managing profile----
W
wangzelin.wzl 已提交
626
  int do_profile_ddl(const obrpc::ObProfileDDLArg &arg);
O
oceanbase-admin 已提交
627 628
  //----End of functions for managing sequence----

W
wangzelin.wzl 已提交
629 630 631 632 633
  //----Functions for directory object----
  int create_directory(const obrpc::ObCreateDirectoryArg &arg);
  int drop_directory(const obrpc::ObDropDirectoryArg &arg);
  //----End of functions for directory object----

O
oceanbase-admin 已提交
634
  // server related
W
wangzelin.wzl 已提交
635 636 637 638 639
  int add_server(const obrpc::ObAdminServerArg &arg);
  int delete_server(const obrpc::ObAdminServerArg &arg);
  int cancel_delete_server(const obrpc::ObAdminServerArg &arg);
  int start_server(const obrpc::ObAdminServerArg &arg);
  int stop_server(const obrpc::ObAdminServerArg &arg);
O
oceanbase-admin 已提交
640 641

  // zone related
W
wangzelin.wzl 已提交
642 643 644 645 646
  int add_zone(const obrpc::ObAdminZoneArg &arg);
  int delete_zone(const obrpc::ObAdminZoneArg &arg);
  int start_zone(const obrpc::ObAdminZoneArg &arg);
  int stop_zone(const obrpc::ObAdminZoneArg &arg);
  int alter_zone(const obrpc::ObAdminZoneArg &arg);
O
oceanbase-admin 已提交
647 648

  // system admin command (alter system ...)
W
wangzelin.wzl 已提交
649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664
  int admin_switch_replica_role(const obrpc::ObAdminSwitchReplicaRoleArg &arg);
  int admin_switch_rs_role(const obrpc::ObAdminSwitchRSRoleArg &arg);
  int admin_drop_replica(const obrpc::ObAdminDropReplicaArg &arg);
  int admin_change_replica(const obrpc::ObAdminChangeReplicaArg &arg);
  int admin_migrate_replica(const obrpc::ObAdminMigrateReplicaArg &arg);
  int admin_report_replica(const obrpc::ObAdminReportReplicaArg &arg);
  int admin_recycle_replica(const obrpc::ObAdminRecycleReplicaArg &arg);
  int admin_merge(const obrpc::ObAdminMergeArg &arg);
  int admin_recovery(const obrpc::ObAdminRecoveryArg &arg);
  int admin_clear_roottable(const obrpc::ObAdminClearRoottableArg &arg);
  int admin_refresh_schema(const obrpc::ObAdminRefreshSchemaArg &arg);
  int admin_set_config(obrpc::ObAdminSetConfigArg &arg);
  int admin_clear_location_cache(const obrpc::ObAdminClearLocationCacheArg &arg);
  int admin_refresh_memory_stat(const obrpc::ObAdminRefreshMemStatArg &arg);
  int admin_wash_memory_fragmentation(const obrpc::ObAdminWashMemFragmentationArg &arg);
  int admin_refresh_io_calibration(const obrpc::ObAdminRefreshIOCalibrationArg &arg);
O
oceanbase-admin 已提交
665 666 667
  int admin_reload_unit();
  int admin_reload_server();
  int admin_reload_zone();
W
wangzelin.wzl 已提交
668 669
  int admin_clear_merge_error(const obrpc::ObAdminMergeArg &arg);
  int admin_migrate_unit(const obrpc::ObAdminMigrateUnitArg &arg);
O
oceanbase-admin 已提交
670
  int admin_upgrade_virtual_schema();
W
wangzelin.wzl 已提交
671 672
  int run_job(const obrpc::ObRunJobArg &arg);
  int run_upgrade_job(const obrpc::ObUpgradeJobArg &arg);
673
  int upgrade_table_schema(const obrpc::ObUpgradeTableSchemaArg &arg);
W
wangzelin.wzl 已提交
674 675 676 677 678
  int admin_flush_cache(const obrpc::ObAdminFlushCacheArg &arg);
  int admin_upgrade_cmd(const obrpc::Bool &arg);
  int admin_rolling_upgrade_cmd(const obrpc::ObAdminRollingUpgradeArg &arg);
  int admin_set_tracepoint(const obrpc::ObAdminSetTPArg &arg);
  int admin_set_backup_config(const obrpc::ObAdminSetConfigArg &arg); 
O
oceanbase-admin 已提交
679
  /* physical restore */
W
wangzelin.wzl 已提交
680 681 682 683
  int physical_restore_tenant(const obrpc::ObPhysicalRestoreTenantArg &arg);
  int check_restore_tenant_valid(const share::ObPhysicalRestoreJob &job_info,
      share::schema::ObSchemaGetterGuard &guard);
  int rebuild_index_in_restore(const obrpc::ObRebuildIndexInRestoreArg &arg);
O
oceanbase-admin 已提交
684
  /*-----------------*/
W
wangzelin.wzl 已提交
685 686
  int refresh_time_zone_info(const obrpc::ObRefreshTimezoneArg &arg);
  int request_time_zone_info(const common::ObRequestTZInfoArg &arg, common::ObRequestTZInfoResult &result);
O
oceanbase-admin 已提交
687 688
  // async tasks and callbacks
  // @see ObStatusChangeCallback
W
wangzelin.wzl 已提交
689 690 691 692
  int submit_update_all_server_task(const common::ObAddr &server);
  int submit_start_server_task(const common::ObAddr &server);
  int submit_stop_server_task(const common::ObAddr &server);
  int submit_offline_server_task(const common::ObAddr &server);
O
oceanbase-admin 已提交
693 694 695
  int submit_report_core_table_replica_task();
  int submit_reload_unit_manager_task();
  int report_replica();
W
wangzelin.wzl 已提交
696
  int report_single_replica(const int64_t tenant_id, const share::ObLSID &ls_id);
O
oceanbase-admin 已提交
697 698
  // @see RsListChangeCb
  int submit_update_rslist_task(const bool force_update = false);
699
  int submit_upgrade_task(const obrpc::ObUpgradeJobArg::Action action, const int64_t version);
O
oceanbase-admin 已提交
700 701
  int submit_upgrade_storage_format_version_task();
  int submit_create_inner_schema_task();
W
wangzelin.wzl 已提交
702
  int submit_async_minor_freeze_task(const obrpc::ObRootMinorFreezeArg &arg);
O
oceanbase-admin 已提交
703
  int submit_update_all_server_config_task();
W
wangzelin.wzl 已提交
704
  int submit_max_availability_mode_task(const common::ObProtectionLevel level, const int64_t cluster_version);
O
oceanbase-admin 已提交
705

W
wangzelin.wzl 已提交
706
  int submit_ddl_single_replica_build_task(share::ObAsyncTask &task);
O
oceanbase-admin 已提交
707
  // may modify arg before taking effect
W
wangzelin.wzl 已提交
708
  int set_config_pre_hook(obrpc::ObAdminSetConfigArg &arg);
O
oceanbase-admin 已提交
709
  // arg is readonly after take effect
W
wangzelin.wzl 已提交
710
  int set_config_post_hook(const obrpc::ObAdminSetConfigArg &arg);
O
oceanbase-admin 已提交
711 712 713 714 715 716 717 718 719 720 721 722 723

  // @see ObRestartTask
  int after_restart();
  int do_after_full_service();
  int schedule_restart_timer_task(const int64_t delay);
  int schedule_self_check_task();
  int schedule_temporary_offline_timer_task();
  // @see ObCheckServerTask
  int schedule_check_server_timer_task();
  // @see ObRefreshServerTask
  int schedule_refresh_server_timer_task(const int64_t delay);
  // @see ObInnerTableMonitorTask
  int schedule_inner_table_monitor_task();
W
wangzelin.wzl 已提交
724
  int schedule_primary_cluster_inspection_task();
O
oceanbase-admin 已提交
725 726 727 728
  int schedule_recyclebin_task(int64_t delay);
  // @see ObInspector
  int schedule_inspector_task();
  int schedule_update_rs_list_task();
W
wangzelin.wzl 已提交
729 730
  //update statistic cache
  int update_stat_cache(const obrpc::ObUpdateStatCacheArg &arg);
O
oceanbase-admin 已提交
731

W
wangzelin.wzl 已提交
732 733
  int schedule_load_ddl_task();
  int schedule_refresh_io_calibration_task();
O
oceanbase-admin 已提交
734
  // ob_admin command, must be called in ddl thread
W
wangzelin.wzl 已提交
735 736 737 738 739 740 741 742 743 744 745 746
  int force_create_sys_table(const obrpc::ObForceCreateSysTableArg &arg);
  int force_set_locality(const obrpc::ObForceSetLocalityArg &arg);
  int generate_stop_server_log_in_sync_dest_server_array(
      const common::ObIArray<common::ObAddr> &alive_server_array,
      const common::ObIArray<common::ObAddr> &excluded_server_array,
      common::ObIArray<common::ObAddr> &dest_server_array);
  int log_nop_operation(const obrpc::ObDDLNopOpreatorArg &arg);
  int broadcast_schema(const obrpc::ObBroadcastSchemaArg &arg);
  ObDDLService &get_ddl_service() { return ddl_service_; }
  ObDDLScheduler &get_ddl_scheduler() { return ddl_scheduler_; }

  int check_merge_finish(const obrpc::ObCheckMergeFinishArg &arg);
O
oceanbase-admin 已提交
747
  int get_recycle_schema_versions(
W
wangzelin.wzl 已提交
748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
      const obrpc::ObGetRecycleSchemaVersionsArg &arg,
      obrpc::ObGetRecycleSchemaVersionsResult &result);
  int handle_archive_log(const obrpc::ObArchiveLogArg &arg);
  int handle_backup_database(const obrpc::ObBackupDatabaseArg &arg);
  int handle_backup_manage(const obrpc::ObBackupManageArg &arg);
  int handle_backup_delete(const obrpc::ObBackupCleanArg &arg);
  int handle_delete_policy(const obrpc::ObDeletePolicyArg &arg);
  int handle_validate_database(const obrpc::ObBackupManageArg &arg);
  int handle_validate_backupset(const obrpc::ObBackupManageArg &arg);
  int handle_cancel_validate(const obrpc::ObBackupManageArg &arg);
  int disaster_recovery_task_reply(const obrpc::ObDRTaskReplyResult &arg);
  int standby_upgrade_virtual_schema(const obrpc::ObDDLNopOpreatorArg &arg);
  int check_backup_scheduler_working(obrpc::Bool &is_working);
  int send_physical_restore_result(const obrpc::ObPhysicalRestoreResult &res);
  int get_is_in_bootstrap(bool &is_bootstrap) const;
O
oceanbase-admin 已提交
763
  int purge_recyclebin_objects(int64_t purge_each_time);
W
wangzelin.wzl 已提交
764 765
  int flush_opt_stat_monitoring_info(const obrpc::ObFlushOptStatArg &arg);
  int update_rslist();
G
gm 已提交
766
private:
W
wangzelin.wzl 已提交
767 768 769 770
  int check_parallel_ddl_conflict(
      share::schema::ObSchemaGetterGuard &schema_guard,
      const obrpc::ObDDLArg &arg);
  int fetch_sys_tenant_ls_info();
O
oceanbase-admin 已提交
771 772 773 774 775 776 777 778 779 780 781 782
  // create system table in mysql backend for debugging mode.
  int init_debug_database();
  int do_restart();
  int refresh_server(const bool fast_recover, const bool need_retry);
  int refresh_schema(const bool fast_recover);
  int init_sequence_id();
  int load_server_manager();
  int start_timer_tasks();
  int stop_timer_tasks();
  int request_heartbeats();
  int self_check();
  int update_all_server_and_rslist();
W
wangzelin.wzl 已提交
783 784 785 786 787 788
  int check_zone_and_server(const ObIArray<ObAddr> &servers, bool &is_same_zone, bool &is_all_stopped);
  int check_can_stop(const common::ObZone &zone,
                     const common::ObIArray<common::ObAddr> &servers,
                     const bool is_stop_zone);
  bool have_other_stop_task(const ObZone &zone);
  int init_sys_admin_ctx(ObSystemAdminCtx &ctx);
O
oceanbase-admin 已提交
789
  int set_cluster_version();
W
wangzelin.wzl 已提交
790
  bool is_replica_count_reach_rs_limit(int64_t replica_count) { return replica_count > OB_MAX_CLUSTER_REPLICA_COUNT; }
O
oceanbase-admin 已提交
791
  int update_all_server_config();
W
wangzelin.wzl 已提交
792 793
  int get_readwrite_servers(const common::ObIArray<common::ObAddr> &input_servers,
                            common::ObIArray<common::ObAddr> &readwrite_servers);
O
oceanbase-admin 已提交
794
  int generate_table_schema_in_tenant_space(
W
wangzelin.wzl 已提交
795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815
      const obrpc::ObCreateTableArg &arg,
      share::schema::ObTableSchema &table_schema);
  int clear_special_cluster_schema_status();
  int check_tenant_gts_config(const int64_t tenant_id, bool &tenant_gts_config_ok,
                              share::schema::ObSchemaGetterGuard &schema_guard);
  int check_database_config(const int64_t tenant_id, bool &db_config_ok,
                            share::schema::ObSchemaGetterGuard &schema_guard);
  int check_table_config(const int64_t tenant_id, bool &table_config_ok, bool &table_split_ok,
                         share::schema::ObSchemaGetterGuard &schema_guard,
                         const int64_t snapshot_schema_version);
  int check_tablegroup_config(const int64_t tenant_id, bool &tablegroup_config_ok,
                              bool &tablegroup_split_ok,
                              share::schema::ObSchemaGetterGuard &schema_guard,
                              const int64_t snapshot_schema_version);
  int check_restore_tenant_after_major_freeze(ObArray<ObString> &not_allow_reasons,
                                              const int64_t snapshot_schema_version,
                                              const ObArray<uint64_t> &tenant_ids);
  int get_tenants_created_after_snapshot(const int64_t snapshot_schema_version,
                                         ObArray<uint64_t> &tenant_ids);
  int query_ddl_table_after_major_freeze(int &row_cnt, int64_t &schema_version_cursor,
                                         ObArray<uint64_t> &tenant_ids);
O
oceanbase-admin 已提交
816
  bool continue_check(const int ret);
W
wangzelin.wzl 已提交
817 818
  int handle_backup_database_cancel(const obrpc::ObBackupManageArg &arg);
  inline static bool cmp_tenant_id(const uint64_t lhs, const uint64_t tenant_id) {
O
oceanbase-admin 已提交
819 820
    return lhs < tenant_id;
  }
qq_43633081's avatar
qq_43633081 已提交
821 822
  int handle_cancel_backup_backup(const obrpc::ObBackupManageArg &arg);
  int handle_cancel_all_backup_force(const obrpc::ObBackupManageArg &arg);
823
  int wait_refresh_config();
W
wangzelin.wzl 已提交
824
  int clean_global_context();
G
gm 已提交
825
private:
W
wangzelin.wzl 已提交
826 827 828 829 830 831 832 833
  bool is_sys_tenant(const common::ObString &tenant_name);
  int table_allow_ddl_operation(const obrpc::ObAlterTableArg &arg);
  int get_table_schema(uint64_t tenant_id,
                       const common::ObString &database_name,
                       const common::ObString &table_name,
                       const bool is_index,
                       const int64_t session_id,
                       const share::schema::ObTableSchema *&table_schema);
O
oceanbase-admin 已提交
834 835
  int update_baseline_schema_version();
  int finish_bootstrap();
W
wangzelin.wzl 已提交
836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855
  void construct_lease_expire_time(
       const share::ObLeaseRequest &lease_request,
       share::ObLeaseResponse &lease_response,
       const share::ObServerStatus &server_status);

  // Check if all ls has leader, enough member and if log is in sync.
  // @param [in] to_stop_servers: server_list to be stopped.
  // @param [in] skip_log_sync_check: whether skip log_sync check.
  // @param [in] print_str: string of operation. Used to print LOG_USER_ERROR "'print_str' not allowed".
  // @return: OB_SUCCESS if all check is passed.
  //          OB_OP_NOT_ALLOW if ls doesn't have leader/enough member or ls' log is not in sync.
  int check_majority_and_log_in_sync_(
      const ObIArray<ObAddr> &to_stop_servers,
      const bool skip_log_sync_check,
      const char *print_str);
  // Check if all ls has leader
  // @param [in] print_str: string of operation. Used to print LOG_USER_ERROR "'print_str' not allowed".
  int check_all_ls_has_leader_(const char *print_str);
  void update_cpu_quota_concurrency_in_memory_();
  int set_cpu_quota_concurrency_config_();
G
gm 已提交
856
private:
W
wangzelin.wzl 已提交
857 858
  int construct_rs_list_arg(obrpc::ObRsListArg &rs_list_arg);
  int precheck_interval_part(const obrpc::ObAlterTableArg &arg);
G
gm 已提交
859
private:
O
oceanbase-admin 已提交
860
  static const int64_t OB_MAX_CLUSTER_REPLICA_COUNT = 10000000;
W
wangzelin.wzl 已提交
861
  static const int64_t OB_ROOT_SERVICE_START_FAIL_COUNT_UPPER_LIMIT = 5;
O
oceanbase-admin 已提交
862
  bool inited_;
W
wangzelin.wzl 已提交
863
  volatile bool server_refreshed_; // server manager reload and force request heartbeat
O
oceanbase-admin 已提交
864 865 866 867
  // use mysql server backend for debug.
  bool debug_;

  common::ObAddr self_addr_;
W
wangzelin.wzl 已提交
868 869
  common::ObServerConfig *config_;
  common::ObConfigManager *config_mgr_;
O
oceanbase-admin 已提交
870 871 872 873 874

  obrpc::ObSrvRpcProxy rpc_proxy_;
  obrpc::ObCommonRpcProxy common_proxy_;
  common::ObMySQLProxy sql_proxy_;
  common::ObOracleSqlProxy oracle_sql_proxy_;
W
wangzelin.wzl 已提交
875 876 877
  observer::ObRestoreCtx *restore_ctx_;
  share::ObRsMgr *rs_mgr_;
  share::schema::ObMultiVersionSchemaService *schema_service_;
O
oceanbase-admin 已提交
878 879 880 881 882 883 884 885 886 887 888 889 890

  // server manager related
  ObStatusChangeCallback status_change_cb_;
  ObServerChangeCallback server_change_callback_;
  ObServerManager server_manager_;
  ObHeartbeatChecker hb_checker_;
  ObAllServerChecker server_checker_;
  RsListChangeCb rs_list_change_cb_;

  // minor freeze
  ObRootMinorFreeze root_minor_freeze_;

  // partition table related
W
wangzelin.wzl 已提交
891
  share::ObLSTableOperator *lst_operator_;
O
oceanbase-admin 已提交
892 893 894 895 896 897 898 899 900 901 902 903

  ObZoneManager zone_manager_;

  // ddl related
  ObDDLService ddl_service_;
  ObUnitManager unit_manager_;

  ObRootBalancer root_balancer_;

  // empty server checker
  ObEmptyServerChecker empty_server_checker_;

W
wangzelin.wzl 已提交
904
  //check lost LS replica
O
oceanbase-admin 已提交
905 906 907 908 909 910 911
  ObLostReplicaChecker lost_replica_checker_;
  // thread checker
  ObRsThreadChecker thread_checker_;

  // virtual table related
  ObVTableLocationGetter vtable_location_getter_;

W
wangzelin.wzl 已提交
912
  share::ObUnifiedAddrAgent *addr_agent_;
O
oceanbase-admin 已提交
913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938

  // upgrade inspection
  ObRootInspection root_inspection_;

  // upgrade post job
  ObUpgradeExecutor upgrade_executor_;

  // upgrade storage format version
  ObUpgradeStorageFormatVersionExecutor upgrade_storage_format_executor_;

  // create inner oracle role(for upgrade)
  ObCreateInnerSchemaExecutor create_inner_schema_executor_;

  // avoid concurrent run of do_restart and bootstrap
  common::ObLatch bootstrap_lock_;

  common::SpinRWLock broadcast_rs_list_lock_;

  // Inner table mointor
  ObInnerTableMonitor inner_table_monitor_;

  // the single task queue for all async tasks and timer tasks
  common::ObWorkQueue task_queue_;
  common::ObWorkQueue inspect_task_queue_;

  // async timer tasks
W
wangzelin.wzl 已提交
939 940 941 942 943 944
  ObRestartTask restart_task_;  // not repeat & no retry
  ObRefreshServerTask refresh_server_task_;  // not repeat & no retry
  ObCheckServerTask check_server_task_;      // repeat & no retry
  ObSelfCheckTask self_check_task_;  //repeat to succeed & no retry
  ObLoadDDLTask load_ddl_task_; // repeat to succeed & no retry
  ObRefreshIOCalibrationTask refresh_io_calibration_task_; // retry to succeed & no repeat
O
oceanbase-admin 已提交
945 946 947
  share::ObEventTableClearTask event_table_clear_task_;  // repeat & no retry
  ObInnerTableMonitorTask inner_table_monitor_task_;     // repeat & no retry

W
wangzelin.wzl 已提交
948 949
  ObInspector inspector_task_;     // repeat & no retry
  ObPurgeRecyclebinTask purge_recyclebin_task_;     // not repeat & no retry
O
oceanbase-admin 已提交
950 951 952
  // for set_config
  ObLatch set_config_lock_;

W
wangzelin.wzl 已提交
953 954
  ObDDLScheduler ddl_scheduler_;
  share::ObDDLReplicaBuilder ddl_builder_;
O
oceanbase-admin 已提交
955 956 957 958 959 960
  ObSnapshotInfoManager snapshot_manager_;
  int64_t core_meta_table_version_;
  ObUpdateRsListTimerTask update_rs_list_timer_task_;
  int64_t baseline_schema_version_;

  // backup
W
wangzelin.wzl 已提交
961 962 963
  ObBackupService backup_service_;
  ObBackupTaskScheduler backup_task_scheduler_;
  ObArchiveSchedulerService archive_service_;
O
oceanbase-admin 已提交
964 965 966 967 968
  int64_t start_service_time_;
  ObRsStatus rs_status_;

  int64_t fail_count_;
  ObSchemaHistoryRecycler schema_history_recycler_;
969
  ObBackupLeaseService backup_lease_service_;
W
wangzelin.wzl 已提交
970 971 972 973 974
  // Disaster Recovery related
  ObDRTaskExecutor disaster_recovery_task_executor_;
  ObDRTaskMgr disaster_recovery_task_mgr_;
  // application context
  ObTenantGlobalContextCleanTimerTask global_ctx_task_;
G
gm 已提交
975
private:
O
oceanbase-admin 已提交
976 977
  DISALLOW_COPY_AND_ASSIGN(ObRootService);
};
W
wangzelin.wzl 已提交
978 979
} // end namespace rootserver
} // end namespace oceanbase
O
oceanbase-admin 已提交
980

W
wangzelin.wzl 已提交
981
#endif // OCEANBASE_ROOTSERVER_OB_ROOT_SERVICE_H_