在删除配置时,误判事务失败,导致出现错误的告警并多次重试。已修复
This commit is contained in:
@@ -206,42 +206,6 @@ int invalidate_line(char* line, enum MAAT_TABLE_TYPE type,int valid_column_seq)
|
|||||||
line[i]='0';
|
line[i]='0';
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int del_rule_from_redis(redisContext* ctx, struct serial_rule_t* s_rule, long long new_version)
|
|
||||||
{
|
|
||||||
int append_cmd_cnt=0;
|
|
||||||
redisAppendCommand(ctx,"RENAME %s:%s,%d %s:%s,%d"
|
|
||||||
,rm_key_prefix[MAAT_OP_ADD]
|
|
||||||
,s_rule->table_name
|
|
||||||
,s_rule->rule_id
|
|
||||||
,rm_key_prefix[MAAT_OP_DEL]
|
|
||||||
,s_rule->table_name
|
|
||||||
,s_rule->rule_id
|
|
||||||
);
|
|
||||||
append_cmd_cnt++;
|
|
||||||
redisAppendCommand(ctx,"EXPIRE %s:%s,%d %d",rm_key_prefix[MAAT_OP_DEL]
|
|
||||||
,s_rule->table_name
|
|
||||||
,s_rule->rule_id
|
|
||||||
,MAAT_REDIS_SYNC_TIME);
|
|
||||||
append_cmd_cnt++;
|
|
||||||
//NX: Don't update already exisiting elements. Always add new elements.
|
|
||||||
redisAppendCommand(ctx,"ZADD %s NX %d DEL,%s,%d",rm_status_sset
|
|
||||||
,new_version
|
|
||||||
,s_rule->table_name
|
|
||||||
,s_rule->rule_id);
|
|
||||||
append_cmd_cnt++;
|
|
||||||
|
|
||||||
// Try to remove from expiration sorted set, no matter wheather it exists or not.
|
|
||||||
redisAppendCommand(ctx,"ZREM %s %s,%d",rm_expire_sset
|
|
||||||
,s_rule->table_name
|
|
||||||
,s_rule->rule_id);
|
|
||||||
append_cmd_cnt++;
|
|
||||||
|
|
||||||
redisAppendCommand(ctx,"ZREM %s %d",rm_label_sset
|
|
||||||
,s_rule->rule_id);
|
|
||||||
append_cmd_cnt++;
|
|
||||||
|
|
||||||
return append_cmd_cnt;
|
|
||||||
}
|
|
||||||
void serialize_region(const struct Maat_region_t* p,int group_id, char* buff,int size)
|
void serialize_region(const struct Maat_region_t* p,int group_id, char* buff,int size)
|
||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
@@ -854,7 +818,7 @@ redisReply* _exec_serial_rule_end(redisContext* ctx,long long maat_redis_version
|
|||||||
}
|
}
|
||||||
void _exec_serial_rule(redisContext* ctx, long long version, struct serial_rule_t* s_rule, int rule_num, int* multi_cmd_seq, unsigned int *cnt, int offset)
|
void _exec_serial_rule(redisContext* ctx, long long version, struct serial_rule_t* s_rule, int rule_num, int* multi_cmd_seq, unsigned int *cnt, int offset)
|
||||||
{
|
{
|
||||||
int i=0,j=0,ret=0;
|
int i=0;
|
||||||
redisReply* data_reply=NULL;
|
redisReply* data_reply=NULL;
|
||||||
int append_cmd_cnt=0;
|
int append_cmd_cnt=0;
|
||||||
for(i=0;i<rule_num;i++)
|
for(i=0;i<rule_num;i++)
|
||||||
@@ -894,12 +858,43 @@ void _exec_serial_rule(redisContext* ctx, long long version, struct serial_rule_
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ret=del_rule_from_redis(ctx,s_rule+i,version);
|
redisAppendCommand(ctx,"RENAME %s:%s,%d %s:%s,%d"
|
||||||
for(j=0;j<ret;j++)
|
,rm_key_prefix[MAAT_OP_ADD]
|
||||||
{
|
,s_rule[i].table_name
|
||||||
|
,s_rule[i].rule_id
|
||||||
|
,rm_key_prefix[MAAT_OP_DEL]
|
||||||
|
,s_rule[i].table_name
|
||||||
|
,s_rule[i].rule_id
|
||||||
|
);
|
||||||
multi_cmd_seq[(*cnt)++]=i+offset;
|
multi_cmd_seq[(*cnt)++]=i+offset;
|
||||||
}
|
append_cmd_cnt++;
|
||||||
append_cmd_cnt+=ret;
|
|
||||||
|
redisAppendCommand(ctx,"EXPIRE %s:%s,%d %d",rm_key_prefix[MAAT_OP_DEL]
|
||||||
|
,s_rule[i].table_name
|
||||||
|
,s_rule[i].rule_id
|
||||||
|
,MAAT_REDIS_SYNC_TIME);
|
||||||
|
multi_cmd_seq[(*cnt)++]=i+offset;
|
||||||
|
append_cmd_cnt++;
|
||||||
|
|
||||||
|
//NX: Don't update already exisiting elements. Always add new elements.
|
||||||
|
redisAppendCommand(ctx,"ZADD %s NX %d DEL,%s,%d",rm_status_sset
|
||||||
|
,version
|
||||||
|
,s_rule[i].table_name
|
||||||
|
,s_rule[i].rule_id);
|
||||||
|
multi_cmd_seq[(*cnt)++]=i+offset;
|
||||||
|
append_cmd_cnt++;
|
||||||
|
|
||||||
|
// Try to remove from expiration sorted set, no matter wheather it exists or not.
|
||||||
|
redisAppendCommand(ctx,"ZREM %s %s,%d",rm_expire_sset
|
||||||
|
,s_rule[i].table_name
|
||||||
|
,s_rule[i].rule_id);
|
||||||
|
multi_cmd_seq[(*cnt)++]=-1;
|
||||||
|
append_cmd_cnt++;
|
||||||
|
|
||||||
|
redisAppendCommand(ctx,"ZREM %s %d",rm_label_sset
|
||||||
|
,s_rule[i].rule_id);
|
||||||
|
multi_cmd_seq[(*cnt)++]=-1;
|
||||||
|
append_cmd_cnt++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -940,12 +935,13 @@ int exec_serial_rule(redisContext* ctx,struct serial_rule_t* s_rule,int serial_r
|
|||||||
for(i=0;i<transaction_reply->elements;i++)
|
for(i=0;i<transaction_reply->elements;i++)
|
||||||
{
|
{
|
||||||
p=transaction_reply->element[i];
|
p=transaction_reply->element[i];
|
||||||
if(0==mr_operation_success(p))
|
|
||||||
{
|
|
||||||
j=multi_cmd_seq[i];
|
j=multi_cmd_seq[i];
|
||||||
|
if(j!=-1&&0==mr_operation_success(p))
|
||||||
|
{
|
||||||
assert(j<serial_rule_num);
|
assert(j<serial_rule_num);
|
||||||
MESA_handle_runtime_log(logger,RLOG_LV_FATAL,maat_command
|
MESA_handle_runtime_log(logger,RLOG_LV_FATAL,maat_command
|
||||||
,"exec rule %s, %d failed, rule id maybe conflicts.", s_rule[j].table_name,s_rule[j].rule_id);
|
,"%s %s %d failed, rule id maybe conflicts.",(s_rule[j].op==MAAT_OP_ADD)?"ADD":"DEL"
|
||||||
|
, s_rule[j].table_name,s_rule[j].rule_id);
|
||||||
success_cnt--;
|
success_cnt--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1363,7 +1359,7 @@ int Maat_cmd_set_lines(Maat_feather_t feather,const struct Maat_line_t** line_ru
|
|||||||
if(retry>5)
|
if(retry>5)
|
||||||
{
|
{
|
||||||
MESA_handle_runtime_log(_feather->logger,RLOG_LV_INFO,maat_command
|
MESA_handle_runtime_log(_feather->logger,RLOG_LV_INFO,maat_command
|
||||||
,"Command set line id %d success after retry %d times."
|
,"Command set line id %d success after retry %d times."
|
||||||
, line_rule[0]->rule_id, retry
|
, line_rule[0]->rule_id, retry
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,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_1_20180322=1;
|
int MAAT_FRAME_VERSION_2_1_20180424=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",""};
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ void maat_tool_print_usage(void)
|
|||||||
printf("\t-n [db], redis db, 0 as default.\n");
|
printf("\t-n [db], redis db, 0 as default.\n");
|
||||||
printf("\t-d [dir], dump rules from redis to [dir], %s as default.\n",redis_dump_dir);
|
printf("\t-d [dir], dump rules from redis to [dir], %s as default.\n",redis_dump_dir);
|
||||||
printf("\t-j [payload.json], add or delete rules as maat json. Must have field compile_table field, and plugin table's valid flag must be in the last column.\n");
|
printf("\t-j [payload.json], add or delete rules as maat json. Must have field compile_table field, and plugin table's valid flag must be in the last column.\n");
|
||||||
printf("\t-t [timeout], timeout config after t seconds, default 0, not timeout.\n");
|
printf("\t-t [timeout], timeout config after t seconds, default is 0 which means never timeout.\n");
|
||||||
printf("example: ./maat_redis_tool -h 127.0.0.1 -p 6379 -d %s\n",redis_dump_dir);
|
printf("example: ./maat_redis_tool -h 127.0.0.1 -p 6379 -d %s\n",redis_dump_dir);
|
||||||
printf(" ./maat_redis_tool -h 127.0.0.1 -p 6379 -j payload.json -t 300\n");
|
printf(" ./maat_redis_tool -h 127.0.0.1 -p 6379 -j payload.json -t 300\n");
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user