int ObDirectTriggerEventUtil::refresh_new_config(ObResultSet &result, ObSqlContext &context) { int err = OB_SUCCESS; // fire an event to tell all clusters char buf[OB_MAX_SQL_LENGTH] = ""; ObString stmt; stmt.assign_buffer(buf, sizeof (buf)); if (OB_SUCCESS != (err = ObTriggerEventUtil::format(stmt, REFRESH_NEW_CONFIG_TRIGGER, 0))) { TBSYS_LOG(WARN, "fail to format sql. err=%d", err); } else if (OB_SUCCESS != (err = ObSql::direct_execute(stmt, result, context))) { TBSYS_LOG(ERROR, "fail to trigger refresh_new_config event. err[%d]", err); } else { TBSYS_LOG(INFO, "trigger refresh_new_config event succ: err[%d]", err); } return err; }
//migrate_over TEST(ObRootServer2Test2, migrate_over) { // init make a root table ObRootServer2* root_server; ObRootWorkerForTest worker; root_server = worker.get_root_server(); int64_t now = tbsys::CTimeUtil::getTime(); ASSERT_TRUE(root_server->init("./root_server.conf", 100, &worker)); ObRootServerTester tester(root_server); ObServer server(ObServer::IPV4, "10.10.10.1", 1001); ObServer server2(ObServer::IPV4, "10.10.10.2", 1001); ObServer server3(ObServer::IPV4, "10.10.10.3", 1001); ObServer server4(ObServer::IPV4, "10.10.10.4", 1001); ASSERT_TRUE(!(server == server2)); int64_t time_stamp = now; root_server->start_threads(); int status; tester.get_wait_init_time() = 2 * 1000000; sleep(2); int ret = root_server->regist_server(server, false, status); ASSERT_EQ(OB_SUCCESS, ret); ret = root_server->regist_server(server2, false, status); ASSERT_EQ(OB_SUCCESS, ret); // now we have two cs tester.get_lease_duration() = 100 * 1000 * 1000; TBSYS_LOG(INFO, "will start test"); //tester.init_root_table_by_report(); TBSYS_LOG(INFO, "over send start_new_schema now %d have sended",worker.start_new_send_times); time_stamp = 0; //all commond sended. //mimic report char buf1[10][30]; char buf2[10][30]; //const common::ObTabletInfo& tablet, const common::ObTabletLocation& location) ObTabletReportInfoList report_list1; ObTabletReportInfoList report_list2; ObTabletReportInfo report_info; ObTabletInfo info1; ObTabletLocation location; location.tablet_version_ = 1; info1.range_.table_id_ = 10001; info1.range_.border_flag_.set_inclusive_end(); info1.range_.border_flag_.unset_inclusive_start(); info1.range_.border_flag_.set_min_value(); info1.range_.border_flag_.unset_max_value(); info1.range_.start_key_.assign_buffer(buf1[0], 30); info1.range_.end_key_.assign_buffer(buf2[0], 30); info1.range_.start_key_.write("aa1", 3); info1.range_.end_key_.write("ba1", 3); location.chunkserver_ = server; report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list1.add_tablet(report_info); //ASSERT_EQ(0,root_server.got_reported(info1, location)); //(,"ba1"] server info1.range_.border_flag_.unset_min_value(); info1.range_.start_key_.assign_buffer(buf1[1], 30); info1.range_.end_key_.assign_buffer(buf2[1], 30); info1.range_.start_key_.write("ba1", 3); info1.range_.end_key_.write("ca1", 3); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list1.add_tablet(report_info); ret = root_server->report_tablets(server, report_list1,time_stamp); ASSERT_EQ(OB_SUCCESS, ret); location.chunkserver_ = server2; info1.range_.start_key_.assign_buffer(buf1[3], 30); info1.range_.end_key_.assign_buffer(buf2[3], 30); info1.range_.start_key_.write("da1", 3); info1.range_.end_key_.write("ea1", 3); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list2.add_tablet(report_info); info1.range_.start_key_.assign_buffer(buf1[2], 30); info1.range_.end_key_.assign_buffer(buf2[2], 30); info1.range_.start_key_.write("ca1", 3); info1.range_.end_key_.write("da1", 3); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list2.add_tablet(report_info); info1.range_.start_key_.assign_buffer(buf1[4], 30); info1.range_.end_key_.assign_buffer(buf2[4], 30); info1.range_.start_key_.write("ea1", 3); info1.range_.end_key_.write("fa1", 3); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list2.add_tablet(report_info); info1.range_.start_key_.assign_buffer(buf1[5], 30); info1.range_.end_key_.assign_buffer(buf2[5], 30); info1.range_.start_key_.write("fa1", 3); info1.range_.border_flag_.set_max_value(); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list2.add_tablet(report_info); ret = root_server->report_tablets(server2, report_list2,time_stamp); ASSERT_EQ(OB_SUCCESS, ret); //wait unload send //while (worker.unload_old_table_times < 2) //{ // TBSYS_LOG(INFO, "wait send unload_old_table now %d have sended", worker.unload_old_table_times); // sleep(1); //} ObRootTable2 *& t_tb = tester.get_root_table_for_query(); ObRootTable2::const_iterator start; ObRootTable2::const_iterator end; ObRootTable2::const_iterator ptr; sleep(3); { ObString key; key.assign_buffer(buf1[0], 30); key.write("cb",2); //TBSYS_LOG(DEBUG,"key"); //print(key); //t_tb->dump(); t_tb->find_key(10001,key, 1, start, end, ptr); // sholud hit ("ca1", "da1"] server2, so start will be the previous one { //should be ("ba1","ca1"] server char buf5[30]; ObString test; test.assign_buffer(buf5, 30); test.write("ba1",3); info1.range_.start_key_.assign_buffer(buf1[0], 30); info1.range_.end_key_.assign_buffer(buf2[0], 30); info1.range_.start_key_.write("ca1", 3); info1.range_.end_key_.write("da1", 3); info1.range_.border_flag_.set_inclusive_end(); info1.range_.border_flag_.unset_inclusive_start(); info1.range_.border_flag_.unset_max_value(); info1.range_.border_flag_.unset_min_value(); start++; const common::ObTabletInfo* tablet_info = NULL; tablet_info = ((const ObRootTable2*)t_tb)->get_tablet_info(start); ASSERT_TRUE(tablet_info != NULL); tablet_info->range_.hex_dump(); info1.range_.hex_dump(); ASSERT_TRUE(tablet_info->range_.equal(info1.range_)); } } root_server->regist_server(server3, false, status); info1.range_.table_id_ = 10001; info1.range_.border_flag_.set_inclusive_end(); info1.range_.border_flag_.unset_inclusive_start(); info1.range_.border_flag_.unset_min_value(); info1.range_.border_flag_.unset_max_value(); info1.range_.start_key_.assign_buffer(buf1[2], 30); info1.range_.end_key_.assign_buffer(buf2[2], 30); info1.range_.start_key_.write("ca1", 3); info1.range_.end_key_.write("da1", 3); ObChunkServerManager& server_manager = tester.get_server_manager(); ObChunkServerManager::iterator pos = server_manager.find_by_ip(server3); int server3_index = pos - server_manager.begin(); pos = server_manager.find_by_ip(server2); int server2_index = pos - server_manager.begin(); root_server->migrate_over(info1.range_, server2, server3, true, 1); t_tb->find_range(info1.range_, start, end); bool found_server3 =false; bool found_server2 =false; TBSYS_LOG(INFO, "check migrate result s2=%d s3=%d", server2_index, server3_index); ObRootTable2::const_iterator it = start; for (int i = 0; i < OB_SAFE_COPY_COUNT; i++) { if (server3_index == it->server_info_indexes_[i]) { found_server3 = true; } if (server2_index == it->server_info_indexes_[i]) { found_server2 = true; } } ASSERT_TRUE(found_server2); ASSERT_TRUE(found_server3); root_server->regist_server(server4, false, status); pos = server_manager.find_by_ip(server4); int server4_index = pos - server_manager.begin(); root_server->migrate_over(info1.range_, server2, server4, false, 1); TBSYS_LOG(INFO, "check migrate 2->4 "); found_server2 = false; found_server3 = false; bool found_server4 =false; it = start; for (int i = 0; i < OB_SAFE_COPY_COUNT; i++) { if (server3_index == it->server_info_indexes_[i]) { found_server3 = true; } if (server2_index == it->server_info_indexes_[i]) { found_server2 = true; } if (server4_index == it->server_info_indexes_[i]) { found_server4 = true; } } ASSERT_FALSE(found_server2); ASSERT_TRUE(found_server3); ASSERT_TRUE(found_server4); root_server->stop_threads(); }
TEST(ObRootServer2Test2, init_report) { ObRootServer2* root_server; ObRootWorkerForTest worker; root_server = worker.get_root_server(); ASSERT_TRUE(root_server->init("./root_server.conf", 100, &worker)); ObRootServerTester tester(root_server); tester.get_wait_init_time() = 3 * 1000000; ObServer server(ObServer::IPV4, "10.10.10.1", 1001); ObServer server2(ObServer::IPV4, "10.10.10.2", 1001); ASSERT_TRUE(!(server == server2)); int64_t time_stamp = 0; root_server->start_threads(); int status; sleep(3); int ret = root_server->regist_server(server, false, status); ASSERT_EQ(ret, OB_SUCCESS); ret = root_server->regist_server(server2, false, status); ASSERT_EQ(ret, OB_SUCCESS); // now we have two cs tester.get_lease_duration() = 100 * 1000 * 1000; TBSYS_LOG(INFO, "will start test"); //tester.init_root_table_by_report(); //while (worker.start_new_send_times < 2) //{ // TBSYS_LOG(INFO, "wait send start_new_schema now %d have sended",worker.start_new_send_times); // sleep(1); //} TBSYS_LOG(INFO, "over send start_new_schema now %d have sended",worker.start_new_send_times); //all commond sended. //mimic report char buf1[10][30]; char buf2[10][30]; //const common::ObTabletInfo& tablet, const common::ObTabletLocation& location) ObTabletReportInfoList report_list1; ObTabletReportInfoList report_list2; ObTabletReportInfo report_info; ObTabletInfo info1; ObTabletLocation location; location.tablet_version_ = 0; info1.range_.table_id_ = 10001; info1.range_.border_flag_.set_inclusive_end(); info1.range_.border_flag_.unset_inclusive_start(); info1.range_.border_flag_.set_min_value(); info1.range_.border_flag_.unset_max_value(); info1.range_.start_key_.assign_buffer(buf1[0], 30); info1.range_.end_key_.assign_buffer(buf2[0], 30); info1.range_.start_key_.write("aa1", 3); info1.range_.end_key_.write("ba1", 3); location.chunkserver_ = server; report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list1.add_tablet(report_info); //ASSERT_EQ(0,root_server.got_reported(info1, location)); //(,"ba1"] server info1.range_.border_flag_.unset_min_value(); info1.range_.start_key_.assign_buffer(buf1[1], 30); info1.range_.end_key_.assign_buffer(buf2[1], 30); info1.range_.start_key_.write("ba1", 3); info1.range_.end_key_.write("ca1", 3); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list1.add_tablet(report_info); ret = root_server->report_tablets(server, report_list1,time_stamp); ASSERT_EQ(OB_SUCCESS, ret); location.chunkserver_ = server2; info1.range_.start_key_.assign_buffer(buf1[3], 30); info1.range_.end_key_.assign_buffer(buf2[3], 30); info1.range_.start_key_.write("da1", 3); info1.range_.end_key_.write("ea1", 3); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list2.add_tablet(report_info); info1.range_.start_key_.assign_buffer(buf1[2], 30); info1.range_.end_key_.assign_buffer(buf2[2], 30); info1.range_.start_key_.write("ca1", 3); info1.range_.end_key_.write("da1", 3); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list2.add_tablet(report_info); info1.range_.start_key_.assign_buffer(buf1[4], 30); info1.range_.end_key_.assign_buffer(buf2[4], 30); info1.range_.start_key_.write("ea1", 3); info1.range_.end_key_.write("fa1", 3); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list2.add_tablet(report_info); info1.range_.start_key_.assign_buffer(buf1[5], 30); info1.range_.end_key_.assign_buffer(buf2[5], 30); info1.range_.start_key_.write("fa1", 3); info1.range_.border_flag_.set_max_value(); report_info.tablet_info_ = info1; report_info.tablet_location_ = location; report_list2.add_tablet(report_info); ret = root_server->report_tablets(server2, report_list2,time_stamp); ASSERT_EQ(OB_SUCCESS, ret); //mimic schema_changed //root_server->waiting_job_done(server,time_stamp ); //root_server->waiting_job_done(server2,time_stamp ); //wait unload send //while (worker.unload_old_table_times < 2) //{ // TBSYS_LOG(INFO, "wait send unload_old_table now %d have sended", worker.unload_old_table_times); // sleep(1); //} sleep(5); { ObRootTable2 *& t_tb = tester.get_root_table_for_query(); ObRootTable2::const_iterator start; ObRootTable2::const_iterator end; ObRootTable2::const_iterator ptr; ObString key; key.assign_buffer(buf1[0], 30); key.write("cb",2); //TBSYS_LOG(DEBUG,"key"); //print(key); //t_tb->dump(); t_tb->find_key(10001,key, 1, start, end, ptr); // sholud hit ("ca1", "da1"] server2, so start will be the previous one { //should be ("ba1","ca1"] server char buf5[30]; ObString test; test.assign_buffer(buf5, 30); test.write("ba1",3); info1.range_.start_key_.assign_buffer(buf1[0], 30); info1.range_.end_key_.assign_buffer(buf2[0], 30); info1.range_.start_key_.write("ca1", 3); info1.range_.end_key_.write("da1", 3); info1.range_.border_flag_.set_inclusive_end(); info1.range_.border_flag_.unset_inclusive_start(); info1.range_.border_flag_.unset_max_value(); info1.range_.border_flag_.unset_min_value(); start++; const common::ObTabletInfo* tablet_info = NULL; tablet_info = ((const ObRootTable2*)t_tb)->get_tablet_info(start); ASSERT_TRUE(tablet_info != NULL); tablet_info->range_.hex_dump(); info1.range_.hex_dump(); ASSERT_TRUE(tablet_info->range_.equal(info1.range_)); } } root_server->stop_threads(); }