TSG-21089: 不修改runtime的引擎配置,保证增量更新时的引擎切换判断正确
This commit is contained in:
@@ -912,6 +912,7 @@ int expr_runtime_commit(void *expr_runtime, const char *table_name,
|
|||||||
size_t real_regex_rule_cnt = 0;
|
size_t real_regex_rule_cnt = 0;
|
||||||
struct expr_rule *rules = NULL;
|
struct expr_rule *rules = NULL;
|
||||||
void **ex_data_array = NULL;
|
void **ex_data_array = NULL;
|
||||||
|
enum expr_engine_type engine_type;
|
||||||
|
|
||||||
size_t rule_cnt = rcu_updating_hash_list(expr_rt->item_hash, &ex_data_array);
|
size_t rule_cnt = rcu_updating_hash_list(expr_rt->item_hash, &ex_data_array);
|
||||||
if (rule_cnt > 0) {
|
if (rule_cnt > 0) {
|
||||||
@@ -937,10 +938,12 @@ int expr_runtime_commit(void *expr_runtime, const char *table_name,
|
|||||||
|
|
||||||
if (expr_rt->engine_type == EXPR_ENGINE_TYPE_AUTO) {
|
if (expr_rt->engine_type == EXPR_ENGINE_TYPE_AUTO) {
|
||||||
if (real_lit_rule_cnt <= ENGINE_TYPE_SWITCH_THRESHOLD) {
|
if (real_lit_rule_cnt <= ENGINE_TYPE_SWITCH_THRESHOLD) {
|
||||||
expr_rt->engine_type = EXPR_ENGINE_TYPE_HS;
|
engine_type = EXPR_ENGINE_TYPE_HS;
|
||||||
} else {
|
} else {
|
||||||
expr_rt->engine_type = EXPR_ENGINE_TYPE_RS;
|
engine_type = EXPR_ENGINE_TYPE_RS;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
engine_type = expr_rt->engine_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct expr_matcher *new_matcher = NULL;
|
struct expr_matcher *new_matcher = NULL;
|
||||||
@@ -949,7 +952,7 @@ int expr_runtime_commit(void *expr_runtime, const char *table_name,
|
|||||||
if (rule_cnt > 0) {
|
if (rule_cnt > 0) {
|
||||||
struct timespec start, end;
|
struct timespec start, end;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
new_matcher = expr_matcher_new(rules, real_rule_cnt, expr_rt->engine_type,
|
new_matcher = expr_matcher_new(rules, real_rule_cnt, engine_type,
|
||||||
expr_rt->n_worker_thread, expr_rt->logger);
|
expr_rt->n_worker_thread, expr_rt->logger);
|
||||||
clock_gettime(CLOCK_MONOTONIC, &end);
|
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||||
long long time_elapse_ms = (end.tv_sec - start.tv_sec) * 1000 +
|
long long time_elapse_ms = (end.tv_sec - start.tv_sec) * 1000 +
|
||||||
@@ -965,7 +968,7 @@ int expr_runtime_commit(void *expr_runtime, const char *table_name,
|
|||||||
"table[%s] has %zu rules, commit %zu expr rules(literal_rules:%zu regex_rules:%zu)"
|
"table[%s] has %zu rules, commit %zu expr rules(literal_rules:%zu regex_rules:%zu)"
|
||||||
" and rebuild expr_matcher(%s) completed, version:%lld, consume:%lldms",
|
" and rebuild expr_matcher(%s) completed, version:%lld, consume:%lldms",
|
||||||
table_name, rule_cnt, real_rule_cnt, real_lit_rule_cnt, real_regex_rule_cnt,
|
table_name, rule_cnt, real_rule_cnt, real_lit_rule_cnt, real_regex_rule_cnt,
|
||||||
expr_engine_int2str(expr_rt->engine_type), maat_rt_version, time_elapse_ms);
|
expr_engine_int2str(engine_type), maat_rt_version, time_elapse_ms);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -445,7 +445,7 @@ get_inc_key_list(long long instance_version, long long target_version,
|
|||||||
assert(reply->element[i]->type == REDIS_REPLY_STRING);
|
assert(reply->element[i]->type == REDIS_REPLY_STRING);
|
||||||
int ret = sscanf(reply->element[i]->str, "%3s,%[^,],%lld",
|
int ret = sscanf(reply->element[i]->str, "%3s,%[^,],%lld",
|
||||||
op_str, s_rule[j].table_name, &(s_rule[j].rule_id));
|
op_str, s_rule[j].table_name, &(s_rule[j].rule_id));
|
||||||
if (ret != 3 || s_rule[i].rule_id < 0) {
|
if (ret != 3 || s_rule[j].rule_id < 0) {
|
||||||
log_fatal(logger, MODULE_REDIS_MONITOR,
|
log_fatal(logger, MODULE_REDIS_MONITOR,
|
||||||
"[%s:%d] Invalid Redis Key: %s",
|
"[%s:%d] Invalid Redis Key: %s",
|
||||||
__FUNCTION__, __LINE__, reply->element[i]->str);
|
__FUNCTION__, __LINE__, reply->element[i]->str);
|
||||||
|
|||||||
Reference in New Issue
Block a user