summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorroot <[email protected]>2024-05-08 03:43:55 +0000
committerroot <[email protected]>2024-05-08 03:43:55 +0000
commit3b5009ce9e008297123d09038a04ba027ff1b4db (patch)
tree2b8e290ec5b98223441def593bacbe9c83d968f0 /src
parentd8d7f38efc0885f471905c8533ee060b5d6449e4 (diff)
TSG-21089: 不修改runtime的引擎配置,保证增量更新时的引擎切换判断正确v4.1.37
Diffstat (limited to 'src')
-rw-r--r--src/maat_expr.c11
-rw-r--r--src/maat_redis_monitor.c2
2 files changed, 8 insertions, 5 deletions
diff --git a/src/maat_expr.c b/src/maat_expr.c
index bfc8859..51ffb84 100644
--- a/src/maat_expr.c
+++ b/src/maat_expr.c
@@ -912,6 +912,7 @@ int expr_runtime_commit(void *expr_runtime, const char *table_name,
size_t real_regex_rule_cnt = 0;
struct expr_rule *rules = 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);
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 (real_lit_rule_cnt <= ENGINE_TYPE_SWITCH_THRESHOLD) {
- expr_rt->engine_type = EXPR_ENGINE_TYPE_HS;
+ engine_type = EXPR_ENGINE_TYPE_HS;
} 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;
@@ -949,7 +952,7 @@ int expr_runtime_commit(void *expr_runtime, const char *table_name,
if (rule_cnt > 0) {
struct timespec start, end;
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);
clock_gettime(CLOCK_MONOTONIC, &end);
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)"
" 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,
- expr_engine_int2str(expr_rt->engine_type), maat_rt_version, time_elapse_ms);
+ expr_engine_int2str(engine_type), maat_rt_version, time_elapse_ms);
}
}
diff --git a/src/maat_redis_monitor.c b/src/maat_redis_monitor.c
index 838834d..2f4a921 100644
--- a/src/maat_redis_monitor.c
+++ b/src/maat_redis_monitor.c
@@ -445,7 +445,7 @@ get_inc_key_list(long long instance_version, long long target_version,
assert(reply->element[i]->type == REDIS_REPLY_STRING);
int ret = sscanf(reply->element[i]->str, "%3s,%[^,],%lld",
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,
"[%s:%d] Invalid Redis Key: %s",
__FUNCTION__, __LINE__, reply->element[i]->str);