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;
}
Пример #2
0
//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();
}
Пример #3
0
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();
}