oceanbase/unittest/rootserver/test_ddl_operator.cpp
wangzelin.wzl 93a1074b0c patch 4.0
2022-10-24 17:57:12 +08:00

514 lines
20 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>
#define private public
#define protected public
#include "lib/stat/ob_session_stat.h"
#include "../share/schema/db_initializer.h"
#include "share/schema/ob_schema_getter_guard.h"
#include "share/schema/ob_multi_version_schema_service.h"
#include "share/schema/ob_schema_service_sql_impl.h"
#include "share/inner_table/ob_inner_table_schema.h"
#include "lib/mysqlclient/ob_mysql_transaction.h"
#include "lib/string/ob_sql_string.h"
#include "share/ob_srv_rpc_proxy.h"
#include "rootserver/ob_ddl_operator.h"
#include "../share/schema/ob_schema_test_utils.cpp"
namespace oceanbase
{
using namespace common;
using namespace obrpc;
using namespace share;
using namespace share::schema;
namespace rootserver
{
class TestDDLOperator : public ::testing::Test
{
public:
TestDDLOperator();
virtual ~TestDDLOperator() {}
virtual void SetUp();
virtual void TearDown();
protected:
int create_tenant(const char *tenant_name, uint64_t &tenant_id);
int create_database(const uint64_t tenant_id, const char *database_name,
uint64_t &database_id);
int create_tablegroup(const uint64_t tenant_id, const char *tablegroup_name,
uint64_t &tablegroup_id);
int create_table(const uint64_t tenant_id, const uint64_t database_id,
const uint64_t tablegroup_id, const char *table_name,
uint64_t &table_id);
DBInitializer db_initer_;
ObMultiVersionSchemaService multi_schema_service_;
ObSrvRpcProxy srv_rpc_proxy_;
ObDDLOperator ddl_operator_;
uint64_t pre_tenant_id_;
uint64_t pre_database_id_;
uint64_t pre_tablegroup_id_;
uint64_t pre_table_id_;
};
TestDDLOperator::TestDDLOperator()
: db_initer_(),
multi_schema_service_(),
srv_rpc_proxy_(),
ddl_operator_(multi_schema_service_, db_initer_.get_sql_proxy())
{
ObCompatModeGetter::instance().init(&db_initer_.get_sql_proxy());
}
void TestDDLOperator::TearDown()
{
ObKVGlobalCache::get_instance().destroy();
}
void TestDDLOperator::SetUp()
{
int ret = db_initer_.init();
ASSERT_EQ(OB_SUCCESS, ret);
common::ObKVGlobalCache::get_instance().init();
const bool only_core_tables = false;
ret = db_initer_.create_system_table(only_core_tables);
ASSERT_EQ(OB_SUCCESS, ret);
ret = multi_schema_service_.init(&db_initer_.get_sql_proxy(), &db_initer_.get_config(),
OB_MAX_VERSION_COUNT, OB_MAX_VERSION_COUNT_FOR_MERGE, false);
ASSERT_EQ(OB_SUCCESS, ret);
ObSchemaService *schema_service = multi_schema_service_.get_schema_service();
ASSERT_TRUE(NULL != schema_service);
ret = db_initer_.fill_sys_stat_table();
ASSERT_EQ(OB_SUCCESS, ret);
//ret = multi_schema_service_.refresh_and_add_schema();
//ASSERT_EQ(OB_SUCCESS, ret);
// insert system tenant, make refresh tenant succeed,
// ob_schema_test_utils.cpp is ugly, it need schema_service_ of type schema_serivce_sql_impl_ be
// defined
ObTenantSchema tenant_schema;
tenant_schema.set_tenant_id(OB_SYS_TENANT_ID);
tenant_schema.set_tenant_name(OB_SYS_TENANT_NAME);
tenant_schema.set_locality("F@test");
tenant_schema.add_zone("test");
CREATE_TENANT(ret, tenant_schema);
ObTableSchema table_schema;
for (int64_t i = 0; OB_SUCC(ret) && NULL != share::sys_table_schema_creators[i]; ++i)
{
table_schema.reset();
table_schema.set_expire_info(ObString::make_string("a > b"));
ASSERT_EQ(OB_SUCCESS, (*share::sys_table_schema_creators[i])(table_schema));
ObSchemaTestUtils::table_set_tenant(table_schema, OB_SYS_TENANT_ID);
CREATE_USER_TABLE_SCHEMA(ret, table_schema);
}
for (int64_t i = 0; OB_SUCC(ret) && NULL != share::core_table_schema_creators[i]; ++i)
{
table_schema.reset();
table_schema.set_expire_info(ObString::make_string("a > b"));
ASSERT_EQ(OB_SUCCESS, (*share::core_table_schema_creators[i])(table_schema));
ObSchemaTestUtils::table_set_tenant(table_schema, OB_SYS_TENANT_ID);
CREATE_USER_TABLE_SCHEMA(ret, table_schema);
}
for (int64_t i = 0; OB_SUCC(ret) && NULL != share::virtual_table_schema_creators[i]; ++i)
{
table_schema.reset();
ASSERT_EQ(OB_SUCCESS, (*share::virtual_table_schema_creators[i])(table_schema));
ObSchemaTestUtils::table_set_tenant(table_schema, OB_SYS_TENANT_ID);
CREATE_USER_TABLE_SCHEMA(ret, table_schema);
}
for (int64_t i = 0; OB_SUCC(ret) && NULL != share::information_schema_table_schema_creators[i]; ++i)
{
table_schema.reset();
ASSERT_EQ(OB_SUCCESS, (*share::information_schema_table_schema_creators[i])(table_schema));
ObSchemaTestUtils::table_set_tenant(table_schema, OB_SYS_TENANT_ID);
CREATE_USER_TABLE_SCHEMA(ret, table_schema);
}
for (int64_t i = 0; OB_SUCC(ret) && NULL != share::mysql_table_schema_creators[i]; ++i)
{
table_schema.reset();
ASSERT_EQ(OB_SUCCESS, (*share::mysql_table_schema_creators[i])(table_schema));
ObSchemaTestUtils::table_set_tenant(table_schema, OB_SYS_TENANT_ID);
CREATE_USER_TABLE_SCHEMA(ret, table_schema);
}
// create sys_tenant default tablegroup and database
ObTablegroupSchema sys_tg_schema;
ObDatabaseSchema sys_db_schema;
FILL_TABLEGROUP_SCHEMA(sys_tg_schema, OB_SYS_TENANT_ID,
OB_SYS_TABLEGROUP_ID, "default tg", "default tg");
FILL_DATABASE_SCHEMA(sys_db_schema, OB_SYS_TENANT_ID,
OB_SYS_DATABASE_ID, "default db", "default db");
CREATE_TABLEGROUP_SCHEMA(ret, sys_tg_schema);
CREATE_DATABASE_SCHEMA(ret, sys_db_schema);
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
pre_tenant_id_ = OB_INVALID_ID;
pre_database_id_ = OB_INVALID_ID;
pre_tablegroup_id_ = OB_INVALID_ID;
pre_table_id_ = OB_INVALID_ID;
// pre create schema to make drop ddl operation easy to test
ASSERT_EQ(OB_SUCCESS, create_tenant("11", pre_tenant_id_));
ASSERT_EQ(OB_SUCCESS, create_database(pre_tenant_id_, "pre_create_db", pre_database_id_));
ASSERT_EQ(OB_SUCCESS, create_tablegroup(pre_tenant_id_, "pre_create_tg", pre_tablegroup_id_));
ASSERT_EQ(OB_SUCCESS, create_table(pre_tenant_id_, pre_database_id_, pre_tablegroup_id_,
"pre_create_table", pre_table_id_));
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
}
int TestDDLOperator::create_tenant(const char *tenant_name, uint64_t &tenant_id)
{
int ret = OB_SUCCESS;
ObTenantSchema tenant_schema;
ObSysVariableSchema sys_variable_schema;
if (OB_FAIL(multi_schema_service_.get_schema_service()->fetch_new_tenant_id(tenant_id))) {
LOG_WARN("fetch_new_tenant_id failed", K(ret));
} else {
tenant_schema.set_tenant_id(tenant_id);
tenant_schema.set_tenant_name(tenant_name);
tenant_schema.set_comment("this is a test tenant");
tenant_schema.set_primary_zone(ObString::make_string("test"));
tenant_schema.add_zone("test");
tenant_schema.set_locality("");
tenant_schema.set_compatibility_mode(ObCompatibilityMode::MYSQL_MODE);
}
if (OB_SUCC(ret)) {
if (OB_FAIL(db_initer_.create_tenant_space_tables(tenant_id))) {
LOG_WARN("create_tenant_space tables failed", K(tenant_id), K(ret));
}
}
ObMySQLTransaction trans;
ObCreateTenantArg fake_arg;
if (OB_FAIL(ret)) {
} else if (OB_FAIL(trans.start(&db_initer_.get_sql_proxy()))) {
LOG_WARN("start transaction failed", K(ret));
} else if (OB_FAIL(ddl_operator_.create_tenant(fake_arg, tenant_schema, trans))) {
LOG_WARN("ddl_operator_ create_tenant failed", K(tenant_schema), K(ret));
}
if (OB_SUCC(ret)) {
ObSysVariableSchema sys_variable_schema;
INIT_SYS_VARIABLE(trans, tenant_schema, sys_variable_schema);
}
if (trans.is_started()) {
const bool commit = OB_SUCCESS == ret;
int commit_ret = trans.end(commit);
if (OB_SUCCESS != commit_ret) {
LOG_WARN("trans end failed", K(commit), K(commit_ret));
ret = (OB_SUCCESS == ret) ? commit_ret : ret;
}
}
if (OB_SUCC(ret)) {
if (OB_FAIL(db_initer_.create_tenant_space(tenant_id))) {
LOG_WARN("create_tenant_space failed", K(tenant_id), K(ret));
}
}
return ret;
}
int TestDDLOperator::create_database(const uint64_t tenant_id, const char *database_name,
uint64_t &database_id)
{
int ret = OB_SUCCESS;
ObDatabaseSchema database_schema;
database_schema.set_tenant_id(tenant_id);
database_schema.set_database_id(OB_INVALID_ID);
database_schema.set_database_name(database_name);
database_schema.set_comment("this is a test db");
database_schema.set_primary_zone("test");
database_schema.add_zone("test");
ObArray<ObString> zone_list;
ObMySQLTransaction trans;
if (OB_FAIL(trans.start(&db_initer_.get_sql_proxy()))) {
LOG_WARN("start transaction failed", K(ret));
} else if (OB_FAIL(ddl_operator_.create_database(database_schema, trans))) {
LOG_WARN("ddl_operator_ create_database failed", K(database_schema), K(ret));
} else if (OB_FAIL(zone_list.push_back(ObString::make_string("test")))) {
LOG_WARN("construct zone list failed", K(ret));
} else {
database_schema.set_zone_list(zone_list);
}
database_id = database_schema.get_database_id();
if (trans.is_started()) {
const bool commit = OB_SUCCESS == ret;
int commit_ret = trans.end(commit);
if (OB_SUCCESS != commit_ret) {
LOG_WARN("trans end failed", K(commit), K(commit_ret));
ret = (OB_SUCCESS == ret) ? commit_ret : ret;
}
}
return ret;
}
int TestDDLOperator::create_tablegroup(const uint64_t tenant_id, const char *tablegroup_name,
uint64_t &tablegroup_id)
{
int ret = OB_SUCCESS;
ObTablegroupSchema tablegroup_schema;
tablegroup_schema.set_tenant_id(tenant_id);
tablegroup_schema.set_tablegroup_id(OB_INVALID_ID);
tablegroup_schema.set_tablegroup_name(tablegroup_name);
tablegroup_schema.set_comment("this is a test tg");
ObMySQLTransaction trans;
if (OB_FAIL(trans.start(&db_initer_.get_sql_proxy()))) {
LOG_WARN("start transaction failed", K(ret));
} else if (OB_FAIL(ddl_operator_.create_tablegroup(tablegroup_schema, trans))) {
LOG_WARN("ddl_operator_ create_tablegroup failed", K(tablegroup_schema), K(ret));
}
tablegroup_id = tablegroup_schema.get_tablegroup_id();
if (trans.is_started()) {
const bool commit = OB_SUCCESS == ret;
int commit_ret = trans.end(commit);
if (OB_SUCCESS != commit_ret) {
LOG_WARN("trans end failed", K(commit), K(commit_ret));
ret = (OB_SUCCESS == ret) ? commit_ret : ret;
}
}
return ret;
}
int TestDDLOperator::create_table(const uint64_t tenant_id, const uint64_t database_id,
const uint64_t tablegroup_id, const char *table_name,
uint64_t &table_id)
{
int ret = OB_SUCCESS;
ObTableSchema table_schema;
if (OB_FAIL(multi_schema_service_.get_schema_service()->fetch_new_table_id(
pre_tenant_id_, table_id))) {
LOG_WARN("fetch_new_table_id failed", K(ret));
} else {
LOG_INFO("table id get", K(table_id));
share::ObInnerTableSchema::all_server_schema(table_schema);
table_schema.set_tenant_id(tenant_id);
table_schema.set_database_id(database_id);
table_schema.set_tablegroup_id(tablegroup_id);
table_schema.set_table_id(table_id);
table_schema.set_table_type(USER_TABLE);
table_schema.set_table_name(table_name);
table_schema.set_part_level(PARTITION_LEVEL_ONE);
table_schema.get_part_option().set_part_num(3);
table_schema.get_part_option().set_max_used_part_id(2);
table_schema.set_primary_zone("test");
table_schema.add_zone("test");
}
ObMySQLTransaction trans;
if (OB_FAIL(ret)) {
} else if (OB_FAIL(trans.start(&db_initer_.get_sql_proxy()))) {
LOG_WARN("start transaction failed", K(ret));
} else if (OB_FAIL(ddl_operator_.create_table(table_schema, trans))) {
LOG_WARN("ddl_operator_ create_table failed", K(table_schema), K(ret));
}
if (trans.is_started()) {
const bool commit = OB_SUCCESS == ret;
int commit_ret = trans.end(commit);
if (OB_SUCCESS != commit_ret) {
LOG_WARN("trans end failed", K(commit), K(commit_ret));
ret = (OB_SUCCESS == ret) ? commit_ret : ret;
}
}
return ret;
}
TEST_F(TestDDLOperator, create_tenant)
{
uint64_t tenant_id = OB_INVALID_ID;
ASSERT_EQ(OB_SUCCESS, create_tenant("hai", tenant_id));
ASSERT_NE(OB_INVALID_ID, tenant_id);
//const ObSchemaManager *schema_manager = NULL;
ObSchemaGetterGuard schema_guard;
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
//schema_manager = multi_schema_service_.get_schema_manager_by_version();
//ASSERT_TRUE(NULL != schema_manager);
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.get_schema_guard(schema_guard));
//const ObTenantSchema *p_tenant = schema_manager->get_const_priv_mgr().get_tenant_info("hai");
const ObTenantSchema *p_tenant = NULL;
ASSERT_EQ(OB_SUCCESS, schema_guard.get_tenant_info("hai", p_tenant));
ASSERT_TRUE(NULL != p_tenant);
}
TEST_F(TestDDLOperator, create_database)
{
uint64_t database_id = OB_INVALID_ID;
ASSERT_EQ(OB_SUCCESS, create_database(pre_tenant_id_, "haijing_database", database_id));
ASSERT_NE(OB_INVALID_ID, database_id);
}
TEST_F(TestDDLOperator, create_tablegroup)
{
uint64_t tablegroup_id = OB_INVALID_ID;
ASSERT_EQ(OB_SUCCESS, create_tablegroup(pre_tenant_id_, "haijing_tablegroup", tablegroup_id));
ASSERT_NE(OB_INVALID_ID, tablegroup_id);
}
TEST_F(TestDDLOperator, drop_tenant)
{
ObMySQLTransaction trans;
ASSERT_EQ(OB_SUCCESS, trans.start(&db_initer_.get_sql_proxy()));
//const ObSchemaManager *schema_manager = NULL;
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
//schema_manager = multi_schema_service_.get_schema_manager_by_version();
//ASSERT_TRUE(NULL != schema_manager);
ObSchemaGetterGuard schema_guard;
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.get_schema_guard(schema_guard));
ObDatabaseSchema db_schema;
db_schema.set_tenant_id(pre_tenant_id_);
db_schema.set_database_id(pre_database_id_);
ASSERT_EQ(OB_SUCCESS, ddl_operator_.drop_database(db_schema, trans, schema_guard));
ASSERT_EQ(OB_SUCCESS, trans.end(true));
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
uint64_t tablegroup_id = OB_INVALID_ID;
uint64_t database_id = OB_INVALID_ID;
uint64_t table_id = OB_INVALID_ID;
ObSchemaGetterGuard schema_guard2;
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.get_schema_guard(schema_guard2));
ASSERT_EQ(OB_SUCCESS, schema_guard2.get_database_id(pre_tenant_id_,
"pre_create_db", database_id));
ASSERT_EQ(OB_INVALID_ID, database_id);
ASSERT_EQ(OB_SUCCESS, schema_guard2.get_tablegroup_id(pre_tenant_id_,
"pre_create_tablegroup", tablegroup_id));
ASSERT_EQ(OB_INVALID_ID, tablegroup_id);
ASSERT_EQ(OB_SUCCESS, schema_guard2.get_table_id(pre_tenant_id_,
pre_database_id_, "pre_create_table", false, ObSchemaGetterGuard::ALL_NON_HIDDEN_TYPES, table_id));
ASSERT_EQ(OB_INVALID_ID, table_id);
//bool is_exist = false;
//const bool is_index = false;
//ASSERT_EQ(OB_SUCCESS, schema_manager->check_database_exist(
// pre_tenant_id_, "pre_create_db", database_id, is_exist));
//ASSERT_FALSE(is_exist);
//ASSERT_EQ(OB_SUCCESS, schema_manager->check_tablegroup_exist(
// pre_tenant_id_, "pre_create_tablegroup", tablegroup_id, is_exist));
//ASSERT_FALSE(is_exist);
//ASSERT_EQ(OB_SUCCESS, schema_manager->check_table_exist(pre_tenant_id_, pre_database_id_,
// "pre_create_table", is_index, is_exist));
//ASSERT_FALSE(is_exist);
}
TEST_F(TestDDLOperator, drop_database)
{
ObMySQLTransaction trans;
ObDatabaseSchema db_schema;
db_schema.set_tenant_id(pre_tenant_id_);
db_schema.set_database_id(pre_database_id_);
ObSchemaGetterGuard schema_guard;
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.get_schema_guard(schema_guard));
ASSERT_EQ(OB_SUCCESS, trans.start(&db_initer_.get_sql_proxy()));
ASSERT_EQ(OB_SUCCESS, ddl_operator_.drop_database(db_schema, trans, schema_guard));
ASSERT_EQ(OB_SUCCESS, trans.end(true));
//const ObSchemaManager *schema_manager = NULL;
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
//schema_manager = multi_schema_service_.get_schema_manager_by_version();
//ASSERT_TRUE(NULL != schema_manager);
// check whether database and table exist
uint64_t database_id = OB_INVALID_ID;
//bool is_exist = false;
//const bool is_index = false;
ObSchemaGetterGuard schema_guard2;
ASSERT_EQ(OB_SUCCESS, multi_schema_service_.get_schema_guard(schema_guard2));
ASSERT_EQ(OB_SUCCESS, schema_guard2.get_database_id(pre_tenant_id_, "pre_create_db", database_id));
ASSERT_EQ(OB_INVALID_ID, database_id);
//ASSERT_EQ(OB_SUCCESS, schema_manager->check_database_exist(
// pre_tenant_id_, "pre_create_db", database_id, is_exist));
//ASSERT_FALSE(is_exist);
//ASSERT_EQ(OB_SUCCESS, schema_manager->check_table_exist(pre_tenant_id_, pre_database_id_,
// "pre_create_table", is_index, is_exist));
//ASSERT_FALSE(is_exist);
}
TEST_F(TestDDLOperator, drop_tablegroup)
{
//ObMySQLTransaction trans;
//// drop tablegroup
//ASSERT_EQ(OB_SUCCESS, trans.start(&db_initer_.get_sql_proxy()));
//ASSERT_EQ(OB_TABLEGROUP_NOT_EMPTY, ddl_operator_.drop_tablegroup(
// pre_tenant_id_, pre_tablegroup_id_, trans));
//ASSERT_EQ(OB_SUCCESS, trans.end(true));
////const ObSchemaManager *schema_manager = NULL;
//ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
////schema_manager = multi_schema_service_.get_schema_manager_by_version();
//ObSchemaGetterGuard schema_guard;
//ASSERT_EQ(OB_SUCCESS, multi_schema_service_.get_schema_guard(schema_guard));
//// drop table first
////const ObTableSchema *table_schema = schema_manager->get_table_schema(
//// pre_tenant_id_, pre_database_id_, "pre_create_table", false);
//const ObTableSchema *table_schema = NULL;
//ASSERT_EQ(OB_SUCCESS, schema_guard.get_table_schema(
// pre_tenant_id_, pre_database_id_, "pre_create_table", table_schema));
//ASSERT_TRUE(NULL != table_schema);
//ASSERT_EQ(OB_SUCCESS, trans.start(&db_initer_.get_sql_proxy()));
//ASSERT_EQ(OB_SUCCESS, ddl_operator_.drop_table(*table_schema, trans));
//ASSERT_EQ(OB_SUCCESS, trans.end(true));
//ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
////schema_manager = multi_schema_service_.get_schema_manager_by_version();
//// drop tablegroup
//ASSERT_EQ(OB_SUCCESS, trans.start(&db_initer_.get_sql_proxy()));
//ASSERT_EQ(OB_SUCCESS, ddl_operator_.drop_tablegroup(pre_tenant_id_, pre_tablegroup_id_, trans));
//ASSERT_EQ(OB_SUCCESS, trans.end(true));
//ASSERT_EQ(OB_SUCCESS, multi_schema_service_.refresh_and_add_schema());
////schema_manager = multi_schema_service_.get_schema_manager_by_version();
//// check whether table and table exist
//uint64_t tablegroup_id = OB_INVALID_ID;
//uint64_t table_id = OB_INVALID_ID;
////bool is_exist = false;
////ASSERT_EQ(OB_SUCCESS, schema_manager->check_tablegroup_exist(
//// pre_tenant_id_, "pre_create_tablegroup", tablegroup_id, is_exist));
////ASSERT_FALSE(is_exist);
////const bool is_index = false;
////ASSERT_EQ(OB_SUCCESS, schema_manager->check_table_exist(
//// pre_tenant_id_, pre_database_id_, "test_user_table", is_index, is_exist));
////ASSERT_FALSE(is_exist);
//ASSERT_EQ(OB_SUCCESS, schema_guard.get_tablegroup_id(
// pre_tenant_id_, "pre_create_tablegroup", tablegroup_id));
//ASSERT_EQ(OB_INVALID_ID, tablegroup_id);
//ASSERT_EQ(OB_SUCCESS, schema_guard.get_table_id(
// pre_tenant_id_, pre_database_id_, "test_user_table",table_id));
//ASSERT_EQ(OB_INVALID_ID, table_id);
}
}// end namespace rootserver
}// end namespace oceanbase
int main(int argc, char **argv)
{
system("rm -rf test_ddl_operator.log");
oceanbase::common::ObLogger::get_logger().set_log_level("INFO");
OB_LOGGER.set_file_name("test_ddl_operator.log", true);
::testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}