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();
|
|
}
|