修复删除region时,笔误导致错误计算rulescan expr_id的bug,该bug导致rulescan_update失败的assert。
This commit is contained in:
@@ -715,7 +715,8 @@ void op_expr_add_rule(struct op_expr_t* op_expr,scan_rule_t* p_rule)
|
|||||||
}
|
}
|
||||||
void Maat_region_inner_free(struct Maat_region_inner* region)
|
void Maat_region_inner_free(struct Maat_region_inner* region)
|
||||||
{
|
{
|
||||||
assert(region->magic_num==REGION_RULE_MAGIC);
|
assert(region->magic_num==REGION_RULE_MAGIC);
|
||||||
|
assert(region->expr_id_cnt==region->expr_id_ub-region->expr_id_lb+1);
|
||||||
region->magic_num=0;
|
region->magic_num=0;
|
||||||
free(region);
|
free(region);
|
||||||
}
|
}
|
||||||
@@ -1186,11 +1187,11 @@ int add_expr_rule(struct Maat_table_schema* table,struct db_str_rule_t* db_rule,
|
|||||||
}
|
}
|
||||||
expr_id=scanner->exprid_generator++;
|
expr_id=scanner->exprid_generator++;
|
||||||
Maat_region_inner_add_expr_id(u_para, expr_id);
|
Maat_region_inner_add_expr_id(u_para, expr_id);
|
||||||
op_expr=create_op_expr(expr_id
|
op_expr=create_op_expr(expr_id,
|
||||||
,0 //add
|
RULESCAN_OP_ADD,
|
||||||
,u_para
|
u_para,
|
||||||
,table->table_id
|
table->table_id);
|
||||||
);
|
|
||||||
for(k=0;k<sub_expr_cnt;k++)
|
for(k=0;k<sub_expr_cnt;k++)
|
||||||
{
|
{
|
||||||
if(strlen(sub_key_array[k])==0)
|
if(strlen(sub_key_array[k])==0)
|
||||||
@@ -1322,11 +1323,10 @@ int add_ip_rule(struct Maat_table_schema* table, struct db_ip_rule_t* db_ip_rule
|
|||||||
|
|
||||||
expr_id=scanner->exprid_generator++;
|
expr_id=scanner->exprid_generator++;
|
||||||
Maat_region_inner_add_expr_id(u_para, expr_id);
|
Maat_region_inner_add_expr_id(u_para, expr_id);
|
||||||
op_expr=create_op_expr(expr_id
|
op_expr=create_op_expr(expr_id,
|
||||||
,0
|
RULESCAN_OP_ADD,
|
||||||
,u_para
|
u_para,
|
||||||
,table->table_id
|
table->table_id);
|
||||||
);
|
|
||||||
p_rule=create_rs_ip_rule(make_sub_type(table->table_id,CHARSET_NONE,0)
|
p_rule=create_rs_ip_rule(make_sub_type(table->table_id,CHARSET_NONE,0)
|
||||||
,db_ip_rule);
|
,db_ip_rule);
|
||||||
op_expr_add_rule(op_expr, p_rule);
|
op_expr_add_rule(op_expr, p_rule);
|
||||||
@@ -1352,11 +1352,11 @@ int add_intval_rule(struct Maat_table_schema* table,struct db_intval_rule* intva
|
|||||||
expr_id=scanner->exprid_generator++;
|
expr_id=scanner->exprid_generator++;
|
||||||
Maat_region_inner_add_expr_id(u_para, expr_id);
|
Maat_region_inner_add_expr_id(u_para, expr_id);
|
||||||
|
|
||||||
op_expr=create_op_expr(expr_id
|
op_expr=create_op_expr(expr_id,
|
||||||
,0
|
RULESCAN_OP_ADD,
|
||||||
,u_para
|
u_para,
|
||||||
,table->table_id
|
table->table_id);
|
||||||
);
|
|
||||||
p_rule=create_rs_intval_rule(make_sub_type(table->table_id,CHARSET_NONE,0)
|
p_rule=create_rs_intval_rule(make_sub_type(table->table_id,CHARSET_NONE,0)
|
||||||
,intval_rule);
|
,intval_rule);
|
||||||
op_expr_add_rule(op_expr,p_rule);
|
op_expr_add_rule(op_expr,p_rule);
|
||||||
@@ -1411,7 +1411,7 @@ int del_region_rule(struct Maat_table_schema* table, int region_id, int group_id
|
|||||||
case TABLE_TYPE_INTERVAL:
|
case TABLE_TYPE_INTERVAL:
|
||||||
for(i=0;i<region->expr_id_cnt;i++)
|
for(i=0;i<region->expr_id_cnt;i++)
|
||||||
{
|
{
|
||||||
op_expr=create_op_expr(region->expr_id_ub+i, 1, NULL, table->table_id);//del expr
|
op_expr=create_op_expr(region->expr_id_lb+i, RULESCAN_OP_DEL, NULL, table->table_id);//del expr
|
||||||
op_expr->rule_type=rule_type;
|
op_expr->rule_type=rule_type;
|
||||||
MESA_lqueue_join_tail(maat_scanner->region_update_q, &op_expr, sizeof(void*));
|
MESA_lqueue_join_tail(maat_scanner->region_update_q, &op_expr, sizeof(void*));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,6 +127,8 @@ struct db_group_rule_t
|
|||||||
int virtual_table_id;
|
int virtual_table_id;
|
||||||
int clause_id;
|
int clause_id;
|
||||||
};
|
};
|
||||||
|
#define RULESCAN_OP_ADD 0
|
||||||
|
#define RULESCAN_OP_DEL 1
|
||||||
struct op_expr_t
|
struct op_expr_t
|
||||||
{
|
{
|
||||||
boolean_expr_t* p_expr;
|
boolean_expr_t* p_expr;
|
||||||
|
|||||||
Reference in New Issue
Block a user