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;
|
GCONF.log_disk_size = 1024 * 1024 * 1024ul * 1024 * 100ul;
|
||||||
int64_t log_disk_size = 0;
|
int64_t log_disk_size = 0;
|
||||||
int64_t log_disk_percentage = 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_size,
|
||||||
log_disk_percentage));
|
log_disk_percentage,
|
||||||
|
total_space));
|
||||||
|
EXPECT_EQ(true, total_space < log_disk_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ... Args>
|
template<typename ... Args>
|
||||||
|
|||||||
@ -204,6 +204,7 @@ int ObServerLogBlockMgr::resize_(const int64_t new_size_byte)
|
|||||||
} else if (OB_FAIL(
|
} else if (OB_FAIL(
|
||||||
do_resize_(old_log_pool_meta, resize_block_cnt, new_log_pool_meta))) {
|
do_resize_(old_log_pool_meta, resize_block_cnt, new_log_pool_meta))) {
|
||||||
if (OB_ALLOCATE_DISK_SPACE_FAILED == ret) {
|
if (OB_ALLOCATE_DISK_SPACE_FAILED == ret) {
|
||||||
|
ret = OB_MACHINE_RESOURCE_NOT_ENOUGH;
|
||||||
LOG_DBA_ERROR(OB_ALLOCATE_DISK_SPACE_FAILED,
|
LOG_DBA_ERROR(OB_ALLOCATE_DISK_SPACE_FAILED,
|
||||||
"possible reason",
|
"possible reason",
|
||||||
"may be diskspace is not enough, please check the configuration about log disk",
|
"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;
|
int ret = OB_SUCCESS;
|
||||||
int64_t log_disk_size = 0;
|
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) {
|
if (IS_NOT_INIT) {
|
||||||
ret = OB_NOT_INIT;
|
ret = OB_NOT_INIT;
|
||||||
CLOG_LOG(WARN, "ObServerLogBlockMgr has not inited", KPC(this));
|
CLOG_LOG(WARN, "ObServerLogBlockMgr has not inited", KPC(this));
|
||||||
@ -766,17 +768,16 @@ int ObServerLogBlockMgr::try_resize()
|
|||||||
ret = OB_NOT_RUNNING;
|
ret = OB_NOT_RUNNING;
|
||||||
CLOG_LOG(WARN, "ObServerLogBlockMgr not running, can not support resize", KPC(this));
|
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,
|
} else if (OB_FAIL(observer::ObServerUtils::get_log_disk_info_in_config(log_disk_size,
|
||||||
log_disk_percentage))) {
|
unused_log_disk_percentage,
|
||||||
if (OB_SERVER_OUTOF_DISK_SPACE == ret) {
|
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;
|
ret = OB_MACHINE_RESOURCE_NOT_ENOUGH;
|
||||||
CLOG_LOG(ERROR, "try_resize failed, log disk space is not enough", K(log_disk_size), KPC(this));
|
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));
|
|
||||||
}
|
|
||||||
} else if (OB_FAIL(resize_(log_disk_size))) {
|
} else if (OB_FAIL(resize_(log_disk_size))) {
|
||||||
CLOG_LOG(ERROR, "ObServerLogBlockMGR resize failed", K(ret), KPC(this));
|
CLOG_LOG(ERROR, "ObServerLogBlockMGR resize failed", K(ret), KPC(this));
|
||||||
} else {
|
} 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;
|
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,
|
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;
|
int ret = OB_SUCCESS;
|
||||||
int64_t suggested_data_disk_size = GCONF.datafile_size;
|
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),
|
KR(ret), K(data_dir), K(suggested_data_disk_size), K(suggested_data_disk_percentage),
|
||||||
K(data_default_disk_percentage), K(shared_mode));
|
K(data_default_disk_percentage), K(shared_mode));
|
||||||
} else {
|
} 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),
|
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(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;
|
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)
|
int64_t& log_disk_percentage)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
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))) {
|
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));
|
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));
|
LOG_ERROR("get_log_disk_info_in_config failed", K(log_disk_size), K(log_disk_percentage));
|
||||||
} else {
|
} else {
|
||||||
LOG_INFO("cal_all_part_disk_size success", K(suggested_data_disk_size), K(suggested_clog_disk_size),
|
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 {
|
} else {
|
||||||
disk_size = suggested_disk_size;
|
disk_size = suggested_disk_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disk_size > total_space) {
|
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",
|
LOG_INFO("decide disk size finished",
|
||||||
K(suggested_disk_size), K(suggested_disk_percentage),
|
K(suggested_disk_size), K(suggested_disk_percentage),
|
||||||
K(default_disk_percentage),
|
K(default_disk_percentage),
|
||||||
|
|||||||
@ -38,7 +38,8 @@ public:
|
|||||||
static int get_server_ip(ObIAllocator *allocator, ObString &ipstr);
|
static int get_server_ip(ObIAllocator *allocator, ObString &ipstr);
|
||||||
|
|
||||||
static int get_log_disk_info_in_config(int64_t& log_disk_size,
|
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,
|
static int get_data_disk_info_in_config(int64_t& data_disk_size,
|
||||||
int64_t& data_disk_percentage);
|
int64_t& data_disk_percentage);
|
||||||
|
|||||||
Reference in New Issue
Block a user