fixed restart failed because physical log disk is smaller than log disk size

This commit is contained in:
HaHaJeff
2023-08-08 10:42:42 +00:00
committed by ob-robot
parent 6f55199a8f
commit 81e0d5ca13
4 changed files with 28 additions and 17 deletions

View File

@ -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>

View File

@ -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;
}

View File

@ -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),

View File

@ -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);