486 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			486 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * 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.
 | |
|  */
 | |
| 
 | |
| #define USING_LOG_PREFIX RS
 | |
| #include "gtest/gtest.h"
 | |
| #include "gmock/gmock.h"
 | |
| #define private public
 | |
| #define protected public
 | |
| #include "lib/stat/ob_session_stat.h"
 | |
| #include "share/schema/ob_schema_service_sql_impl.h"
 | |
| #include "share/schema/ob_multi_version_schema_service.h"
 | |
| #include "share/inner_table/ob_inner_table_schema.h"
 | |
| #include "share/partition_table/ob_partition_table_operator.h"
 | |
| #include "share/partition_table/ob_partition_location_cache.h"
 | |
| #include "share/ob_global_stat_proxy.h"
 | |
| #include "share/ob_alive_server_tracer.h"
 | |
| #include "lib/mysqlclient/ob_mysql_transaction.h"
 | |
| #include "lib/time/ob_time_utility.h"
 | |
| #include "lib/string/ob_sql_string.h"
 | |
| #include "share/ob_rpc_struct.h"
 | |
| #include "rootserver/ob_ddl_service.h"
 | |
| #include "rootserver/ob_bootstrap.h"
 | |
| #include "rootserver/ob_server_manager.h"
 | |
| #include "../share/schema/db_initializer.h"
 | |
| #include "rpc/mock_ob_srv_rpc_proxy.h"
 | |
| #include "rpc/mock_ob_common_rpc_proxy.h"
 | |
| #include "../share/partition_table/fake_part_property_getter.h"
 | |
| #include "../share/mock_ob_rs_mgr.h"
 | |
| #include "mock_ob_bootstrap.h"
 | |
| #include "server_status_builder.h"
 | |
| #include "rootserver/ob_zone_manager.h"
 | |
| #include "rootserver/ob_leader_coordinator.h"
 | |
| #include "rootserver/ob_partition_creator.h"
 | |
| #include "rootserver/ob_snapshot_info_manager.h"
 | |
| #include "rootserver/ob_rs_gts_manager.h"
 | |
| #include "fake_rs_list_change_cb.h"
 | |
| #include "lib/container/ob_array_iterator.h"
 | |
| #include "mock_leader_coordinate.h"
 | |
| #include "mock_freeze_info_manager.h"
 | |
| #include "share/ob_tenant_mgr.h"
 | |
| #include "ob_rs_test_utils.h"
 | |
| #include "rootserver/ob_single_partition_balance.h"
 | |
| 
 | |
| static void* null_ptr = (void*)0x8888;  // instead of NULL to avoid coverity complain.
 | |
| 
 | |
| using ::testing::_;
 | |
| using ::testing::Invoke;
 | |
| using ::testing::Return;
 | |
| using ::testing::SetArgPointee;
 | |
| using ::testing::SetArgReferee;
 | |
