ob_root_service.h 42.6 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);
  };

O
obdev 已提交
204
  class ObServerChangeCallback : public ObIServerChangeCallback
W
wangzelin.wzl 已提交
205
  {
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

O
obdev 已提交
290
  class ObUpdateAllServerConfigTask : public common::ObAsyncTimerTask
W
wangzelin.wzl 已提交
291 292 293 294
  {
  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
  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);
O
obdev 已提交
501 502 503 504 505 506
  int start_redef_table(const obrpc::ObStartRedefTableArg &arg, obrpc::ObStartRedefTableRes &res);
  int copy_table_dependents(const obrpc::ObCopyTableDependentsArg &arg);
  int finish_redef_table(const obrpc::ObFinishRedefTableArg &arg);
  int abort_redef_table(const obrpc::ObAbortRedefTableArg &arg);
  int update_ddl_task_active_time(const obrpc::ObUpdateDDLTaskActiveTimeArg &arg);
  int create_hidden_table(const obrpc::ObCreateHiddenTableArg &arg, obrpc::ObCreateHiddenTableRes &res);
W
wangzelin.wzl 已提交
507 508 509 510 511 512
  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);
O
obdev 已提交
513
  int truncate_table_v2(const obrpc::ObTruncateTableArg &arg, obrpc::ObDDLRes &res);
W
wangzelin.wzl 已提交
514 515 516 517 518 519 520 521 522 523
  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 已提交
524
  int refresh_config();
W
wangzelin.wzl 已提交
525 526 527 528 529 530 531 532 533 534 535
  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);
O
obdev 已提交
536

W
wangzelin.wzl 已提交
537 538 539 540 541
  //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 已提交
542 543

  //----Functions for managing privileges----
W
wangzelin.wzl 已提交
544 545 546 547 548 549 550 551 552 553 554 555 556 557 558
  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 已提交
559 560 561
  //----End of functions for managing privileges----

  //----Functions for managing outlines----
W
wangzelin.wzl 已提交
562 563 564
  int create_outline(const obrpc::ObCreateOutlineArg &arg);
  int alter_outline(const obrpc::ObAlterOutlineArg &arg);
  int drop_outline(const obrpc::ObDropOutlineArg &arg);
O
oceanbase-admin 已提交
565 566
  //----End of functions for managing outlines----

W
wangzelin.wzl 已提交
567 568 569 570
  //----Functions for managing schema revise----
  int schema_revise(const obrpc::ObSchemaReviseArg &arg);
  //----End of functions for managing schema revise----

O
oceanbase-admin 已提交
571
  //----Functions for managing UDF----
W
wangzelin.wzl 已提交
572 573
  int create_user_defined_function(const obrpc::ObCreateUserDefinedFunctionArg &arg);
  int drop_user_defined_function(const obrpc::ObDropUserDefinedFunctionArg &arg);
O
oceanbase-admin 已提交
574
  //----End of functions for managing UDF----
W
wangzelin.wzl 已提交
575 576 577 578 579 580 581 582 583 584 585 586

  //----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 已提交
587
  //----Functions for managing dblinks----
W
wangzelin.wzl 已提交
588 589
  int create_dblink(const obrpc::ObCreateDbLinkArg &arg);
  int drop_dblink(const obrpc::ObDropDbLinkArg &arg);
O
oceanbase-admin 已提交
590 591 592
  //----End of functions for managing dblinks----

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

W
wangzelin.wzl 已提交
597

598 599 600 601
  //----Functions for sync rewrite rules----
  int admin_sync_rewrite_rules(const obrpc::ObSyncRewriteRuleArg &arg);
  //----End of functions for sync rewrite rules----

W
wangzelin.wzl 已提交
602 603 604 605 606 607 608 609 610 611 612 613
  //----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 已提交
614 615
  //----Functions for managing sequence----
  // create alter drop actions all in one, avoid noodle-like code
W
wangzelin.wzl 已提交
616
  int do_sequence_ddl(const obrpc::ObSequenceDDLArg &arg);
O
oceanbase-admin 已提交
617 618
  //----End of functions for managing sequence----

W
wangzelin.wzl 已提交
619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636
  //----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 已提交
