128 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.7 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.
 | |
|  */
 | |
| 
 | |
| #include "basic_archive.h"
 | |
| #include "lib/ob_errno.h"
 | |
| #include <cstdint>
 | |
| #include "cluster/logservice/env/ob_simple_log_cluster_env.h"
 | |
| #include "lib/time/ob_time_utility.h"
 | |
| 
 | |
| namespace oceanbase
 | |
| {
 | |
| namespace unittest
 | |
| {
 | |
| class MySimpleArchiveInstance : public ObSimpleArchive
 | |
| {
 | |
| public:
 | |
|   MySimpleArchiveInstance() : ObSimpleArchive() {}
 | |
| };
 | |
| static const int64_t ONE_MINUTE = 60L * 1000 * 1000 * 1000;
 | |
| TEST_F(MySimpleArchiveInstance, test_archive_mgr)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   // 创建普通租户以及用户表
 | |
|   ret = prepare();
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   ret = prepare_dest();
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   const uint64_t tenant_id = tenant_ids_[0];
 | |
|   int64_t round_id = 0;
 | |
| 
 | |
|   // =============== 首次开启归档 ================ //
 | |
|   // 开启归档
 | |
|   round_id = 1;  // 第一轮开启, round_id == 1
 | |
|   ret = run_archive(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // 检查rs归档状态为BEGINNING
 | |
|   ret = check_rs_beginning(tenant_id, round_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // 检查rs归档状态为DOING
 | |
|   ret = check_rs_doing(tenant_id, round_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // 检查rs归档进度
 | |
|   ret = check_rs_archive_progress(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // 检查日志流归档状态推进
 | |
|   ret = check_archive_progress(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // 检查日志流归档任务
 | |
|   ret = check_ls_archive_task(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // fake关闭归档组件
 | |
|   ret = fake_stop_component(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   /*
 | |
|    * TODO 暂时关闭该部分单测内容
 | |
|    * 需要补齐功能:
 | |
|    * 1. INTERRUPT持久化内部表在没有piece记录场景没有覆盖到
 | |
|    * 2. 切piece与切archive server目前可能造成归档进度回退, rs无法推进进度
 | |
|    *
 | |
|   // 检查归档任务全部处理完成
 | |
|   ret = check_task_finish(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // fake修改piece相关信息, 将piece interval修改为秒级别
 | |
|   ret = fake_piece_info_after_fake_stop(tenant_id, ONE_MINUTE);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // fake删除日志流归档任务
 | |
|   ret = fake_remove_ls(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // fake重启归档组件
 | |
|   ret = fake_restart_component(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // 检查重启归档组件后, rs归档进度
 | |
|   ret = check_rs_archive_progress(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // 检查日志流归档状态推进
 | |
|   ret = check_archive_progress(tenant_id, true);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   */
 | |
|   // =============== 关闭归档 ================ //
 | |
|   ret = stop_archive();
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   ret = check_rs_stop(tenant_id, round_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // =============== 重新开启归档 ================ //
 | |
|   round_id = 2;
 | |
|   ret = run_archive(tenant_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   // 检查归档组件处于doing
 | |
|   ret = check_rs_doing(tenant_id, round_id);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| }
 | |
| 
 | |
| } // namespace unittest
 | |
| } // namespace oceanbase
 | |
| 
 | |
| int main(int argc, char **argv)
 | |
| {
 | |
|   OB_LOGGER.set_file_name("test_archive_mgr.log", true, false, "test_archive_mgr_rs.log", "test_archive_election.log");
 | |
|   OB_LOGGER.set_log_level("INFO");
 | |
|   ::testing::InitGoogleTest(&argc, argv);
 | |
|   return RUN_ALL_TESTS();
 | |
| }
 | 