| namespace oceanbase {
 | |
| using namespace common;
 | |
| using namespace obrpc;
 | |
| using namespace share::schema;
 | |
| using namespace share;
 | |
| using namespace share::host;
 | |
| 
 | |
| static uint64_t& TID = FakePartPropertyGetter::TID();
 | |
| static int64_t& PID = FakePartPropertyGetter::PID();
 | |
| 
 | |
| namespace rootserver {
 | |
| class MockLocalityManager : public ObILocalityManager {
 | |
| public:
 | |
|   struct ServerInfo {
 | |
|     ServerInfo() : server_(), is_local_(false)
 | |
|     {}
 | |
|     common::ObAddr server_;
 | |
|     bool is_local_;
 | |
|     TO_STRING_KV(K_(server), K_(is_local));
 | |
|   };
 | |
|   MockLocalityManager() : is_readonly_(false), server_info_()
 | |
|   {}
 | |
|   virtual ~MockLocalityManager()
 | |
|   {}
 | |
|   virtual int is_local_zone_read_only(bool& is_readonly)
 | |
|   {
 | |
|     is_readonly = is_readonly_;
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int is_local_server(const common::ObAddr& server, bool& is_local)
 | |
|   {
 | |
|     int ret = OB_SUCCESS;
 | |
|     is_local = false;
 | |
|     for (int64_t i = 0; i < server_info_.count(); i++) {
 | |
|       if (server == server_info_.at(i).server_) {
 | |
|         is_local = server_info_.at(i).is_local_;
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|     return ret;
 | |
|   }
 | |
|   bool is_readonly_;
 | |
|   common::ObArray<ServerInfo> server_info_;
 | |
| };
 | |
| 
 | |
| class TestBootstrap : public ::testing::Test {
 | |
| public:
 | |
|   TestBootstrap();
 | |
|   virtual ~TestBootstrap()
 | |
|   {}
 | |
|   virtual void SetUp();
 | |
|   virtual void TearDown();
 | |
|   int init_partition_table();
 | |
|   void call_execute_bootstrap();
 | |
| 
 | |
| protected:
 | |
|   DBInitializer db_initer_;
 | |
|   ObMultiVersionSchemaService schema_service_;
 | |
|   MockObSrvRpcProxy rpc_proxy_;
 | |
|   MockObCommonRpcProxy rs_rpc_proxy_;
 | |
|   ObDDLOperator ddl_operator_;
 | |
|   ObZoneManager zone_mgr_;
 | |
|   ObDDLService ddl_service_;
 | |
|   ObServerInfoList rs_list_;
 | |
|   FakePartPropertyGetter prop_getter_;
 | |
|   ObPartitionTableOperator pt_;
 | |
|   ObLocationFetcher fetcher_;
 | |
|   ObPartitionLocationCache loc_cache_;
 | |
|   MockObRsMgr rs_mgr_;
 | |
|   MockFreezeInfoManager freeze_info_manager_;
 | |
|   ObServerManager server_mgr_;
 | |
|   ObUnitManager unit_mgr_;
 | |
|   FakeRsListChangeCb rs_list_cb_;
 | |
|   FakeMergeErrorCb merge_error_cb_;
 | |
|   ObLeaderCoordinator leader_coordinator_;
 | |
|   ObAliveServerMap alive_server_;
 | |
|   MockLocalityManager locality_manager_;
 | |
|   ObSnapshotInfoManager snapshot_manager_;
 | |
|   ObRebalanceTaskMgr task_mgr_;
 | |
|   ObRootBalancer root_balance_;
 | |
|   ObSinglePartBalance single_part_balance_;
 | |
| };
 | |
| 
 | |
| TestBootstrap::TestBootstrap()
 | |
|     : db_initer_(),
 | |
|       schema_service_(),
 | |
|       rpc_proxy_(),
 | |
|       ddl_operator_(schema_service_, db_initer_.get_sql_proxy()),
 | |
|       ddl_service_(),
 | |
|       rs_list_(),
 | |
|       prop_getter_(),
 | |
|       pt_(prop_getter_),
 | |
|       fetcher_(),
 | |
|       loc_cache_(fetcher_),
 | |
|       unit_mgr_(server_mgr_, zone_mgr_)
 | |
| {}
 | |
| 
 | |
| void TestBootstrap::TearDown()
 | |
| {
 | |
|   ObKVGlobalCache::get_instance().destroy();
 | |
| }
 | |
| 
 | |
| void TestBootstrap::SetUp()
 | |
| {
 | |
|   ObPartitionCreator::flag_replica_batch_update_cnt = 1;
 | |
|   int ret = db_initer_.init();
 | |
|   ASSERT_EQ(OB_SUCCESS, ret);
 | |
|   ObKVGlobalCache::get_instance().init();
 | |
| 
 | |
|   const bool only_core_tables = false;
 | |
|   ret = db_initer_.create_system_table(only_core_tables);
 | |
|   ASSERT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   ASSERT_EQ(OB_SUCCESS, alive_server_.init());
 | |
| 
 | |
|   //  ret = db_initer_.fill_sys_stat_table();
 | |
|   //  ASSERT_EQ(OB_SUCCESS, ret);
 | |
|   ret = schema_service_.init(&db_initer_.get_sql_proxy(),
 | |
|       NULL,
 | |
|       &db_initer_.get_config(),
 | |
|       OB_MAX_VERSION_COUNT,
 | |
|       OB_MAX_VERSION_COUNT_FOR_MERGE,
 | |
|       false);
 | |
|   ASSERT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   ObRegion default_region("default_region");
 | |
| 
 | |
|   ObServerInfo info;
 | |
|   info.zone_ = "1";
 | |
|   info.server_ = A;
 | |
|   info.region_ = default_region;
 | |
|   ASSERT_EQ(OB_SUCCESS, rs_list_.push_back(info));
 | |
|   info.zone_ = "2";
 | |
|   info.server_ = B;
 | |
|   info.region_ = default_region;
 | |
|   ASSERT_EQ(OB_SUCCESS, rs_list_.push_back(info));
 | |
|   info.zone_ = "3";
 | |
|   info.server_ = C;
 | |
|   info.region_ = default_region;
 | |
|   ASSERT_EQ(OB_SUCCESS, rs_list_.push_back(info));
 | |
| 
 | |
|   ASSERT_EQ(OB_SUCCESS,
 | |
|       ddl_service_.init(rpc_proxy_,
 | |
|           rs_rpc_proxy_,
 | |
|           db_initer_.get_sql_proxy(),
 | |
|           schema_service_,
 | |
|           pt_,
 | |
|           server_mgr_,
 | |
|           zone_mgr_,
 | |
|           unit_mgr_,
 | |
|           *(ObRootBalancer*)null_ptr,
 | |
|           freeze_info_manager_,
 | |
|           snapshot_manager_,
 | |
|           task_mgr_));
 | |
|   ASSERT_EQ(OB_SUCCESS,
 | |
|       unit_mgr_.init(
 | |
|           db_initer_.get_sql_proxy(), db_initer_.get_config(), leader_coordinator_, schema_service_, root_balance_));
 | |
| 
 | |
|   db_initer_.get_config().enable_rootservice_standalone = false;
 | |
|   ON_CALL(rpc_proxy_, create_partition_batch(_, _, _))
 | |
|       .WillByDefault(Invoke(&rpc_proxy_, &MockObSrvRpcProxy::create_partition_batch_wrapper));
 | |
| }
 | |
| 
 | |
| int TestBootstrap::init_partition_table()
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   pt_.set_callback_for_rs(rs_list_cb_, merge_error_cb_);
 | |
|   // insert user table partition info
 | |
| 
 | |
|   ObArray<std::pair<uint64_t, int64_t> > sys_tables;
 | |
|   const int64_t part_num = 1;
 | |
|   const schema_create_func* creator_ptr_array[] = {core_table_schema_creators, sys_table_schema_creators, NULL};
 | |
| 
 | |
|   if (OB_FAIL(sys_tables.push_back(std::make_pair(combine_id(OB_SYS_TENANT_ID, OB_ALL_CORE_TABLE_TID), part_num)))) {
 | |
|     LOG_INFO("failed to add sys table id", K(ret));
 | |
|   }
 | |
| 
 | |
|   for (const schema_create_func** creator_ptr_ptr = creator_ptr_array; OB_SUCCESS == ret && NULL != *creator_ptr_ptr;
 | |
|        ++creator_ptr_ptr) {
 | |
|     for (const schema_create_func* creator_ptr = *creator_ptr_ptr; OB_SUCCESS == ret && NULL != *creator_ptr;
 | |
|          ++creator_ptr) {
 | |
|       ObTableSchema table_schema;
 | |
|       if (OB_FAIL((*creator_ptr)(table_schema))) {
 | |
|         LOG_INFO("failed to build table schema", K(ret));
 | |
|       } else if (table_schema.has_partition()) {
 | |
|         if (OB_FAIL(sys_tables.push_back(std::make_pair(
 | |
|                 combine_id(OB_SYS_TENANT_ID, table_schema.get_table_id()), table_schema.get_all_part_num())))) {
 | |
|           LOG_INFO("failed to add sys table id", K(ret));
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   for (int64_t i = 0; i < sys_tables.count(); ++i) {
 | |
|     TID = sys_tables.at(i).first;
 | |
|     for (int64_t j = 0; j < sys_tables.at(i).second; ++j) {
 | |
|       PID = j;
 | |
|       prop_getter_.clear().add(A, LEADER).add(B, FOLLOWER).add(C, FOLLOWER);
 | |
|       for (int64_t k = 0; k < prop_getter_.get_replicas().count(); ++k) {
 | |
|         // ASSERT_EQ(OB_SUCCESS, pt_.update(prop_getter_.get_replicas().at(k)));
 | |
|         GCONF.self_addr_ = prop_getter_.get_replicas().at(k).server_;
 | |
|         pt_.update(prop_getter_.get_replicas().at(k));
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| // TEST_F(TestBootstrap, pre_bootstrap)
 | |
| //{
 | |
| //  ObPreBootstrap pre_bootstrap(rpc_proxy_, rs_list_, pt_);
 | |
| //  ObAddr master_rs;
 | |
| //  ASSERT_EQ(OB_SUCCESS, pt_.init(db_initer_.get_sql_proxy()));
 | |
| //  ASSERT_EQ(OB_SUCCESS, init_partition_table());
 | |
| //  EXPECT_CALL(rpc_proxy_, is_empty_server(_,_))
 | |
| //      .Times(3)
 | |
| //      .WillRepeatedly(DoAll(SetArgReferee<0>(true), Return(OB_SUCCESS)));
 | |
| //  EXPECT_CALL(rpc_proxy_, create_partition_batch(_,_,_))
 | |
| //      .Times(3)
 | |
| //      .WillRepeatedly(Invoke(&rpc_proxy_, &MockObSrvRpcProxy::create_partition_batch_wrapper));
 | |
| //
 | |
| //  ASSERT_EQ(OB_SUCCESS, pre_bootstrap.prepare_bootstrap(master_rs));
 | |
| //}
 | |
| //
 | |
| // TEST_F(TestBootstrap, pre_bootstrap_invalid_rs_list)
 | |
| //{
 | |
| //  ObServerInfoList rs_list;
 | |
| //  ObPreBootstrap pre_bootstrap(rpc_proxy_, rs_list, pt_);
 | |
| //  ObAddr master_rs;
 | |
| //  // empty rs list
 | |
| //  ASSERT_EQ(OB_INNER_STAT_ERROR, pre_bootstrap.prepare_bootstrap(master_rs));
 | |
| //
 | |
| //  // rs in same zone
 | |
| //  ObServerInfo info;
 | |
| //  info.zone_ = "1";
 | |
| //  info.server_.set_ip_addr("10.10.1.1", 2500);
 | |
| //  ASSERT_EQ(OB_SUCCESS, rs_list.push_back(info));
 | |
| //  info.zone_ = "1";
 | |
| //  info.server_.set_ip_addr("10.10.1.2", 2500);
 | |
| //  ASSERT_EQ(OB_SUCCESS, rs_list.push_back(info));
 | |
| //  info.zone_ = "3";
 | |
| //  info.server_.set_ip_addr("10.10.1.3", 2500);
 | |
| //  ASSERT_EQ(OB_SUCCESS, rs_list.push_back(info));
 | |
| //  ObPreBootstrap pre_bootstrap1(rpc_proxy_, rs_list, pt_);
 | |
| //  ASSERT_EQ(OB_PARTITION_ZONE_DUPLICATED, pre_bootstrap1.prepare_bootstrap(master_rs));
 | |
| //}
 | |
| //
 | |
| // TEST_F(TestBootstrap, pre_bootstrap_failed_during_create_partition)
 | |
| //{
 | |
| //  ObAddr master_rs;
 | |
| //  ObPreBootstrap pre_bootstrap(rpc_proxy_, rs_list_, pt_);
 | |
| //
 | |
| //  EXPECT_CALL(rpc_proxy_, is_empty_server(_, _))
 | |
| //      .Times(3)
 | |
| //      .WillRepeatedly(DoAll(SetArgReferee<0>(true), Return(OB_SUCCESS)));
 | |
| //  EXPECT_CALL(rpc_proxy_, create_partition_batch(_, _, _))
 | |
| //      .Times(1)
 | |
| //      .WillRepeatedly(Return(OB_TIMEOUT));
 | |
| //
 | |
| //  ASSERT_EQ(OB_TIMEOUT, pre_bootstrap.prepare_bootstrap(master_rs));
 | |
| //}
 | |
| //
 | |
| ////TEST_F(TestBootstrap, pre_bootstrap_failed_during_wait_elect_master_partition)
 | |
| ////{
 | |
| ////  ObAddr master_rs;
 | |
| ////  MockObPreBootstrap pre_bootstrap(rpc_proxy_, rs_list_);
 | |
| ////
 | |
| ////  EXPECT_CALL(rpc_proxy_, is_empty_server(_,_,_))
 | |
| ////      .Times(3)
 | |
| ////      .WillRepeatedly(DoAll(SetArgReferee<2>(true), Return(OB_SUCCESS)));
 | |
| ////  EXPECT_CALL(rpc_proxy_, create_partition(_,_,_,_,_,_))
 | |
| ////      .Times(3)
 | |
| ////      .WillRepeatedly(Return(OB_SUCCESS));
 | |
| ////  EXPECT_CALL(pre_bootstrap, prepare_bootstrap(_))
 | |
| ////      .Times(1);
 | |
| ////  EXPECT_CALL(pre_bootstrap, check_is_all_server_empty(_))
 | |
| ////      .Times(1);
 | |
| ////  EXPECT_CALL(pre_bootstrap, wait_elect_master_partition(_))
 | |
| ////      .Times(1)
 | |
| ////      .WillRepeatedly(Return(OB_TIMEOUT));
 | |
| ////
 | |
| ////  ASSERT_EQ(OB_TIMEOUT, pre_bootstrap.prepare_bootstrap(master_rs));
 | |
| ////}
 | |
| ////
 | |
| //
 | |
| // TEST_F(TestBootstrap, pre_bootstrap_failed_during_check_empty)
 | |
| //{
 | |
| //  ObAddr master_rs;
 | |
| //  ObPreBootstrap pre_bootstrap(rpc_proxy_, rs_list_, pt_);
 | |
| //
 | |
| //  // rpc failed
 | |
| //  EXPECT_CALL(rpc_proxy_, is_empty_server(_, _))
 | |
| //      .Times(1)
 | |
| //      .WillRepeatedly(DoAll(SetArgReferee<0>(false), Return(OB_TIMEOUT)));
 | |
| //  EXPECT_CALL(rpc_proxy_, create_partition_batch(_, _, _))
 | |
| //      .Times(0)
 | |
| //      .WillRepeatedly(Return(OB_SUCCESS));
 | |
| //
 | |
| //  ASSERT_EQ(OB_TIMEOUT, pre_bootstrap.prepare_bootstrap(master_rs));
 | |
| //
 | |
| //  // not empty
 | |
| //  EXPECT_CALL(rpc_proxy_, is_empty_server(_, _))
 | |
| //      .Times(1)
 | |
| //      .WillRepeatedly(DoAll(SetArgReferee<0>(false), Return(OB_SUCCESS)));
 | |
| //  EXPECT_CALL(rpc_proxy_, create_partition_batch(_, _, _))
 | |
| //      .Times(0)
 | |
| //      .WillRepeatedly(Return(OB_SUCCESS));
 | |
| //
 | |
| //  ASSERT_EQ(OB_INIT_TWICE, pre_bootstrap.prepare_bootstrap(master_rs));
 | |
| //}
 | |
| //
 | |
| // void TestBootstrap::call_execute_bootstrap()
 | |
| //{
 | |
| //  // first set to (2, 2, 2), so than in execute_bootstrap, set_init_value will succeed
 | |
| //  ObGlobalStatProxy stat_proxy(db_initer_.get_sql_proxy());
 | |
| //  ASSERT_EQ(OB_SUCCESS, stat_proxy.set_init_value(2, 2, 2, 2));
 | |
| //  ASSERT_EQ(OB_SUCCESS, pt_.init(db_initer_.get_sql_proxy()));
 | |
| //  const int64_t bucket_num = 1024;
 | |
| //  const int64_t max_cache_size = 1024 * 1024 * 512;
 | |
| //  const int64_t block_size = common::OB_MALLOC_BIG_BLOCK_SIZE;
 | |
| //  ObKVGlobalCache::get_instance().init(bucket_num, max_cache_size, block_size);
 | |
| //  const char *cache_name = "location_cache";
 | |
| //  int64_t priority = 1L;
 | |
| //  ASSERT_EQ(OB_SUCCESS, fetcher_.init(db_initer_.get_config(), pt_, rs_mgr_, rs_rpc_proxy_, rpc_proxy_,
 | |
| //  &locality_manager_)); ASSERT_EQ(OB_SUCCESS, loc_cache_.init(schema_service_, db_initer_.get_config(), alive_server_,
 | |
| //  cache_name, priority, true, &locality_manager_));
 | |
| //
 | |
| //  ASSERT_EQ(OB_SUCCESS, init_partition_table());
 | |
| //
 | |
| //  // init server manager
 | |
| //  ObFakeCB cb;
 | |
| //  ObFakeServerChangeCB cb2;
 | |
| //  ASSERT_EQ(OB_SUCCESS, server_mgr_.init(cb, cb2, db_initer_.get_sql_proxy(),
 | |
| //                                         unit_mgr_, zone_mgr_, leader_coordinator_,
 | |
| //                                         db_initer_.get_config(), A,
 | |
| //                                         rpc_proxy_));
 | |
| //  const int64_t now = ObTimeUtility::current_time();
 | |
| //  const ObZone zone = "1";
 | |
| //  ObServerStatusBuilder server_builder;
 | |
| //  ASSERT_EQ(OB_SUCCESS, server_builder.init(db_initer_.get_config()));
 | |
| //  server_builder.add(ObServerStatus::OB_SERVER_ACTIVE, now, A, zone)
 | |
| //                .add(ObServerStatus::OB_SERVER_ACTIVE, now, B, zone)
 | |
| //                .add(ObServerStatus::OB_SERVER_ACTIVE, now, C, zone);
 | |
| //  server_builder.build(server_mgr_);
 | |
| //  ObServerStatus status;
 | |
| //  ASSERT_EQ(OB_SUCCESS, server_mgr_.get_server_status(A, status));
 | |
| //  status.resource_info_.disk_total_ = OB_UNIT_MIN_DISK_SIZE;
 | |
| //  ASSERT_EQ(OB_SUCCESS, server_mgr_.update_server_status(status));
 | |
| //
 | |
| //  MockLeaderCoordinator leader_coordinator;
 | |
| //  ObBootstrap bootstrap(rpc_proxy_, rs_list_, ddl_service_, unit_mgr_, leader_coordinator,
 | |
| //      db_initer_.get_config());
 | |
| //  EXPECT_CALL(rpc_proxy_, create_partition_batch(_, _, _))
 | |
| //      .WillRepeatedly(Invoke(&rpc_proxy_, &MockObSrvRpcProxy::create_partition_batch_wrapper));
 | |
| //  //ON_CALL(leader_coordinator, coordinate(_))
 | |
| //  //    .WillByDefault(Return(OB_SUCCESS));
 | |
| //  ASSERT_EQ(OB_SUCCESS, bootstrap.execute_bootstrap());
 | |
| //  ASSERT_NE(OB_SUCCESS, bootstrap.execute_bootstrap());
 | |
| //}
 | |
| //
 | |
| // TEST_F(TestBootstrap, execute_bootstrap)
 | |
| //{
 | |
| //  call_execute_bootstrap();
 | |
| //}
 | |
| //
 | |
| // TEST_F(TestBootstrap, standalone_root_service)
 | |
| //{
 | |
| //  db_initer_.get_config().enable_rootservice_standalone= true;
 | |
| //  call_execute_bootstrap();
 | |
| //}
 | |
| //
 | |
| // TEST_F(TestBootstrap, execute_bootstrap_invalid_rs_list)
 | |
| //{
 | |
| //  ObServerInfoList rs_list;
 | |
| //  MockLeaderCoordinator leader_coordinator;
 | |
| //  ObBootstrap bootstrap(rpc_proxy_, rs_list, ddl_service_, unit_mgr_, leader_coordinator,
 | |
| //      db_initer_.get_config());
 | |
| //  ASSERT_EQ(OB_INNER_STAT_ERROR, bootstrap.execute_bootstrap());
 | |
| //}
 | |
| //
 | |
| // TEST_F(TestBootstrap, gen_sys_unit_ids)
 | |
| //{
 | |
| //  ObArray<ObZone> zones;
 | |
| //  ASSERT_EQ(OB_SUCCESS, zones.push_back("zone2"));
 | |
| //  ASSERT_EQ(OB_SUCCESS, zones.push_back("zone1"));
 | |
| //  ASSERT_EQ(OB_SUCCESS, zones.push_back("zone3"));
 | |
| //
 | |
| //  ObArray<uint64_t> uids;
 | |
| //  ASSERT_EQ(OB_SUCCESS, ObBaseBootstrap::gen_sys_unit_ids(zones, uids));
 | |
| //  ASSERT_EQ(3, uids.count());
 | |
| //  ASSERT_EQ(OB_SYS_UNIT_ID + 1, uids.at(0));
 | |
| //  ASSERT_EQ(OB_SYS_UNIT_ID + 0, uids.at(1));
 | |
| //  ASSERT_EQ(OB_SYS_UNIT_ID + 2, uids.at(2));
 | |
| //}
 | |
| TEST_F(TestBootstrap, construct_all_schema)
 | |
| {
 | |
|   MockLeaderCoordinator leader_coordinator;
 | |
|   ObRsGtsManager gts;
 | |
|   ObBootstrapArg arg;
 | |
|   arg.server_list_.assign(rs_list_);
 | |
|   arg.cluster_type_ = PRIMARY_CLUSTER;
 | |
|   ObBootstrap bootstrap(
 | |
|       rpc_proxy_, ddl_service_, unit_mgr_, leader_coordinator, db_initer_.get_config(), arg, gts, rs_rpc_proxy_);
 | |
| 
 | |
|   ObArray<ObTableSchema> table_schema;
 | |
|   ASSERT_EQ(OB_SUCCESS, bootstrap.construct_all_schema(table_schema));
 | |
|   int64_t size = 0;
 | |
|   for (int64_t i = 0; i < table_schema.count(); i++) {
 | |
|     size += table_schema.at(i).get_serialize_size();
 | |
|     LOG_INFO("calc size", K(size));
 | |
|   }
 | |
| }
 | |
| }  // end namespace rootserver
 | |
| }  // end namespace oceanbase
 | |
| 
 | |
| int main(int argc, char** argv)
 | |
| {
 | |
|   oceanbase::common::ObLogger::get_logger().set_log_level("INFO");
 | |
|   ::testing::InitGoogleTest(&argc, argv);
 | |
|   oceanbase::common::ObClusterVersion::get_instance().init(CLUSTER_VERSION_2200);
 | |
|   oceanbase::common::ObTenantManager::get_instance().init(10);
 | |
|   oceanbase::common::ObTenantManager::get_instance().add_tenant(OB_SYS_TENANT_ID);
 | |
|   oceanbase::common::ObTenantManager::get_instance().set_tenant_mem_limit(
 | |
|       OB_SYS_TENANT_ID, 1024L * 1024L * 1024L, 1024L * 1024L * 1024L);
 | |
|   return RUN_ALL_TESTS();
 | |
| }
 | 