637
  //----Functions for managing profile----
W
wangzelin.wzl 已提交
638
  int do_profile_ddl(const obrpc::ObProfileDDLArg &arg);
O
oceanbase-admin 已提交
639 640
  //----End of functions for managing sequence----

W
wangzelin.wzl 已提交
641 642 643 644 645
  //----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
obdev 已提交
646 647 648 649 650 651
  //----Functions for managing row level security----
  int handle_rls_policy_ddl(const obrpc::ObRlsPolicyDDLArg &arg);
  int handle_rls_group_ddl(const obrpc::ObRlsGroupDDLArg &arg);
  int handle_rls_context_ddl(const obrpc::ObRlsContextDDLArg &arg);
  //----End of functions for managing row level security----

O
oceanbase-admin 已提交
652
  // server related
W
wangzelin.wzl 已提交
653 654 655 656 657
  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 已提交
658 659

  // zone related
W
wangzelin.wzl 已提交
660 661 662 663 664
  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 已提交
665 666

  // system admin command (alter system ...)
W
wangzelin.wzl 已提交
667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682
  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 已提交
683 684 685
  int admin_reload_unit();
  int admin_reload_server();
  int admin_reload_zone();
W
wangzelin.wzl 已提交
686 687
  int admin_clear_merge_error(const obrpc::ObAdminMergeArg &arg);
  int admin_migrate_unit(const obrpc::ObAdminMigrateUnitArg &arg);
O
oceanbase-admin 已提交
688
  int admin_upgrade_virtual_schema();
W
wangzelin.wzl 已提交
689 690
  int run_job(const obrpc::ObRunJobArg &arg);
  int run_upgrade_job(const obrpc::ObUpgradeJobArg &arg);
691
  int upgrade_table_schema(const obrpc::ObUpgradeTableSchemaArg &arg);
W
wangzelin.wzl 已提交
692 693 694 695
  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);
O
obdev 已提交
696
  int admin_set_backup_config(const obrpc::ObAdminSetConfigArg &arg);
O
oceanbase-admin 已提交
697
  /* physical restore */
W
wangzelin.wzl 已提交
698 699 700 701
  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 已提交
702
  /*-----------------*/
W
wangzelin.wzl 已提交
703 704
  int refresh_time_zone_info(const obrpc::ObRefreshTimezoneArg &arg);
  int request_time_zone_info(const common::ObRequestTZInfoArg &arg, common::ObRequestTZInfoResult &result);
O
oceanbase-admin 已提交
705 706
  // async tasks and callbacks
  // @see ObStatusChangeCallback
W
wangzelin.wzl 已提交
707 708 709 710
  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 已提交
711 712 713
  int submit_report_core_table_replica_task();
  int submit_reload_unit_manager_task();
  int report_replica();
W
wangzelin.wzl 已提交
714
  int report_single_replica(const int64_t tenant_id, const share::ObLSID &ls_id);
O
oceanbase-admin 已提交
715 716
  // @see RsListChangeCb
  int submit_update_rslist_task(const bool force_update = false);
717
  int submit_upgrade_task(const obrpc::ObUpgradeJobArg &arg);
O
oceanbase-admin 已提交
718 719 720
  int submit_upgrade_storage_format_version_task();
  int submit_create_inner_schema_task();
  int submit_update_all_server_config_task();
W
wangzelin.wzl 已提交
721
  int submit_max_availability_mode_task(const common::ObProtectionLevel level, const int64_t cluster_version);
O
oceanbase-admin 已提交
722

W
wangzelin.wzl 已提交
723
  int submit_ddl_single_replica_build_task(share::ObAsyncTask &task);
724
  int check_weak_read_version_refresh_interval(int64_t refresh_interval, bool &valid);
O
oceanbase-admin 已提交
725
  // may modify arg before taking effect
W
wangzelin.wzl 已提交
726
  int set_config_pre_hook(obrpc::ObAdminSetConfigArg &arg);
O
oceanbase-admin 已提交
727
  // arg is readonly after take effect
W
wangzelin.wzl 已提交
728
  int set_config_post_hook(const obrpc::ObAdminSetConfigArg &arg);
