[FEAT MERGE] cap_config_4.2
This commit is contained in:
parent
4872b46eef
commit
0e762bcbc5
@ -327,7 +327,8 @@ int ObTenantConfig::publish_special_config_after_dump()
|
||||
|
||||
int ObTenantConfig::add_extra_config(const char *config_str,
|
||||
int64_t version /* = 0 */ ,
|
||||
bool check_name /* = false */)
|
||||
bool check_name /* = false */,
|
||||
bool check_unit /* = true */)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
const int64_t MAX_OPTS_LENGTH = sysconf(_SC_ARG_MAX);
|
||||
@ -388,6 +389,9 @@ int ObTenantConfig::add_extra_config(const char *config_str,
|
||||
(*pp_item)->set_version(version);
|
||||
LOG_INFO("Load tenant config dump value succ", K(name), K((*pp_item)->spfile_str()), K((*pp_item)->str()));
|
||||
}
|
||||
} else if (check_unit && !(*pp_item)->check_unit(value)) {
|
||||
ret = OB_INVALID_CONFIG;
|
||||
LOG_ERROR("Invalid config value", K(name), K(value), K(ret));
|
||||
} else {
|
||||
if (!(*pp_item)->set_value(value)) {
|
||||
ret = OB_INVALID_CONFIG;
|
||||
|
@ -92,7 +92,8 @@ public:
|
||||
bool save2file = true);
|
||||
int add_extra_config(const char *config_str,
|
||||
int64_t version = 0 ,
|
||||
bool check_name = false);
|
||||
bool check_name = false,
|
||||
bool check_unit = true);
|
||||
|
||||
OB_UNIS_VERSION(1);
|
||||
private:
|
||||
|
@ -859,6 +859,9 @@ int ObAdminSetConfig::verify_config(obrpc::ObAdminSetConfigArg &arg)
|
||||
if (ci->is_not_editable() && !arg.is_inner_) {
|
||||
ret = OB_INVALID_CONFIG; //TODO: specific report not editable
|
||||
LOG_WARN("config is not editable", "item", *item, KR(ret));
|
||||
} else if (!ci->check_unit(item->value_.ptr())) {
|
||||
ret = OB_INVALID_CONFIG;
|
||||
LOG_ERROR("invalid config", "item", *item, KR(ret));
|
||||
} else if (!ci->set_value(item->value_.ptr())) {
|
||||
ret = OB_INVALID_CONFIG;
|
||||
LOG_WARN("invalid config", "item", *item, KR(ret));
|
||||
|
@ -286,7 +286,8 @@ ObCommonConfig::~ObCommonConfig()
|
||||
|
||||
int ObCommonConfig::add_extra_config(const char *config_str,
|
||||
int64_t version /* = 0 */ ,
|
||||
bool check_name /* = false */)
|
||||
bool check_name /* = false */,
|
||||
bool check_unit /* = true */)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
const int64_t MAX_OPTS_LENGTH = sysconf(_SC_ARG_MAX);
|
||||
@ -353,6 +354,9 @@ int ObCommonConfig::add_extra_config(const char *config_str,
|
||||
}
|
||||
}
|
||||
if (OB_FAIL(ret) || OB_ISNULL(pp_item)) {
|
||||
} else if (check_unit && !(*pp_item)->check_unit(value)) {
|
||||
ret = OB_INVALID_CONFIG;
|
||||
LOG_ERROR("Invalid config value", K(name), K(value), K(ret));
|
||||
} else if (!(*pp_item)->set_value(value)) {
|
||||
ret = OB_INVALID_CONFIG;
|
||||
LOG_ERROR("Invalid config value", K(name), K(value), K(ret));
|
||||
@ -460,7 +464,7 @@ OB_DEF_DESERIALIZE(ObCommonConfig)
|
||||
} else {
|
||||
MEMSET(copy_buf, '\0', data_len + 1);
|
||||
MEMCPY(copy_buf, buf + pos, data_len);
|
||||
if (OB_FAIL(ObCommonConfig::add_extra_config(copy_buf))) {
|
||||
if (OB_FAIL(ObCommonConfig::add_extra_config(copy_buf, 0, false, false))) {
|
||||
LOG_ERROR("Read server config failed", K(ret));
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,8 @@ public:
|
||||
virtual ObServerRole get_server_type() const = 0;
|
||||
virtual int add_extra_config(const char *config_str,
|
||||
const int64_t version = 0,
|
||||
const bool check_name = false);
|
||||
const bool check_name = false,
|
||||
const bool check_unit = true);
|
||||
virtual bool is_debug_sync_enabled() const { return false; }
|
||||
|
||||
OB_UNIS_VERSION_V(1);
|
||||
|
@ -520,7 +520,7 @@ ObConfigCapacityItem::ObConfigCapacityItem(ObConfigContainer *container,
|
||||
|
||||
int64_t ObConfigCapacityItem::parse(const char *str, bool &valid) const
|
||||
{
|
||||
int64_t value = ObConfigCapacityParser::get(str, valid);
|
||||
int64_t value = ObConfigCapacityParser::get(str, valid, false);
|
||||
if (!valid) {
|
||||
OB_LOG_RET(ERROR, OB_ERR_UNEXPECTED, "set capacity error", "name", name(), K(str), K(valid));
|
||||
}
|
||||
|
@ -67,6 +67,11 @@ public:
|
||||
{
|
||||
return NULL == ck_ ? value_valid_ : value_valid_ && ck_->check(*this);
|
||||
}
|
||||
virtual bool check_unit(const char *str) const
|
||||
{
|
||||
UNUSED(str);
|
||||
return true;
|
||||
}
|
||||
bool set_value(const common::ObString &string)
|
||||
{
|
||||
int64_t pos = 0;
|
||||
@ -412,7 +417,6 @@ public:
|
||||
virtual ObConfigItemType get_config_item_type() const {
|
||||
return ObConfigItemType::OB_CONF_ITEM_TYPE_INTEGRAL;
|
||||
}
|
||||
|
||||
protected:
|
||||
//use current value to do input operation
|
||||
virtual bool set(const char *str);
|
||||
@ -528,6 +532,12 @@ public:
|
||||
virtual ~ObConfigCapacityItem() {}
|
||||
|
||||
ObConfigCapacityItem &operator = (int64_t value);
|
||||
virtual bool check_unit(const char *str) const
|
||||
{
|
||||
bool is_valid;
|
||||
IGNORE_RETURN ObConfigCapacityParser::get(str, is_valid);
|
||||
return is_valid;
|
||||
}
|
||||
|
||||
protected:
|
||||
int64_t parse(const char *str, bool &valid) const;
|
||||
|
@ -147,7 +147,7 @@ bool ObConfigTabletSizeChecker::check(const ObConfigItem &t) const
|
||||
{
|
||||
bool is_valid = false;
|
||||
const int64_t mask = (1 << 21) - 1;
|
||||
int64_t value = ObConfigCapacityParser::get(t.str(), is_valid);
|
||||
int64_t value = ObConfigCapacityParser::get(t.str(), is_valid, false);
|
||||
if (is_valid) {
|
||||
// value has to be a multiple of 2M
|
||||
is_valid = (value >= 0) && !(value & mask);
|
||||
@ -343,7 +343,7 @@ bool ObConfigRpcChecksumChecker::check(const ObConfigItem &t) const
|
||||
bool ObConfigMemoryLimitChecker::check(const ObConfigItem &t) const
|
||||
{
|
||||
bool is_valid = false;
|
||||
int64_t value = ObConfigCapacityParser::get(t.str(), is_valid);
|
||||
int64_t value = ObConfigCapacityParser::get(t.str(), is_valid, false);
|
||||
if (is_valid) {
|
||||
is_valid = 0 == value || value >= lib::ObRunningModeConfig::instance().MIN_MEM;
|
||||
}
|
||||
@ -460,7 +460,8 @@ int64_t ObConfigIntParser::get(const char *str, bool &valid)
|
||||
return value;
|
||||
}
|
||||
|
||||
int64_t ObConfigCapacityParser::get(const char *str, bool &valid)
|
||||
int64_t ObConfigCapacityParser::get(const char *str, bool &valid,
|
||||
bool check_unit /* = true */)
|
||||
{
|
||||
char *p_unit = NULL;
|
||||
int64_t value = 0;
|
||||
@ -476,7 +477,11 @@ int64_t ObConfigCapacityParser::get(const char *str, bool &valid)
|
||||
} else if (value < 0) {
|
||||
valid = false;
|
||||
} else if ('\0' == *p_unit) {
|
||||
value <<= CAP_MB; // default
|
||||
if (check_unit) {
|
||||
valid = false;
|
||||
} else {
|
||||
value <<= CAP_MB;
|
||||
}
|
||||
} else if (0 == STRCASECMP("b", p_unit)
|
||||
|| 0 == STRCASECMP("byte", p_unit)) {
|
||||
// do nothing
|
||||
@ -671,7 +676,7 @@ bool ObCtxMemoryLimitChecker::check(const char* str, uint64_t& ctx_id, int64_t&
|
||||
auto len = STRLEN(str);
|
||||
for (int64_t i = 0; i + 1 < len && !is_valid; ++i) {
|
||||
if (':' == str[i]) {
|
||||
limit = ObConfigCapacityParser::get(str + i + 1, is_valid);
|
||||
limit = ObConfigCapacityParser::get(str + i + 1, is_valid, false);
|
||||
if (is_valid) {
|
||||
int ret = OB_SUCCESS;
|
||||
SMART_VAR(char[OB_MAX_CONFIG_VALUE_LEN], tmp_str) {
|
||||
|
@ -566,8 +566,7 @@ class ObConfigCapacityParser
|
||||
public:
|
||||
ObConfigCapacityParser() {}
|
||||
virtual ~ObConfigCapacityParser() {}
|
||||
static int64_t get(const char *str, bool &valid);
|
||||
|
||||
static int64_t get(const char *str, bool &valid, bool check_unit = true);
|
||||
private:
|
||||
enum CAP_UNIT
|
||||
{
|
||||
|
@ -193,7 +193,7 @@ int ObServerConfig::deserialize_with_compat(const char *buf, const int64_t data_
|
||||
K(data_len), K(pos_data), K_(header.data_zlength), K(ret));
|
||||
} else if (OB_FAIL(header.check_payload_checksum(p_data, data_len - pos_data))) {
|
||||
LOG_ERROR("check data checksum failed", K(ret));
|
||||
} else if (OB_FAIL(add_extra_config(buf + pos))) {
|
||||
} else if (OB_FAIL(add_extra_config(buf + pos, 0, false, false))) {
|
||||
LOG_ERROR("Read server config failed", K(ret));
|
||||
} else {
|
||||
pos += header.data_length_;
|
||||
|
@ -32,7 +32,7 @@ DEF_STR(redundancy_level, OB_CLUSTER_PARAMETER, "NORMAL",
|
||||
ObParameterAttr(Section::SSTABLE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE))
|
||||
// background information about disk space configuration
|
||||
// ObServerUtils::get_data_disk_info_in_config()
|
||||
DEF_CAP(datafile_size, OB_CLUSTER_PARAMETER, "0", "[0M,)", "size of the data file. Range: [0, +∞)",
|
||||
DEF_CAP(datafile_size, OB_CLUSTER_PARAMETER, "0M", "[0M,)", "size of the data file. Range: [0, +∞)",
|
||||
ObParameterAttr(Section::SSTABLE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
DEF_INT(datafile_disk_percentage, OB_CLUSTER_PARAMETER, "0", "[0,99]",
|
||||
"the percentage of disk space used by the data files. Range: [0,99] in integer",
|
||||
@ -75,7 +75,7 @@ DEF_INT(rdma_io_thread_count, OB_CLUSTER_PARAMETER, "0", "[0,8]",
|
||||
DEF_INT(tenant_task_queue_size, OB_CLUSTER_PARAMETER, "16384", "[1024,]",
|
||||
"the size of the task queue for each tenant. Range: [1024,+∞)",
|
||||
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
_DEF_PARAMETER_SCOPE_CHECKER_EASY(private, Capacity, memory_limit, OB_CLUSTER_PARAMETER, "0",
|
||||
_DEF_PARAMETER_SCOPE_CHECKER_EASY(private, Capacity, memory_limit, OB_CLUSTER_PARAMETER, "0M",
|
||||
common::ObConfigMemoryLimitChecker, "[0M,)",
|
||||
"the size of the memory reserved for internal use(for testing purpose), 0 means follow memory_limit_percentage. Range: 0, [1G,).",
|
||||
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
@ -223,7 +223,7 @@ DEF_TIME(autoinc_cache_refresh_interval, OB_CLUSTER_PARAMETER, "3600s", "[100ms,
|
||||
DEF_BOOL(enable_sql_operator_dump, OB_CLUSTER_PARAMETER, "True", "specifies whether sql operators "
|
||||
"(sort/hash join/material/window function/interm result/...) allowed to write to disk",
|
||||
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
DEF_CAP(_chunk_row_store_mem_limit, OB_CLUSTER_PARAMETER, "0B", "[0,]",
|
||||
DEF_CAP(_chunk_row_store_mem_limit, OB_CLUSTER_PARAMETER, "0M", "[0M,]",
|
||||
"the maximum size of memory used by ChunkRowStore, 0 means follow operator's setting. Range: [0, +∞)",
|
||||
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
DEF_STR_WITH_CHECKER(tableapi_transport_compress_func, OB_CLUSTER_PARAMETER, "none",
|
||||
@ -505,7 +505,7 @@ DEF_TIME(recyclebin_object_expire_time, OB_CLUSTER_PARAMETER, "0s", "[0s,)",
|
||||
|
||||
// ========================= LogService Config Begin =====================
|
||||
|
||||
DEF_CAP(log_disk_size, OB_CLUSTER_PARAMETER, "0", "[0M,)",
|
||||
DEF_CAP(log_disk_size, OB_CLUSTER_PARAMETER, "0M", "[0M,)",
|
||||
"the size of disk space used by the log files. Range: [0, +∞)",
|
||||
ObParameterAttr(Section::LOGSERVICE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
|
||||
|
@ -433,7 +433,7 @@ TEST_F(TestIOStruct, IOCalibration)
|
||||
ASSERT_FALSE(bench.is_inited_);
|
||||
|
||||
ObIOBenchResult item;
|
||||
ASSERT_SUCC(ObIOCalibration::parse_calibration_string("READ:4096:120:100000", item));
|
||||
ASSERT_SUCC(ObIOCalibration::parse_calibration_string("READ:4096M:120:100000", item));
|
||||
ASSERT_TRUE(item.is_valid());
|
||||
ASSERT_SUCC(ObIOCalibration::parse_calibration_string("read:4K:10ms:1000", item));
|
||||
ASSERT_TRUE(item.is_valid());
|
||||
|
Loading…
x
Reference in New Issue
Block a user