fixed restart failed because physical log disk is smaller than log disk size
This commit is contained in:
		@ -101,9 +101,12 @@ TEST_F(ObserverExpandShink, basic_func)
 | 
			
		||||
  GCONF.log_disk_size = 1024 * 1024 * 1024ul * 1024 * 100ul;
 | 
			
		||||
  int64_t log_disk_size = 0;
 | 
			
		||||
  int64_t log_disk_percentage = 0;
 | 
			
		||||
  EXPECT_EQ(OB_SERVER_OUTOF_DISK_SPACE, observer::ObServerUtils::get_log_disk_info_in_config(
 | 
			
		||||
  int64_t total_space = 0;
 | 
			
		||||
  EXPECT_EQ(OB_SUCCESS, observer::ObServerUtils::get_log_disk_info_in_config(
 | 
			
		||||
                                                                log_disk_size,
 | 
			
		||||
                                                                log_disk_percentage));
 | 
			
		||||
                                                                log_disk_percentage,
 | 
			
		||||
                                                                total_space));
 | 
			
		||||
  EXPECT_EQ(true, total_space < log_disk_size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename ... Args>
 | 
			
		||||
 | 
			
		||||
@ -204,6 +204,7 @@ int ObServerLogBlockMgr::resize_(const int64_t new_size_byte)
 | 
			
		||||
  } else if (OB_FAIL(
 | 
			
		||||
                 do_resize_(old_log_pool_meta, resize_block_cnt, new_log_pool_meta))) {
 | 
			
		||||
    if (OB_ALLOCATE_DISK_SPACE_FAILED == ret) {
 | 
			
		||||
      ret = OB_MACHINE_RESOURCE_NOT_ENOUGH;
 | 
			
		||||
      LOG_DBA_ERROR(OB_ALLOCATE_DISK_SPACE_FAILED,
 | 
			
		||||
                    "possible reason",
 | 
			
		||||
                    "may be diskspace is not enough, please check the configuration about log disk",
 | 
			
		||||
@ -758,7 +759,8 @@ int ObServerLogBlockMgr::try_resize()
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  int64_t log_disk_size = 0;
 | 
			
		||||
  int64_t log_disk_percentage = 0;
 | 
			
		||||
  int64_t unused_log_disk_percentage = 0;
 | 
			
		||||
  int64_t total_log_disk_size = 0;
 | 
			
		||||
  if (IS_NOT_INIT) {
 | 
			
		||||
    ret = OB_NOT_INIT;
 | 
			
		||||
    CLOG_LOG(WARN, "ObServerLogBlockMgr has not inited", KPC(this));
 | 
			
		||||
@ -766,17 +768,16 @@ int ObServerLogBlockMgr::try_resize()
 | 
			
		||||
    ret = OB_NOT_RUNNING;
 | 
			
		||||
    CLOG_LOG(WARN, "ObServerLogBlockMgr not running, can not support resize", KPC(this));
 | 
			
		||||
  } else if (OB_FAIL(observer::ObServerUtils::get_log_disk_info_in_config(log_disk_size,
 | 
			
		||||
                                                                          log_disk_percentage))) {
 | 
			
		||||
    if (OB_SERVER_OUTOF_DISK_SPACE == ret) {
 | 
			
		||||
      ret = OB_MACHINE_RESOURCE_NOT_ENOUGH;
 | 
			
		||||
      CLOG_LOG(ERROR, "try_resize failed, log disk space is not enough", K(log_disk_size), KPC(this));
 | 
			
		||||
    } else {
 | 
			
		||||
      CLOG_LOG(ERROR, "get_log_disk_info_in_config failed", K(log_disk_size), KPC(this));
 | 
			
		||||
    }
 | 
			
		||||
                                                                          unused_log_disk_percentage,
 | 
			
		||||
                                                                          total_log_disk_size))) {
 | 
			
		||||
    CLOG_LOG(ERROR, "get_log_disk_info_in_config failed", K(log_disk_size), KPC(this));
 | 
			
		||||
  } else if (log_disk_size > total_log_disk_size) {
 | 
			
		||||
    ret = OB_MACHINE_RESOURCE_NOT_ENOUGH;
 | 
			
		||||
    CLOG_LOG(ERROR, "try_resize failed, log disk space is not enough", K(log_disk_size), KPC(this));
 | 
			
		||||
  } else if (OB_FAIL(resize_(log_disk_size))) {
 | 
			
		||||
    CLOG_LOG(ERROR, "ObServerLogBlockMGR resize failed", K(ret), KPC(this));
 | 
			
		||||
  } else {
 | 
			
		||||
    CLOG_LOG(INFO, "try_resize success", K(ret), K(log_disk_size), KPC(this));
 | 
			
		||||
    CLOG_LOG(INFO, "try_resize success", K(ret), K(log_disk_size), K(total_log_disk_size), KPC(this));
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -49,7 +49,8 @@ int ObServerUtils::get_server_ip(ObIAllocator *allocator, ObString &ipstr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ObServerUtils::get_log_disk_info_in_config(int64_t& log_disk_size,
 | 
			
		||||
                                               int64_t& log_disk_percentage)
 | 
			
		||||
                                               int64_t& log_disk_percentage,
 | 
			
		||||
                                               int64_t& total_log_disk_size)
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  int64_t suggested_data_disk_size = GCONF.datafile_size;
 | 
			
		||||
@ -81,9 +82,10 @@ int ObServerUtils::get_log_disk_info_in_config(int64_t& log_disk_size,
 | 
			
		||||
        KR(ret), K(data_dir), K(suggested_data_disk_size), K(suggested_data_disk_percentage),
 | 
			
		||||
        K(data_default_disk_percentage), K(shared_mode));
 | 
			
		||||
  } else {
 | 
			
		||||
    total_log_disk_size = clog_disk_total_size;
 | 
			
		||||
    LOG_INFO("get_log_disk_info_in_config", K(suggested_data_disk_size), K(suggested_clog_disk_size),
 | 
			
		||||
             K(suggested_data_disk_percentage), K(suggested_clog_disk_percentage), K(log_disk_size),
 | 
			
		||||
             K(log_disk_percentage));
 | 
			
		||||
             K(log_disk_percentage), K(total_log_disk_size));
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
@ -138,9 +140,10 @@ int ObServerUtils::cal_all_part_disk_size(const int64_t suggested_data_disk_size
 | 
			
		||||
                                          int64_t& log_disk_percentage)
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  int64_t total_log_disk_space = 0;
 | 
			
		||||
  if (OB_FAIL(get_data_disk_info_in_config(data_disk_size, data_disk_percentage))) {
 | 
			
		||||
    LOG_ERROR("get_data_disk_info_in_config failed", K(data_disk_size), K(data_disk_percentage));
 | 
			
		||||
  } else if (OB_FAIL(get_log_disk_info_in_config(log_disk_size, log_disk_percentage))) {
 | 
			
		||||
  } else if (OB_FAIL(get_log_disk_info_in_config(log_disk_size, log_disk_percentage, total_log_disk_space))) {
 | 
			
		||||
    LOG_ERROR("get_log_disk_info_in_config failed", K(log_disk_size), K(log_disk_percentage));
 | 
			
		||||
  } else {
 | 
			
		||||
    LOG_INFO("cal_all_part_disk_size success", K(suggested_data_disk_size), K(suggested_clog_disk_size),
 | 
			
		||||
@ -345,10 +348,13 @@ int ObServerUtils::decide_disk_size(const int64_t total_space,
 | 
			
		||||
  } else {
 | 
			
		||||
    disk_size = suggested_disk_size;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (disk_size > total_space) {
 | 
			
		||||
    ret = OB_SERVER_OUTOF_DISK_SPACE;
 | 
			
		||||
    LOG_WARN("disk_size is greater than total disk space", KR(OB_SERVER_OUTOF_DISK_SPACE),
 | 
			
		||||
          K(suggested_disk_size), K(suggested_disk_percentage),
 | 
			
		||||
          K(default_disk_percentage),
 | 
			
		||||
          K(total_space), K(disk_size));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  LOG_INFO("decide disk size finished",
 | 
			
		||||
        K(suggested_disk_size), K(suggested_disk_percentage),
 | 
			
		||||
        K(default_disk_percentage),
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,8 @@ public:
 | 
			
		||||
  static int get_server_ip(ObIAllocator *allocator, ObString &ipstr);
 | 
			
		||||
 | 
			
		||||
  static int get_log_disk_info_in_config(int64_t& log_disk_size,
 | 
			
		||||
                                         int64_t& log_disk_percentage);
 | 
			
		||||
                                         int64_t& log_disk_percentage,
 | 
			
		||||
                                         int64_t& total_log_disk_size);
 | 
			
		||||
 | 
			
		||||
  static int get_data_disk_info_in_config(int64_t& data_disk_size,
 | 
			
		||||
                                          int64_t& data_disk_percentage);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user