O
oceanbase-admin 已提交
729 730 731 732 733 734 735 736 737 738 739 740 741

  // @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 已提交
742
  int schedule_primary_cluster_inspection_task();
O
oceanbase-admin 已提交
743 744 745 746
  int schedule_recyclebin_task(int64_t delay);
  // @see ObInspector
  int schedule_inspector_task();
  int schedule_update_rs_list_task();
W
wangzelin.wzl 已提交
747 748
  //update statistic cache
  int update_stat_cache(const obrpc::ObUpdateStatCacheArg &arg);
O
oceanbase-admin 已提交
749

W
wangzelin.wzl 已提交
750 751
  int schedule_load_ddl_task();
  int schedule_refresh_io_calibration_task();
O
oceanbase-admin 已提交
752
  // ob_admin command, must be called in ddl thread
W
wangzelin.wzl 已提交
753 754 755 756 757 758 759 760 761 762 763 764
  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 已提交
765
  int get_recycle_schema_versions(
W
wangzelin.wzl 已提交
766 767 768 769 770 771 772 773 774 775 776 777 778 779 780
      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 已提交
781
  int purge_recyclebin_objects(int64_t purge_each_time);
W
wangzelin.wzl 已提交
782 783
  int flush_opt_stat_monitoring_info(const obrpc::ObFlushOptStatArg &arg);
  int update_rslist();
O
obdev 已提交
784 785
  int recompile_all_views_batch(const obrpc::ObRecompileAllViewsBatchArg &arg);
  int try_add_dep_infos_for_synonym_batch(const obrpc::ObTryAddDepInofsForSynonymBatchArg &arg);
G
gm 已提交
786
private:
W
wangzelin.wzl 已提交
787 788 789 790
  int check_parallel_ddl_conflict(
      share::schema::ObSchemaGetterGuard &schema_guard,
      const obrpc::ObDDLArg &arg);
  int fetch_sys_tenant_ls_info();
O
oceanbase-admin 已提交
791 792 793 794 795 796 797 798 799 800 801 802
  // 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 已提交
803 804 805 806 807 808
  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 已提交
809
  int set_cluster_version();
W
wangzelin.wzl 已提交
810
  bool is_replica_count_reach_rs_limit(int64_t replica_count) { return replica_count > OB_MAX_CLUSTER_REPLICA_COUNT; }
O
oceanbase-admin 已提交
811
  int update_all_server_config();
W
wangzelin.wzl 已提交
812 813
  int get_readwrite_servers(const common::ObIArray<common::ObAddr> &input_servers,
                            common::ObIArray<common::ObAddr> &readwrite_servers);
O
oceanbase-admin 已提交
814
  int generate_table_schema_in_tenant_space(
W
wangzelin.wzl 已提交
815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835
      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 已提交
836
  bool continue_check(const int ret);
W
wangzelin.wzl 已提交
837 838
  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 已提交
839 840
    return lhs < tenant_id;
  }
qq_43633081's avatar
qq_43633081 已提交
841 842
  int handle_cancel_backup_backup(const obrpc::ObBackupManageArg &arg);
  int handle_cancel_all_backup_force(const obrpc::ObBackupManageArg &arg);
W
wangzelin.wzl 已提交
843
  int clean_global_context();
G
gm 已提交
844
private:
W
wangzelin.wzl 已提交
845 846 847 848 849 850 851 852
  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 已提交
853 854
  int update_baseline_schema_version();
  int finish_bootstrap();
W
wangzelin.wzl 已提交
855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874
  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 已提交
875
private:
W
wangzelin.wzl 已提交
876 877
  int construct_rs_list_arg(obrpc::ObRsListArg &rs_list_arg);
  int precheck_interval_part(const obrpc::ObAlterTableArg &arg);
O
obdev 已提交
878

G
gm 已提交
879
private:
O
oceanbase-admin 已提交
880
  static const int64_t OB_MAX_CLUSTER_REPLICA_COUNT = 10000000;
W
wangzelin.wzl 已提交
881
  static const int64_t OB_ROOT_SERVICE_START_FAIL_COUNT_UPPER_LIMIT = 5;
O
oceanbase-admin 已提交
882
  bool inited_;
W
wangzelin.wzl 已提交
883
  volatile bool server_refreshed_; // server manager reload and force request heartbeat
O
oceanbase-admin 已提交
884 885 886 887
  // use mysql server backend for debug.
  bool debug_;

  common::ObAddr self_addr_;
W
wangzelin.wzl 已提交
888 889
  common::ObServerConfig *config_;
  common::ObConfigManager *config_mgr_;
O
oceanbase-admin 已提交
890 891 892 893 894

  obrpc::ObSrvRpcProxy rpc_proxy_;
  obrpc::ObCommonRpcProxy common_proxy_;
  common::ObMySQLProxy sql_proxy_;
  common::ObOracleSqlProxy oracle_sql_proxy_;
W
wangzelin.wzl 已提交
895 896 897
  observer::ObRestoreCtx *restore_ctx_;
  share::ObRsMgr *rs_mgr_;
  share::schema::ObMultiVersionSchemaService *schema_service_;
O
oceanbase-admin 已提交
898 899 900 901 902 903 904 905 906 907 908 909 910

  // 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 已提交
911
  share::ObLSTableOperator *lst_operator_;
O
oceanbase-admin 已提交
912 913 914 915 916 917 918 919 920 921 922 923

  ObZoneManager zone_manager_;

  // ddl related
  ObDDLService ddl_service_;
  ObUnitManager unit_manager_;

  ObRootBalancer root_balancer_;

  // empty server checker
  ObEmptyServerChecker empty_server_checker_;

W
wangzelin.wzl 已提交
924
  //check lost LS replica
O
oceanbase-admin 已提交
925 926 927 928 929 930 931
  ObLostReplicaChecker lost_replica_checker_;
  // thread checker
  ObRsThreadChecker thread_checker_;

  // virtual table related
  ObVTableLocationGetter vtable_location_getter_;

W
wangzelin.wzl 已提交
932
  share::ObUnifiedAddrAgent *addr_agent_;
O
oceanbase-admin 已提交
933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958

  // 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 已提交
959 960 961 962 963 964
  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 已提交
965 966 967
  share::ObEventTableClearTask event_table_clear_task_;  // repeat & no retry
  ObInnerTableMonitorTask inner_table_monitor_task_;     // repeat & no retry

W
wangzelin.wzl 已提交
968 969
  ObInspector inspector_task_;     // repeat & no retry
  ObPurgeRecyclebinTask purge_recyclebin_task_;     // not repeat & no retry
O
oceanbase-admin 已提交
970 971 972
  // for set_config
  ObLatch set_config_lock_;

W
wangzelin.wzl 已提交
973 974
  ObDDLScheduler ddl_scheduler_;
  share::ObDDLReplicaBuilder ddl_builder_;
O
oceanbase-admin 已提交
975 976 977 978 979 980
  ObSnapshotInfoManager snapshot_manager_;
  int64_t core_meta_table_version_;
  ObUpdateRsListTimerTask update_rs_list_timer_task_;
  int64_t baseline_schema_version_;

  // backup
W
wangzelin.wzl 已提交
981 982 983
  ObBackupService backup_service_;
  ObBackupTaskScheduler backup_task_scheduler_;
  ObArchiveSchedulerService archive_service_;
O
oceanbase-admin 已提交
984 985 986 987 988
  int64_t start_service_time_;
  ObRsStatus rs_status_;

  int64_t fail_count_;
  ObSchemaHistoryRecycler schema_history_recycler_;
989
  ObBackupLeaseService backup_lease_service_;
W
wangzelin.wzl 已提交
990 991 992 993 994
  // Disaster Recovery related
  ObDRTaskExecutor disaster_recovery_task_executor_;
  ObDRTaskMgr disaster_recovery_task_mgr_;
  // application context
  ObTenantGlobalContextCleanTimerTask global_ctx_task_;
G
gm 已提交
995
private:
O
oceanbase-admin 已提交
996 997
  DISALLOW_COPY_AND_ASSIGN(ObRootService);
};
W
wangzelin.wzl 已提交
998 999
} // end namespace rootserver
} // end namespace oceanbase
O
oceanbase-admin 已提交
1000

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