加强对输入配置的校验。https://mantis.mesalab.cn/view.php?id=569
修复group rule中mutex使用不对称的问题。https://mantis.mesalab.cn/view.php?id=617
This commit is contained in:
@@ -283,9 +283,12 @@ int exprid2region_id(struct Maat_group_inner* group_rule,int expr_id,int* distri
|
|||||||
pthread_mutex_lock(&(group_rule->mutex));
|
pthread_mutex_lock(&(group_rule->mutex));
|
||||||
assert(array_idx<group_rule->region_boundary);
|
assert(array_idx<group_rule->region_boundary);
|
||||||
region_rule=(struct Maat_region_inner*)dynamic_array_read(group_rule->regions, array_idx);
|
region_rule=(struct Maat_region_inner*)dynamic_array_read(group_rule->regions, array_idx);
|
||||||
|
if(region_rule)
|
||||||
|
{
|
||||||
assert(expr_id>=region_rule->expr_id_lb&&expr_id<=region_rule->expr_id_ub);
|
assert(expr_id>=region_rule->expr_id_lb&&expr_id<=region_rule->expr_id_ub);
|
||||||
region_id=region_rule->region_id;
|
region_id=region_rule->region_id;
|
||||||
*district_id=region_rule->district_id;
|
*district_id=region_rule->district_id;
|
||||||
|
}
|
||||||
pthread_mutex_unlock(&(group_rule->mutex));
|
pthread_mutex_unlock(&(group_rule->mutex));
|
||||||
return region_id;
|
return region_id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
#include "stream_fuzzy_hash.h"
|
#include "stream_fuzzy_hash.h"
|
||||||
#include "gram_index_engine.h"
|
#include "gram_index_engine.h"
|
||||||
|
|
||||||
int MAAT_FRAME_VERSION_2_7_20190612=1;
|
int MAAT_FRAME_VERSION_2_7_20190626=1;
|
||||||
|
|
||||||
const char* CHARSET_STRING[]={"NONE","gbk","big5","unicode","utf8","bin",
|
const char* CHARSET_STRING[]={"NONE","gbk","big5","unicode","utf8","bin",
|
||||||
"unicode_ascii_esc","unicode_ascii_aligned","unicode_ncr_dec","unicode_ncr_hex","url_encode_gb2312","url_encode_utf8",""};
|
"unicode_ascii_esc","unicode_ascii_aligned","unicode_ncr_dec","unicode_ncr_hex","url_encode_gb2312","url_encode_utf8",""};
|
||||||
@@ -1797,6 +1797,7 @@ struct Maat_group_inner* add_region_to_group(struct Maat_group_inner* group,int
|
|||||||
struct region_group_relation* relation=NULL;
|
struct region_group_relation* relation=NULL;
|
||||||
relation=region_group_relation_get(scanner->region_hash, region_id);
|
relation=region_group_relation_get(scanner->region_hash, region_id);
|
||||||
int array_idx;
|
int array_idx;
|
||||||
|
pthread_mutex_lock(&(group->mutex));
|
||||||
if(relation==NULL)
|
if(relation==NULL)
|
||||||
{
|
{
|
||||||
region_rule=ALLOC(struct Maat_region_inner, 1);
|
region_rule=ALLOC(struct Maat_region_inner, 1);
|
||||||
@@ -1806,11 +1807,10 @@ struct Maat_group_inner* add_region_to_group(struct Maat_group_inner* group,int
|
|||||||
region_rule->district_id=district_id;
|
region_rule->district_id=district_id;
|
||||||
region_rule->table_type=region_type;
|
region_rule->table_type=region_type;
|
||||||
region_rule->table_id=table_id;
|
region_rule->table_id=table_id;
|
||||||
pthread_mutex_lock(&(group->mutex));
|
|
||||||
dynamic_array_write(group->regions, group->region_boundary, region_rule);
|
dynamic_array_write(group->regions, group->region_boundary, region_rule);
|
||||||
array_idx=group->region_boundary;
|
array_idx=group->region_boundary;
|
||||||
region_group_relation_add(scanner->region_hash, region_id, group->group_id, array_idx);
|
region_group_relation_add(scanner->region_hash, region_id, group->group_id, array_idx);
|
||||||
HASH_add_by_id(scanner->exprid_hash, expr_id, (void*)(long long)group->region_boundary);
|
|
||||||
group->region_cnt++;
|
group->region_cnt++;
|
||||||
group->region_boundary++;
|
group->region_boundary++;
|
||||||
}
|
}
|
||||||
@@ -1824,8 +1824,8 @@ struct Maat_group_inner* add_region_to_group(struct Maat_group_inner* group,int
|
|||||||
region_rule->expr_id_ub=expr_id;
|
region_rule->expr_id_ub=expr_id;
|
||||||
region_rule->expr_id_cnt++;
|
region_rule->expr_id_cnt++;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&(group->mutex));
|
|
||||||
HASH_add_by_id(scanner->exprid_hash, expr_id, (void*)(long long)array_idx);
|
HASH_add_by_id(scanner->exprid_hash, expr_id, (void*)(long long)array_idx);
|
||||||
|
pthread_mutex_unlock(&(group->mutex));
|
||||||
|
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
@@ -1854,8 +1854,8 @@ void cancel_last_region_from_group(struct Maat_group_inner* group,int region_id,
|
|||||||
region_rule->expr_id_ub--;
|
region_rule->expr_id_ub--;
|
||||||
region_rule->expr_id_cnt--;
|
region_rule->expr_id_cnt--;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&(group->mutex));
|
|
||||||
HASH_delete_by_id(scanner->exprid_hash, expr_id);
|
HASH_delete_by_id(scanner->exprid_hash, expr_id);
|
||||||
|
pthread_mutex_unlock(&(group->mutex));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
unsigned int del_region_from_group(struct Maat_group_inner* group,int region_id,unsigned int *output_expr_id, int output_size, struct Maat_scanner* scanner)
|
unsigned int del_region_from_group(struct Maat_group_inner* group,int region_id,unsigned int *output_expr_id, int output_size, struct Maat_scanner* scanner)
|
||||||
@@ -2007,7 +2007,7 @@ struct Maat_group_inner* del_group_from_compile(struct Maat_compile_group_relati
|
|||||||
return group_rule;
|
return group_rule;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sync_region(MESA_htable_handle region_hash,int region_id, const char* table_name, int is_valid, void*logger)
|
int sync_region(MESA_htable_handle region_hash,int region_id, int group_id, const char* table_name, int is_valid, void*logger)
|
||||||
{
|
{
|
||||||
struct region_group_relation* relation=NULL;
|
struct region_group_relation* relation=NULL;
|
||||||
relation=region_group_relation_get(region_hash, region_id);
|
relation=region_group_relation_get(region_hash, region_id);
|
||||||
@@ -2030,6 +2030,17 @@ int sync_region(MESA_htable_handle region_hash,int region_id, const char* table_
|
|||||||
region_id, table_name);
|
region_id, table_name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(group_id!=relation->group_id)
|
||||||
|
{
|
||||||
|
MESA_handle_runtime_log(logger,RLOG_LV_FATAL,maat_module ,
|
||||||
|
"region delete error, id %d in table %s is already in group %d, but cmd want to delete from group %d.",
|
||||||
|
region_id, table_name,
|
||||||
|
relation->group_id, group_id);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -2829,10 +2840,11 @@ void update_expr_rule(struct Maat_table_desc* table,const char* table_line,struc
|
|||||||
table->udpate_err_cnt++;
|
table->udpate_err_cnt++;
|
||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
ret=sync_region(scanner->region_hash
|
ret=sync_region(scanner->region_hash,
|
||||||
,maat_str_rule->region_id
|
maat_str_rule->region_id,
|
||||||
,table->table_name[table->updating_name]
|
maat_str_rule->group_id,
|
||||||
,maat_str_rule->is_valid,logger);
|
table->table_name[table->updating_name],
|
||||||
|
maat_str_rule->is_valid,logger);
|
||||||
if(ret<0)
|
if(ret<0)
|
||||||
{
|
{
|
||||||
table->udpate_err_cnt++;
|
table->udpate_err_cnt++;
|
||||||
@@ -3168,10 +3180,11 @@ void update_ip_rule(struct Maat_table_desc* table, const char* table_line, struc
|
|||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret=sync_region(scanner->region_hash
|
ret=sync_region(scanner->region_hash,
|
||||||
,ip_rule->region_id
|
ip_rule->region_id,
|
||||||
,table->table_name[table->updating_name]
|
ip_rule->group_id,
|
||||||
,ip_rule->is_valid,logger);
|
table->table_name[table->updating_name],
|
||||||
|
ip_rule->is_valid,logger);
|
||||||
if(ret<0)
|
if(ret<0)
|
||||||
{
|
{
|
||||||
table->udpate_err_cnt++;
|
table->udpate_err_cnt++;
|
||||||
@@ -3242,10 +3255,11 @@ void update_intval_rule(struct Maat_table_desc* table,const char* table_line,str
|
|||||||
table->udpate_err_cnt++;
|
table->udpate_err_cnt++;
|
||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
ret=sync_region(scanner->region_hash
|
ret=sync_region(scanner->region_hash,
|
||||||
,intval_rule->region_id
|
intval_rule->region_id,
|
||||||
,table->table_name[table->updating_name]
|
intval_rule->group_id,
|
||||||
,intval_rule->is_valid,logger);
|
table->table_name[table->updating_name],
|
||||||
|
intval_rule->is_valid, logger);
|
||||||
if(ret<0)
|
if(ret<0)
|
||||||
{
|
{
|
||||||
table->udpate_err_cnt++;
|
table->udpate_err_cnt++;
|
||||||
@@ -3421,10 +3435,11 @@ void update_digest_rule(struct Maat_table_desc* table,const char* table_line,str
|
|||||||
table->udpate_err_cnt++;
|
table->udpate_err_cnt++;
|
||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
ret=sync_region(scanner->region_hash
|
ret=sync_region(scanner->region_hash,
|
||||||
,digest_rule->region_id
|
digest_rule->region_id,
|
||||||
,table->table_name[table->updating_name]
|
digest_rule->group_id,
|
||||||
,digest_rule->is_valid,logger);
|
table->table_name[table->updating_name],
|
||||||
|
digest_rule->is_valid, logger);
|
||||||
if(ret<0)
|
if(ret<0)
|
||||||
{
|
{
|
||||||
table->udpate_err_cnt++;
|
table->udpate_err_cnt++;
|
||||||
|
|||||||
Reference in New Issue
Block a user