1、提供Maat_cmd_set_lines函数,支持批量写入line_rule;2、修复原有Maat_cmd_set_line函数内存泄漏的bug;
This commit is contained in:
@@ -145,7 +145,7 @@ int Maat_cmd_commit(Maat_feather_t feather);
|
||||
|
||||
int Maat_cmd_set_group(Maat_feather_t feather, int group_id, const struct Maat_region_t* region, enum MAAT_OPERATION op);
|
||||
int Maat_cmd_set_line(Maat_feather_t feather,const struct Maat_line_t* line_rule, enum MAAT_OPERATION op);
|
||||
|
||||
int Maat_cmd_set_lines(Maat_feather_t feather,const struct Maat_line_t** line_rule, int line_num ,enum MAAT_OPERATION op);
|
||||
//Return the value of key after the increment.
|
||||
//If the key does not exist, it is set to 0 before performing the operation.
|
||||
long long Maat_cmd_incrby(Maat_feather_t feather,const char* key, int increment);
|
||||
|
||||
@@ -388,6 +388,10 @@ int get_rm_key_list(unsigned int version,redisContext *c,struct serial_rule_t**
|
||||
}
|
||||
*new_version=version_in_redis;
|
||||
|
||||
if(version==0)
|
||||
{
|
||||
goto FULL_UPDATE;
|
||||
}
|
||||
if(version_in_redis<version)
|
||||
{
|
||||
MESA_handle_runtime_log(logger, RLOG_LV_INFO, maat_redis_monitor,
|
||||
@@ -1123,51 +1127,70 @@ int Maat_cmd_set_group(Maat_feather_t feather,int group_id, const struct Maat_re
|
||||
assert(0);
|
||||
return 0;
|
||||
}
|
||||
int Maat_cmd_set_line(Maat_feather_t feather,const struct Maat_line_t* line_rule, enum MAAT_OPERATION op)
|
||||
int Maat_cmd_set_lines(Maat_feather_t feather,const struct Maat_line_t** line_rule, int line_num ,enum MAAT_OPERATION op)
|
||||
{
|
||||
int i=0;
|
||||
_Maat_feather_t* _feather=(_Maat_feather_t*)feather;
|
||||
int ret=0, table_id=0,retry=0;
|
||||
struct serial_rule_t s_rule;
|
||||
int ret=0, table_id=0,retry=0,success_cnt=0;
|
||||
struct serial_rule_t *s_rule=NULL;
|
||||
long long server_time=0,absolute_expire_time=0;
|
||||
ret=map_str2int(_feather->map_tablename2id, line_rule->table_name, &table_id);
|
||||
if(ret<0)
|
||||
{
|
||||
MESA_handle_runtime_log(_feather->logger,RLOG_LV_FATAL,maat_module
|
||||
,"Command set line id %d failed: unknown table %s."
|
||||
, line_rule->rule_id
|
||||
, line_rule->table_name);
|
||||
|
||||
return -1;
|
||||
}
|
||||
if(TABLE_TYPE_PLUGIN!=_feather->p_table_info[table_id]->table_type)
|
||||
{
|
||||
MESA_handle_runtime_log(_feather->logger,RLOG_LV_FATAL,maat_module
|
||||
,"Command set line id %d failed: table %s is not a plugin table."
|
||||
, line_rule->rule_id
|
||||
, line_rule->table_name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
server_time=redis_server_time(_feather->redis_write_ctx);
|
||||
if( line_rule->expire_after>0)
|
||||
s_rule=(struct serial_rule_t *)calloc(sizeof(struct serial_rule_t),line_num);
|
||||
for(i=0;i<line_num;i++)
|
||||
{
|
||||
absolute_expire_time=server_time+line_rule->expire_after;
|
||||
ret=map_str2int(_feather->map_tablename2id, line_rule[i]->table_name, &table_id);
|
||||
if(ret<0)
|
||||
{
|
||||
MESA_handle_runtime_log(_feather->logger,RLOG_LV_FATAL,maat_module
|
||||
,"Command set line id %d failed: unknown table %s."
|
||||
, line_rule[i]->rule_id
|
||||
, line_rule[i]->table_name);
|
||||
ret=-1;
|
||||
goto error_out;
|
||||
}
|
||||
if(TABLE_TYPE_PLUGIN!=_feather->p_table_info[table_id]->table_type)
|
||||
{
|
||||
MESA_handle_runtime_log(_feather->logger,RLOG_LV_FATAL,maat_module
|
||||
,"Command set line id %d failed: table %s is not a plugin table."
|
||||
, line_rule[i]->rule_id
|
||||
, line_rule[i]->table_name);
|
||||
ret=-1;
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
if(line_rule[i]->expire_after>0)
|
||||
{
|
||||
absolute_expire_time=server_time+line_rule[i]->expire_after;
|
||||
}
|
||||
set_serial_rule(s_rule+i, op,line_rule[i]->rule_id,line_rule[i]->label_id,line_rule[i]->table_name,line_rule[i]->table_line, absolute_expire_time);
|
||||
}
|
||||
set_serial_rule(&s_rule, op,line_rule->rule_id,line_rule->label_id,line_rule->table_name,line_rule->table_line, absolute_expire_time);
|
||||
ret=0;
|
||||
while(ret==0)
|
||||
while(success_cnt<line_num)
|
||||
{
|
||||
ret=exec_serial_rule(_feather->redis_write_ctx,&s_rule, 1,server_time);
|
||||
success_cnt+=exec_serial_rule(_feather->redis_write_ctx,s_rule+success_cnt, line_num-success_cnt,server_time);
|
||||
retry++;
|
||||
}
|
||||
if(retry>10)
|
||||
{
|
||||
MESA_handle_runtime_log(_feather->logger,RLOG_LV_INFO,maat_module
|
||||
,"Command set line id %d success after retry %d times."
|
||||
, line_rule->rule_id
|
||||
, line_rule[0]->rule_id
|
||||
);
|
||||
}
|
||||
return 0;
|
||||
error_out:
|
||||
for(i=0;i<line_num;i++)
|
||||
{
|
||||
empty_serial_rules(s_rule+i);
|
||||
}
|
||||
free(s_rule);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int Maat_cmd_set_line(Maat_feather_t feather,const struct Maat_line_t* line_rule, enum MAAT_OPERATION op)
|
||||
{
|
||||
int ret=0;
|
||||
ret=Maat_cmd_set_lines(feather,&line_rule, 1, op);
|
||||
return ret;
|
||||
}
|
||||
void Maat_add_region2cmd(struct Maat_cmd_t* cmd,int which_group,const struct Maat_region_t* region)
|
||||
{
|
||||
|
||||
@@ -491,20 +491,28 @@ int test_table_conjunction(Maat_feather_t feather,const char* table_name,const c
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#define TEST_CMD_LINE_NUM 4
|
||||
void test_set_cmd_line(Maat_feather_t feather)
|
||||
{
|
||||
struct Maat_line_t line_rule;
|
||||
int ret=0;
|
||||
const struct Maat_line_t *p_line[TEST_CMD_LINE_NUM];
|
||||
struct Maat_line_t line_rule[TEST_CMD_LINE_NUM];
|
||||
char table_line[TEST_CMD_LINE_NUM][128];
|
||||
int ret=0,i=0;
|
||||
memset(&line_rule,0,sizeof(line_rule));
|
||||
line_rule.label_id=0;
|
||||
line_rule.rule_id=(int)Maat_cmd_incrby(feather,"TEST_PLUG_SEQ", 1);
|
||||
line_rule.table_name="QD_ENTRY_INFO";
|
||||
line_rule.table_line="1\t192.168.0.1\t101\t1";
|
||||
line_rule.expire_after=0;
|
||||
ret=Maat_cmd_set_line(feather, &line_rule, MAAT_OP_ADD);
|
||||
for(i=0;i<4;i++)
|
||||
{
|
||||
line_rule[i].label_id=0;
|
||||
line_rule[i].rule_id=(int)Maat_cmd_incrby(feather,"TEST_PLUG_SEQ", 1);
|
||||
line_rule[i].table_name="QD_ENTRY_INFO";
|
||||
snprintf(table_line[i],sizeof(table_line[i]),"1\t192.168.0.1\t%d\t1",100+i);
|
||||
line_rule[i].table_line=table_line[i];
|
||||
line_rule[i].expire_after=0;
|
||||
p_line[i]=line_rule+i;
|
||||
}
|
||||
ret=Maat_cmd_set_lines(feather, p_line,TEST_CMD_LINE_NUM, MAAT_OP_ADD);
|
||||
assert(ret==0);
|
||||
sleep(1);
|
||||
ret=Maat_cmd_set_line(feather, &line_rule, MAAT_OP_DEL);
|
||||
ret=Maat_cmd_set_lines(feather, p_line,TEST_CMD_LINE_NUM, MAAT_OP_DEL);
|
||||
assert(ret==0);
|
||||
return;
|
||||
}
|
||||
@@ -671,7 +679,7 @@ int main(int argc,char* argv[])
|
||||
scan_status_t mid=NULL;
|
||||
int wait_second=400;
|
||||
|
||||
if(argc<2)
|
||||
if(argc<2||argv[1][0]!='-')
|
||||
{
|
||||
maat_test_print_usage();
|
||||
return 0;
|
||||
|
||||
@@ -7,4 +7,3 @@ redis-cli -h $host -p $port FLUSHALL
|
||||
redis-cli -h $host -p $port SET MAAT_VERSION "0"
|
||||
redis-cli -h $host -p $port SET SEQUENCE_REGION "1"
|
||||
redis-cli -h $host -p $port SET SEQUENCE_GROUP "1"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user