125 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.6 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.
 | |
|  */
 | |
| 
 | |
| #ifndef OCEANBASE_STORAGE_INIT_BASIC_STRUCT_H_
 | |
| #define OCEANBASE_STORAGE_INIT_BASIC_STRUCT_H_
 | |
| #include "share/ob_rpc_struct.h"
 | |
| #include "share/schema/ob_table_schema.h"
 | |
| #include "share/ob_tenant_info_proxy.h"
 | |
| #include "logservice/palf/palf_base_info.h"
 | |
| #include "share/scn.h"
 | |
| namespace oceanbase
 | |
| {
 | |
| namespace storage
 | |
| {
 | |
| 
 | |
| int build_test_schema(share::schema::ObTableSchema &table_schema, uint64_t table_id)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   ObColumnSchemaV2 column;
 | |
|   table_schema.reset();
 | |
|   table_schema.set_table_name("test_merge");
 | |
|   table_schema.set_tenant_id(1);
 | |
|   table_schema.set_tablegroup_id(1);
 | |
|   table_schema.set_database_id(1);
 | |
|   table_schema.set_table_id(table_id);
 | |
|   table_schema.set_schema_version(1000);
 | |
| 
 | |
|   column.set_table_id(table_id);
 | |
|   column.set_column_id(16);
 | |
|   column.set_column_name("a");
 | |
|   column.set_data_type(ObIntType);
 | |
|   column.set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI);
 | |
|   column.set_rowkey_position(1);
 | |
|   table_schema.set_max_used_column_id(1);
 | |
|   if (OB_FAIL(table_schema.add_column(column))) {
 | |
|    STORAGE_LOG(WARN, "failed to add column", KR(ret), K(column));
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| int gen_create_ls_arg(const int64_t tenant_id,
 | |
|     const share::ObLSID &ls_id,
 | |
|     obrpc::ObCreateLSArg &arg)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   ObReplicaType replica_type = REPLICA_TYPE_FULL;
 | |
|   ObReplicaProperty property;
 | |
|   share::ObAllTenantInfo tenant_info;
 | |
|   const share::SCN create_scn = share::SCN::base_scn();
 | |
|   arg.reset();
 | |
|   lib::Worker::CompatMode compat_mode = lib::Worker::CompatMode::MYSQL;
 | |
|   palf::PalfBaseInfo palf_base_info;
 | |
|   if (OB_FAIL(tenant_info.init(tenant_id, share::PRIMARY_TENANT_ROLE))) {
 | |
|     STORAGE_LOG(WARN, "failed to init tenant info", KR(ret), K(tenant_id));
 | |
|   } else if (OB_FAIL(arg.init(tenant_id, ls_id, replica_type, property, tenant_info, create_scn, compat_mode, false, palf_base_info))) {
 | |
|    STORAGE_LOG(WARN, "failed to init arg", KR(ret), K(tenant_id), K(ls_id), K(tenant_info), K(create_scn), K(compat_mode), K(palf_base_info));
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| int gen_create_tablet_arg(const int64_t tenant_id,
 | |
|     const share::ObLSID &ls_id,
 | |
|     const ObTabletID &tablet_id,
 | |
|     obrpc::ObBatchCreateTabletArg &arg,
 | |
|     const int64_t count = 1,
 | |
|     share::schema::ObTableSchema *out_table_schema = nullptr)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   obrpc::ObCreateTabletInfo tablet_info;
 | |
|   ObArray<common::ObTabletID> index_tablet_ids;
 | |
|   ObArray<int64_t> index_tablet_schema_idxs;
 | |
|   uint64_t table_id = 12345;
 | |
|   arg.reset();
 | |
|   share::schema::ObTableSchema table_schema_obj;
 | |
|   share::schema::ObTableSchema *table_schema_ptr = nullptr;
 | |
|   if (out_table_schema != nullptr) {
 | |
|     table_schema_ptr = out_table_schema;
 | |
|   } else {
 | |
|     table_schema_ptr = &table_schema_obj;
 | |
|   }
 | |
|   share::schema::ObTableSchema &table_schema = *table_schema_ptr;
 | |
|   if (OB_FAIL(build_test_schema(table_schema, table_id))) {
 | |
|     STORAGE_LOG(WARN, "failed to build test table schema", KR(ret), K(table_id));
 | |
|   }
 | |
| 
 | |
|   for(int64_t i = 0; OB_SUCC(ret) && i < count; i++) {
 | |
|     ObTabletID tablet_id_insert(tablet_id.id() + i);
 | |
|     if (OB_FAIL(index_tablet_ids.push_back(tablet_id_insert))) {
 | |
|       STORAGE_LOG(WARN, "failed to push back tablet id", KR(ret), K(tablet_id_insert));
 | |
|     } else if (OB_FAIL(index_tablet_schema_idxs.push_back(0))) {
 | |
|       STORAGE_LOG(WARN, "failed to push back index id", KR(ret));
 | |
|     }
 | |
|   }
 | |
| 
 | |
| 
 | |
|   if (FAILEDx(tablet_info.init(index_tablet_ids,
 | |
|           tablet_id,
 | |
|           index_tablet_schema_idxs,
 | |
|           lib::Worker::CompatMode::MYSQL,
 | |
|           false))) {
 | |
|     STORAGE_LOG(WARN, "failed to init tablet info", KR(ret), K(index_tablet_ids),
 | |
|         K(tablet_id), K(index_tablet_schema_idxs));
 | |
|   } else if (OB_FAIL(arg.init_create_tablet(ls_id, share::SCN::min_scn(), false/*need_check_tablet_cnt*/))) {
 | |
|     STORAGE_LOG(WARN, "failed to init create tablet", KR(ret), K(tenant_id), K(ls_id));
 | |
|   } else if (OB_FAIL(arg.table_schemas_.push_back(table_schema))) {
 | |
|     STORAGE_LOG(WARN, "failed to push back table schema", KR(ret), K(table_schema));
 | |
|   } else if (OB_FAIL(arg.tablets_.push_back(tablet_info))) {
 | |
|     STORAGE_LOG(WARN, "failed to push back tablet info", KR(ret), K(tablet_info));
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| }//end namespace storage
 | |
| }//end namespace oceanbase
 | |
| 
 | |
| #endif //OCEANBASE_STORAGE_INIT_BASIC_STRUCT_H_
 | 
