diff --git a/src/entry/Maat_api.cpp b/src/entry/Maat_api.cpp index 2c91953..ca8a94c 100644 --- a/src/entry/Maat_api.cpp +++ b/src/entry/Maat_api.cpp @@ -1013,7 +1013,10 @@ int Maat_rule_get_ex_new_index(Maat_feather_t feather, const char* compile_table p_table->ex_desc[idx].dup_func=dup_func; p_table->ex_data_num++; - MESA_htable_iterate(_feather->scanner->compile_hash, rule_ex_data_new_cb, p_table->ex_desc+idx); + if(_feather->scanner!=NULL) + { + MESA_htable_iterate(_feather->scanner->compile_hash, rule_ex_data_new_cb, p_table->ex_desc+idx); + } failed: pthread_mutex_unlock(&(_feather->backgroud_update_mutex)); return idx; diff --git a/src/entry/Maat_command.cpp b/src/entry/Maat_command.cpp index 48791ad..a88ad66 100644 --- a/src/entry/Maat_command.cpp +++ b/src/entry/Maat_command.cpp @@ -1532,14 +1532,14 @@ void _get_foregin_keys(struct serial_rule_t* p_rule, int* foreign_columns, int n MESA_handle_runtime_log(logger,RLOG_LV_FATAL,maat_redis_monitor , "Get %s,%d foreign keys failed: No %dth column." , p_rule->table_name, p_rule->rule_id, foreign_columns[i]); - continue; + break; } if(0!=strncmp(p_foreign, foreign_source_prefix, strlen(foreign_source_prefix))) { MESA_handle_runtime_log(logger,RLOG_LV_FATAL,maat_redis_monitor ,"Get %s,%d foreign key failed: Invalid source prefix %s." , p_rule->table_name, p_rule->rule_id, p_foreign); - continue; + break; } p_rule->f_keys[i].column=foreign_columns[i]; foreign_key_size=foreign_key_size-strlen(foreign_source_prefix); @@ -1560,7 +1560,13 @@ void _get_foregin_keys(struct serial_rule_t* p_rule, int* foreign_columns, int n p_rule->f_keys[i].is_existed=1; } } - return; + if(i!=n_foreign) + { + p_rule->n_foreign=0; + free(p_rule->f_keys); + p_rule->f_keys=NULL; + p_rule->with_error=1; + } } int get_foreign_keys_define(redisContext *ctx, struct serial_rule_t* rule_list, int rule_num, _Maat_feather_t* feather, const char* dir,void *logger) { @@ -1784,7 +1790,7 @@ void redis_monitor_traverse(long long version,redisContext *c, update_type==CM_UPDATE_TYPE_INC?"INC":"FULL",version,new_version,rule_num); for(i=0;itable_name[table->updating_name], table_line); + table->udpate_err_cnt++; + return; + } if(db_group_rule.is_valid==FALSE) { del_group_rule(table, &db_group_rule,scanner,logger); diff --git a/src/inc_internal/Maat_rule_internal.h b/src/inc_internal/Maat_rule_internal.h index 6f95eec..b2afb63 100644 --- a/src/inc_internal/Maat_rule_internal.h +++ b/src/inc_internal/Maat_rule_internal.h @@ -492,6 +492,7 @@ struct serial_rule_t //rm= Redis Maat enum MAAT_OPERATION op;//0: delete, 1: add. long rule_id; int label_id; + char with_error; long long timeout; // absolute unix time. char table_name[256]; char* table_line;