[PATCH] merge super_group's include and exclude sub_groups into one line

This commit is contained in:
liuwentan
2023-12-26 15:35:22 +08:00
parent cc1e1d2f7f
commit 3d0d410ac7
10 changed files with 472 additions and 395 deletions

View File

@@ -25,11 +25,13 @@
#define MODULE_JSON2IRIS module_name_str("maat.json2iris") #define MODULE_JSON2IRIS module_name_str("maat.json2iris")
#define MAX_COLUMN_NUM 32 #define MAX_COLUMN_NUM 32
#define MAX_PATH_LINE 512 #define MAX_PATH_LINE 512
#define MAX_BUFF_LEN 4096
#define MAX_GROUP_ID_STR 128
const int json_version = 1; const int json_version = 1;
const char *untitled_group_name="Untitled"; const char *untitled_group_name = "Untitled";
long long untitled_group_id = 123456789; long long untitled_group_id = 123456789;
enum maat_group_relation { enum maat_group_relation {
@@ -38,8 +40,10 @@ enum maat_group_relation {
}; };
struct group_info { struct group_info {
int group_id; int group_id;
char group_name[NAME_MAX]; char group_name[NAME_MAX];
UT_array *incl_group_ids;
UT_array *excl_group_ids;
UT_hash_handle hh; UT_hash_handle hh;
}; };
@@ -197,6 +201,16 @@ static void clear_iris_descriptor(struct iris_description *iris_cfg)
struct group_info *node = NULL; struct group_info *node = NULL;
struct group_info *tmp = NULL; struct group_info *tmp = NULL;
HASH_ITER(hh, iris_cfg->group_name_map, node, tmp) { HASH_ITER(hh, iris_cfg->group_name_map, node, tmp) {
if (node->incl_group_ids != NULL) {
utarray_free(node->incl_group_ids);
node->incl_group_ids = NULL;
}
if (node->excl_group_ids != NULL) {
utarray_free(node->excl_group_ids);
node->excl_group_ids = NULL;
}
HASH_DELETE(hh, iris_cfg->group_name_map, node); HASH_DELETE(hh, iris_cfg->group_name_map, node);
FREE(node); FREE(node);
} }
@@ -294,11 +308,15 @@ static struct group_info *group_info_read(struct group_info *group_name_map,
return node; return node;
} }
UT_icd ut_json2iris_group_id_icd = {sizeof(int), NULL, NULL, NULL};
static struct group_info * static struct group_info *
group_info_add_unsafe(struct iris_description *p_iris, const char *group_name, group_info_add_unsafe(struct iris_description *p_iris, const char *group_name,
long long group_id) long long group_id)
{ {
struct group_info *group_info = ALLOC(struct group_info, 1); struct group_info *group_info = ALLOC(struct group_info, 1);
utarray_new(group_info->incl_group_ids, &ut_json2iris_group_id_icd);
utarray_new(group_info->excl_group_ids, &ut_json2iris_group_id_icd);
group_info->group_id = group_id; group_info->group_id = group_id;
strncpy(group_info->group_name, group_name, sizeof(group_info->group_name)); strncpy(group_info->group_name, group_name, sizeof(group_info->group_name));
@@ -701,23 +719,66 @@ static int write_group2compile_line(int *group_ids, size_t n_group_id,
return 0; return 0;
} }
static int write_group2group_line(int sub_group_id, int super_group_id, int is_exclude, static int write_group2group_line(int super_group_id, UT_array *incl_group_ids,
UT_array *excl_group_ids,
struct iris_description *p_iris) struct iris_description *p_iris)
{ {
char buff[4096] = {0}; char buff[MAX_BUFF_LEN] = {0};
struct iris_table *table = p_iris->group2group_table; struct iris_table *table = p_iris->group2group_table;
if (NULL == table) { if (NULL == table) {
return -1; return -1;
} }
snprintf(buff, sizeof(buff), "%d\t%d\t%d\t1\n", sub_group_id, size_t i = 0, pos = 0;
super_group_id, is_exclude); char incl_id_str[MAX_BUFF_LEN] = {0};
char excl_id_str[MAX_BUFF_LEN] = {0};
table->write_pos += memcat(&(table->buff), table->write_pos,
&(table->buff_sz), buff, strlen(buff));
table->line_count++;
return 0; if (0 == utarray_len(incl_group_ids) &&
0 == utarray_len(excl_group_ids)) {
return 0;
}
int *tmp_id = NULL;
char tmp_str[MAX_GROUP_ID_STR] = {0};
for (i = 0; i < utarray_len(incl_group_ids); i++) {
tmp_id = (int *)utarray_eltptr(incl_group_ids, i);
sprintf(tmp_str, "%d,", *tmp_id);
sprintf(incl_id_str + pos, "%s", tmp_str);
pos += strlen(tmp_str);
}
const char *null_str = "null";
size_t str_len = strlen(incl_id_str);
if (str_len > 0) {
incl_id_str[str_len - 1] = '\0';
} else {
memcpy(incl_id_str, null_str, strlen(null_str));
}
pos = 0;
memset(tmp_str, 0, sizeof(tmp_str));
for (i = 0; i < utarray_len(excl_group_ids); i++) {
tmp_id = (int *)utarray_eltptr(excl_group_ids, i);
sprintf(tmp_str, "%d,", *tmp_id);
sprintf(excl_id_str + pos, "%s", tmp_str);
pos += strlen(tmp_str);
}
str_len = strlen(excl_id_str);
if (str_len > 0) {
excl_id_str[str_len - 1] = '\0';
} else {
memcpy(excl_id_str, null_str, strlen(null_str));
}
snprintf(buff, sizeof(buff), "%s\t%d\t%s\t1\n", incl_id_str,
super_group_id, excl_id_str);
table->write_pos += memcat(&(table->buff), table->write_pos,
&(table->buff_sz), buff, strlen(buff));
table->line_count++;
return 0;
} }
static int write_group_rule(cJSON *group_json, int parent_id, static int write_group_rule(cJSON *group_json, int parent_id,
@@ -727,10 +788,9 @@ static int write_group_rule(cJSON *group_json, int parent_id,
{ {
int ret = 0; int ret = 0;
int group_not_flag = 0; int group_not_flag = 0;
int clause_index = 0, is_exclude = 0; int clause_index = 0;
const char *str_parent_type[2] = {"compile", "group"};
const char *group_name = NULL; const char *group_name = NULL;
char group_name_array[32][MAX_NAME_STR_LEN] = {{0},}; char group_name_array[32][MAX_NAME_STR_LEN];
size_t group_name_cnt = 0; size_t group_name_cnt = 0;
long long group_id = -1; long long group_id = -1;
const char *virtual_table = NULL; const char *virtual_table = NULL;
@@ -763,13 +823,6 @@ static int write_group_rule(cJSON *group_json, int parent_id,
group_id = item->valueint; group_id = item->valueint;
} }
item = cJSON_GetObjectItem(group_json, "is_exclude");
if (NULL == item || item->type != cJSON_Number) {
is_exclude = 0;
} else {
is_exclude = item->valueint;
}
if (parent_type == PARENT_TYPE_COMPILE) { if (parent_type == PARENT_TYPE_COMPILE) {
item = cJSON_GetObjectItem(group_json, "virtual_table"); item = cJSON_GetObjectItem(group_json, "virtual_table");
if (NULL == item || item->type != cJSON_String) { if (NULL == item || item->type != cJSON_String) {
@@ -797,8 +850,6 @@ static int write_group_rule(cJSON *group_json, int parent_id,
g2c_table = query_table_info(p_iris, item->valuestring, g2c_table = query_table_info(p_iris, item->valuestring,
TABLE_TYPE_GROUP2COMPILE); TABLE_TYPE_GROUP2COMPILE);
} }
} else {
group_not_flag = 0;
} }
if (group_name_cnt > 0) { if (group_name_cnt > 0) {
@@ -877,19 +928,15 @@ static int write_group_rule(cJSON *group_json, int parent_id,
ret = write_group2compile_line(&(group_info->group_id), 1, parent_id, ret = write_group2compile_line(&(group_info->group_id), 1, parent_id,
group_not_flag, clause_index, group_not_flag, clause_index,
virtual_table, p_iris, g2c_table); virtual_table, p_iris, g2c_table);
} else { if (ret < 0) {
ret = write_group2group_line(group_info->group_id, parent_id, log_fatal(logger, MODULE_JSON2IRIS,
is_exclude, p_iris); "[%s:%d] compile:%d write group error",
} __FUNCTION__, __LINE__, parent_id);
return -1;
}
}
} }
if (ret < 0) {
log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d] %s rule %d write group error",
__FUNCTION__, __LINE__, str_parent_type[parent_type], parent_id);
return -1;
}
return 0; return 0;
} }
@@ -1058,98 +1105,215 @@ static int write_index_file(struct iris_description *p_iris,
return 0; return 0;
} }
static int write_iris(cJSON *json, struct iris_description *p_iris, int recursive_traverse_sub_groups(cJSON *group_obj, struct iris_description *p_iris,
struct log_handle *logger) struct log_handle *logger)
{ {
int i=0; cJSON *sub_group_array = cJSON_GetObjectItem(group_obj, "sub_groups");
int ret=0; if (NULL == sub_group_array) {
static struct group_info *parent_group = NULL; //TODO return 0;
}
cJSON *plug_tables = cJSON_GetObjectItem(json, "plugin_table");
if (plug_tables != NULL) { cJSON *item = cJSON_GetObjectItem(group_obj, "group_name");
if (NULL == item || item->type != cJSON_String) {
log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d] has no group_name before sub_groups.");
return -1;
}
const char *parent_group_name = item->valuestring;
struct group_info *parent_group = group_info_read(p_iris->group_name_map,
item->valuestring);
if (NULL == parent_group) {
item = cJSON_GetObjectItem(group_obj, "group_id");
if (NULL == item || item->type != cJSON_Number) {
log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d] group_name:%s has no group_id.", parent_group_name);
return -1;
}
parent_group = group_info_add_unsafe(p_iris, parent_group_name, item->valueint);
}
cJSON *sub_group_obj = NULL;
cJSON_ArrayForEach(sub_group_obj, sub_group_array) {
cJSON *tmp_item1 = cJSON_GetObjectItem(sub_group_obj, "group_name");
if (NULL == tmp_item1 || tmp_item1->type != cJSON_String) {
log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d]group:%s's sub_groups has no group_name",
__FUNCTION__, __LINE__, parent_group_name);
return -1;
}
int group_id = -1;
int is_exclude = 0;
cJSON *tmp_item2 = cJSON_GetObjectItem(sub_group_obj, "group_id");
if (NULL == tmp_item2) {
struct group_info *group = group_info_read(p_iris->group_name_map,
tmp_item1->valuestring);
assert(group != NULL);
group_id = group->group_id;
} else {
group_id = tmp_item2->valueint;
}
cJSON *tmp_item3 = cJSON_GetObjectItem(sub_group_obj, "is_exclude");
if (tmp_item3 != NULL && tmp_item3->type == cJSON_Number) {
is_exclude = tmp_item3->valueint;
}
if (0 == is_exclude) {
utarray_push_back(parent_group->incl_group_ids, &group_id);
} else {
utarray_push_back(parent_group->excl_group_ids, &group_id);
}
int ret = recursive_traverse_sub_groups(sub_group_obj, p_iris, logger);
if (ret < 0) {
return -1;
}
}
return 0;
}
static int write_group2group_rule(struct iris_description *p_iris,
struct log_handle *logger)
{
int ret = 0;
struct group_info *group_info = NULL, *tmp_group_info = NULL;
HASH_ITER(hh, p_iris->group_name_map, group_info, tmp_group_info) {
ret = write_group2group_line(group_info->group_id, group_info->incl_group_ids,
group_info->excl_group_ids, p_iris);
if (ret < 0) {
log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d] write group2group line failed for super_group:%d",
__FUNCTION__, __LINE__, group_info->group_id);
return -1;
}
}
return 0;
}
static int write_iris(cJSON *json, struct iris_description *p_iris,
struct log_handle *logger)
{
int i = 0;
int ret = 0;
static struct group_info *parent_group = NULL; // TODO
cJSON *plug_tables = cJSON_GetObjectItem(json, "plugin_table");
if (plug_tables != NULL) {
cJSON *each_plug_table = NULL; cJSON *each_plug_table = NULL;
cJSON_ArrayForEach(each_plug_table, plug_tables) { cJSON_ArrayForEach(each_plug_table, plug_tables) {
write_plugin_line(each_plug_table, i, p_iris, logger); write_plugin_line(each_plug_table, i, p_iris, logger);
i++; i++;
} }
} }
cJSON *group_array = cJSON_GetObjectItem(json, "groups");//sub-group to group cJSON *group_array = cJSON_GetObjectItem(json, "groups"); // sub-group to group
if (group_array != NULL) { if (group_array != NULL) {
cJSON *group_obj = NULL; cJSON *group_obj = NULL;
cJSON_ArrayForEach(group_obj, group_array) { cJSON_ArrayForEach(group_obj, group_array) {
const char *parent_group_name = NULL; const char *parent_group_name = NULL;
cJSON *item = cJSON_GetObjectItem(group_obj, "parent_group"); cJSON *item = cJSON_GetObjectItem(group_obj, "parent_group");
if (NULL == item || item->type!=cJSON_String) { if (NULL == item || item->type != cJSON_String) {
parent_group_name = untitled_group_name; parent_group_name = untitled_group_name;
} else { } else {
parent_group_name = item->string; parent_group_name = item->string;
} }
parent_group = group_info_read(p_iris->group_name_map, parent_group_name); parent_group = group_info_read(p_iris->group_name_map, parent_group_name);
if(NULL == parent_group) { if (NULL == parent_group) {
parent_group = group_info_add_unsafe(p_iris, parent_group_name, parent_group = group_info_add_unsafe(p_iris, parent_group_name,
untitled_group_id); untitled_group_id);
} }
ret = write_group_rule(group_obj, parent_group->group_id, item = cJSON_GetObjectItem(group_obj, "group_id");
PARENT_TYPE_GROUP, 0, 0, p_iris, logger); if (NULL == item || item->type != cJSON_Number) {
log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d]Global groups has group with no group_id.",
__FUNCTION__, __LINE__);
return -1;
}
utarray_push_back(parent_group->incl_group_ids, &item->valueint);
ret = write_group_rule(group_obj, parent_group->group_id,
PARENT_TYPE_GROUP, 0, 0, p_iris, logger);
if (ret < 0) { if (ret < 0) {
return -1; return -1;
} }
} }
} }
int compile_cnt = 0; int compile_cnt = 0;
cJSON *compile_array = cJSON_GetObjectItem(json, "rules"); cJSON *compile_array = cJSON_GetObjectItem(json, "rules");
if (compile_array != NULL) { if (compile_array != NULL) {
compile_cnt = cJSON_GetArraySize(compile_array); compile_cnt = cJSON_GetArraySize(compile_array);
} }
if (compile_cnt > 0) { if (compile_cnt > 0) {
cJSON *compile_obj = NULL; cJSON *compile_obj = NULL;
cJSON_ArrayForEach(compile_obj, compile_array) { cJSON_ArrayForEach(compile_obj, compile_array) {
int compile_id = write_compile_line(compile_obj, p_iris, logger); int compile_id = write_compile_line(compile_obj, p_iris, logger);
if (compile_id < 0) { if (compile_id < 0) {
log_fatal(logger, MODULE_JSON2IRIS, "[%s:%d] In %d compile rule", log_fatal(logger, MODULE_JSON2IRIS,
__FUNCTION__, __LINE__, i); "[%s:%d] In %d compile rule",
return -1; __FUNCTION__, __LINE__, i);
} return -1;
}
group_array = cJSON_GetObjectItem(compile_obj, "groups"); group_array = cJSON_GetObjectItem(compile_obj, "groups");
if (NULL == group_array) { if (NULL == group_array) {
log_fatal(logger, MODULE_JSON2IRIS, log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d] compile rule %d have no group", "[%s:%d] compile rule %d have no group",
__FUNCTION__, __LINE__, compile_id);
return -1;
}
int group_cnt = cJSON_GetArraySize(group_array);
if (group_cnt <= 0) {
log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d] compile rule %d have no groups",
__FUNCTION__, __LINE__, compile_id); __FUNCTION__, __LINE__, compile_id);
return -1; return -1;
} }
int group_cnt = cJSON_GetArraySize(group_array); i = 0;
if (group_cnt <= 0) {
log_fatal(logger, MODULE_JSON2IRIS,
"[%s:%d] compile rule %d have no groups",
__FUNCTION__, __LINE__, compile_id);
return -1;
}
i = 0;
cJSON *group_obj = NULL; cJSON *group_obj = NULL;
cJSON_ArrayForEach(group_obj, group_array) { cJSON_ArrayForEach(group_obj, group_array) {
ret = write_group_rule(group_obj, compile_id, PARENT_TYPE_COMPILE, ret = write_group_rule(group_obj, compile_id, PARENT_TYPE_COMPILE,
compile_id, i, p_iris, logger); compile_id, i, p_iris, logger);
if (ret < 0) { if (ret < 0) {
return -1; return -1;
} }
i++; i++;
} }
} }
}
ret = write_index_file(p_iris, logger); cJSON_ArrayForEach(compile_obj, compile_array) {
cJSON *group_array = cJSON_GetObjectItem(compile_obj, "groups");
cJSON *group_obj = NULL;
cJSON_ArrayForEach(group_obj, group_array) {
ret = recursive_traverse_sub_groups(group_obj, p_iris, logger);
if (ret < 0) {
return -1;
}
}
}
}
ret = write_group2group_rule(p_iris, logger);
if (ret < 0) { if (ret < 0) {
return -1; return -1;
} }
return 0;
ret = write_index_file(p_iris, logger);
if (ret < 0) {
return -1;
}
return 0;
} }
int json2iris(const char *json_buff, const char *json_filename, int json2iris(const char *json_buff, const char *json_filename,

View File

@@ -23,15 +23,15 @@
#define MODULE_GROUP module_name_str("maat.group") #define MODULE_GROUP module_name_str("maat.group")
struct group2group_item { struct group2group_item {
UT_array *sub_group_ids; UT_array *incl_group_ids;
UT_array *excl_group_ids;
long long super_group_id; long long super_group_id;
int is_exclude;
}; };
struct group2group_schema { struct group2group_schema {
int group_id_column; int incl_group_ids_column;
int super_group_id_column; int super_group_id_column;
int is_exclude_column; int excl_group_ids_column;
int table_id; int table_id;
struct table_manager *ref_tbl_mgr; struct table_manager *ref_tbl_mgr;
}; };
@@ -111,12 +111,12 @@ void *group2group_schema_new(cJSON *json, struct table_manager *tbl_mgr,
goto error; goto error;
} }
custom_item = cJSON_GetObjectItem(item, "group_id"); custom_item = cJSON_GetObjectItem(item, "incl_group_ids");
if (custom_item != NULL && custom_item->type == cJSON_Number) { if (custom_item != NULL && custom_item->type == cJSON_Number) {
g2g_schema->group_id_column = custom_item->valueint; g2g_schema->incl_group_ids_column = custom_item->valueint;
} else { } else {
log_fatal(logger, MODULE_GROUP, log_fatal(logger, MODULE_GROUP,
"[%s:%d] g2g table:<%s> schema has no group_id column", "[%s:%d] g2g table:<%s> schema has no incl_group_ids column",
__FUNCTION__, __LINE__, table_name); __FUNCTION__, __LINE__, table_name);
goto error; goto error;
} }
@@ -131,12 +131,12 @@ void *group2group_schema_new(cJSON *json, struct table_manager *tbl_mgr,
goto error; goto error;
} }
custom_item = cJSON_GetObjectItem(item, "is_exclude"); custom_item = cJSON_GetObjectItem(item, "excl_group_ids");
if (custom_item != NULL && custom_item->type == cJSON_Number) { if (custom_item != NULL && custom_item->type == cJSON_Number) {
g2g_schema->is_exclude_column = custom_item->valueint; g2g_schema->excl_group_ids_column = custom_item->valueint;
} else { } else {
log_fatal(logger, MODULE_GROUP, log_fatal(logger, MODULE_GROUP,
"[%s:%d] g2g table:<%s> schema has no is_exclude column", "[%s:%d] g2g table:<%s> schema has no excl_group_ids column",
__FUNCTION__, __LINE__, table_name); __FUNCTION__, __LINE__, table_name);
goto error; goto error;
} }
@@ -326,13 +326,14 @@ group2group_item_new(const char *line, struct group2group_schema *g2g_schema,
size_t column_offset = 0; size_t column_offset = 0;
size_t column_len = 0; size_t column_len = 0;
struct group2group_item *g2g_item = ALLOC(struct group2group_item, 1); struct group2group_item *g2g_item = ALLOC(struct group2group_item, 1);
utarray_new(g2g_item->sub_group_ids, &ut_group_id_icd); utarray_new(g2g_item->incl_group_ids, &ut_group_id_icd);
utarray_new(g2g_item->excl_group_ids, &ut_group_id_icd);
int ret = get_column_pos(line, g2g_schema->group_id_column, int ret = get_column_pos(line, g2g_schema->incl_group_ids_column,
&column_offset, &column_len); &column_offset, &column_len);
if (ret < 0) { if (ret < 0) {
log_fatal(logger, MODULE_GROUP, log_fatal(logger, MODULE_GROUP,
"[%s:%d] g2g table:<%s> has no group_id in line:%s", "[%s:%d] g2g table:<%s> has no incl_group_ids in line:%s",
__FUNCTION__, __LINE__, table_name, line); __FUNCTION__, __LINE__, table_name, line);
goto error; goto error;
} }
@@ -340,17 +341,17 @@ group2group_item_new(const char *line, struct group2group_schema *g2g_schema,
char group_ids_str[MAX_GROUP_IDS_STR_LEN] = {0}; char group_ids_str[MAX_GROUP_IDS_STR_LEN] = {0};
memcpy(group_ids_str, line + column_offset, MIN(MAX_GROUP_IDS_STR_LEN, column_len)); memcpy(group_ids_str, line + column_offset, MIN(MAX_GROUP_IDS_STR_LEN, column_len));
ret = ids_str2longlong_array(group_ids_str, g2g_item->sub_group_ids); ret = ids_str2longlong_array(group_ids_str, g2g_item->incl_group_ids);
if (ret < 0) { if (ret < 0) {
log_fatal(logger, MODULE_GROUP, log_fatal(logger, MODULE_GROUP,
"[%s:%d] g2c table:<%s> sub_group_ids str2longlong failed in line:%s", "[%s:%d] g2c table:<%s> incl_group_ids str2longlong failed in line:%s",
__FUNCTION__, __LINE__, table_name, line); __FUNCTION__, __LINE__, table_name, line);
goto error; goto error;
} }
if (utarray_len(g2g_item->sub_group_ids) > MAX_GROUP_CNT) { if (utarray_len(g2g_item->incl_group_ids) > MAX_GROUP_CNT) {
log_fatal(logger, MODULE_GROUP, log_fatal(logger, MODULE_GROUP,
"[%s:%d] g2c table:<%s> sub_group_ids exceed maximum:%d in line:%s", "[%s:%d] g2c table:<%s> incl_group_ids exceed maximum:%d in line:%s",
__FUNCTION__, __LINE__, table_name, MAX_GROUP_CNT, line); __FUNCTION__, __LINE__, table_name, MAX_GROUP_CNT, line);
goto error; goto error;
} }
@@ -365,29 +366,32 @@ group2group_item_new(const char *line, struct group2group_schema *g2g_schema,
} }
g2g_item->super_group_id = atoll(line + column_offset); g2g_item->super_group_id = atoll(line + column_offset);
ret = get_column_pos(line, g2g_schema->is_exclude_column, ret = get_column_pos(line, g2g_schema->excl_group_ids_column,
&column_offset, &column_len); &column_offset, &column_len);
if (ret < 0) { if (ret < 0) {
log_fatal(logger, MODULE_GROUP, log_fatal(logger, MODULE_GROUP,
"[%s:%d] g2g table:<%s> has no is_exclude in line:%s", "[%s:%d] g2g table:<%s> has no excl_group_ids in line:%s",
__FUNCTION__, __LINE__, table_name, line); __FUNCTION__, __LINE__, table_name, line);
goto error; goto error;
} }
g2g_item->is_exclude = atoi(line + column_offset); memset(group_ids_str, 0, sizeof(group_ids_str));
if (g2g_item->is_exclude != 0 && g2g_item->is_exclude != 1) { memcpy(group_ids_str, line + column_offset, MIN(MAX_GROUP_IDS_STR_LEN, column_len));
ret = ids_str2longlong_array(group_ids_str, g2g_item->excl_group_ids);
if (ret < 0) {
log_fatal(logger, MODULE_GROUP, log_fatal(logger, MODULE_GROUP,
"[%s:%d] g2g table:<%s> is_exclude:%d is illegal in line:%s", "[%s:%d] g2c table:<%s> excl_group_ids str2longlong failed in line:%s",
__FUNCTION__, __LINE__, table_name, g2g_item->is_exclude, line); __FUNCTION__, __LINE__, table_name, line);
goto error; goto error;
} }
if (g2g_item->is_exclude != 0 && g2g_item->is_exclude != 1) { if (utarray_len(g2g_item->excl_group_ids) > MAX_GROUP_CNT) {
log_fatal(logger, MODULE_GROUP, log_fatal(logger, MODULE_GROUP,
"[%s:%d] g2g table:<%s> is_exclude:%d is illegal in line:%s", "[%s:%d] g2c table:<%s> excl_group_ids exceed maximum:%d in line:%s",
__FUNCTION__, __LINE__, table_name, g2g_item->is_exclude, line); __FUNCTION__, __LINE__, table_name, MAX_GROUP_CNT, line);
goto error; goto error;
} }
return g2g_item; return g2g_item;
error: error:
@@ -401,9 +405,14 @@ static void group2group_item_free(struct group2group_item *g2g_item)
return; return;
} }
if (g2g_item->sub_group_ids != NULL) { if (g2g_item->incl_group_ids != NULL) {
utarray_free(g2g_item->sub_group_ids); utarray_free(g2g_item->incl_group_ids);
g2g_item->sub_group_ids = NULL; g2g_item->incl_group_ids = NULL;
}
if (g2g_item->excl_group_ids != NULL) {
utarray_free(g2g_item->excl_group_ids);
g2g_item->excl_group_ids = NULL;
} }
FREE(g2g_item); FREE(g2g_item);
@@ -771,30 +780,48 @@ int group2group_runtime_update(void *g2g_runtime, void *g2g_schema,
long long *tmp_group_id = NULL; long long *tmp_group_id = NULL;
if (0 == is_valid) { if (0 == is_valid) {
//delete //delete
for (i = 0; i < utarray_len(g2g_item->sub_group_ids); i++) { for (i = 0; i < utarray_len(g2g_item->incl_group_ids); i++) {
tmp_group_id = (long long *)utarray_eltptr(g2g_item->sub_group_ids, i); tmp_group_id = (long long *)utarray_eltptr(g2g_item->incl_group_ids, i);
ret = group_topology_del_group_from_group(g2g_rt->updating_group_topo, *tmp_group_id, ret = group_topology_del_group_from_group(g2g_rt->updating_group_topo, *tmp_group_id,
g2g_item->super_group_id, g2g_item->is_exclude); g2g_item->super_group_id, 0);
if (0 == ret) { if (0 == ret) {
g2g_rt->rule_num--; g2g_rt->rule_num--;
if (1 == g2g_item->is_exclude) { } else {
g2g_rt->excl_rule_num--; g2g_rt->update_err_cnt++;
} }
}
for (i = 0; i < utarray_len(g2g_item->excl_group_ids); i++) {
tmp_group_id = (long long *)utarray_eltptr(g2g_item->excl_group_ids, i);
ret = group_topology_del_group_from_group(g2g_rt->updating_group_topo, *tmp_group_id,
g2g_item->super_group_id, 1);
if (0 == ret) {
g2g_rt->rule_num--;
g2g_rt->excl_rule_num--;
} else { } else {
g2g_rt->update_err_cnt++; g2g_rt->update_err_cnt++;
} }
} }
} else { } else {
//add //add
for (i = 0; i < utarray_len(g2g_item->sub_group_ids); i++) { for (i = 0; i < utarray_len(g2g_item->incl_group_ids); i++) {
tmp_group_id = (long long *)utarray_eltptr(g2g_item->sub_group_ids, i); tmp_group_id = (long long *)utarray_eltptr(g2g_item->incl_group_ids, i);
ret = group_topology_add_group_to_group(g2g_rt->updating_group_topo, *tmp_group_id, ret = group_topology_add_group_to_group(g2g_rt->updating_group_topo, *tmp_group_id,
g2g_item->super_group_id, g2g_item->is_exclude); g2g_item->super_group_id, 0);
if (0 == ret) { if (0 == ret) {
g2g_rt->rule_num++; g2g_rt->rule_num++;
if (1 == g2g_item->is_exclude) { } else {
g2g_rt->excl_rule_num++; g2g_rt->update_err_cnt++;
} }
}
for (i = 0; i < utarray_len(g2g_item->excl_group_ids); i++) {
tmp_group_id = (long long *)utarray_eltptr(g2g_item->excl_group_ids, i);
ret = group_topology_add_group_to_group(g2g_rt->updating_group_topo, *tmp_group_id,
g2g_item->super_group_id, 1);
if (0 == ret) {
g2g_rt->rule_num++;
g2g_rt->excl_rule_num++;
} else { } else {
g2g_rt->update_err_cnt++; g2g_rt->update_err_cnt++;
} }

View File

@@ -597,6 +597,10 @@ int ip_format2range(int ip_type, enum ip_format format, const char *ip1, const c
int ids_str2longlong_array(const char *ids_str, UT_array *ids_array) int ids_str2longlong_array(const char *ids_str, UT_array *ids_array)
{ {
if (strcmp(ids_str, "null") == 0) {
return 0;
}
int counter = 0; int counter = 0;
char *str = NULL; char *str = NULL;
char *saveptr = NULL; char *saveptr = NULL;

View File

@@ -38,11 +38,11 @@
"table_id":3, "table_id":3,
"table_name":"NTC_GROUP2GROUP", "table_name":"NTC_GROUP2GROUP",
"table_type":"group2group", "table_type":"group2group",
"valid_column":3, "valid_column":4,
"custom": { "custom": {
"group_id":1, "incl_group_ids":1,
"super_group_id":2, "super_group_id":2,
"is_exclude":3 "excl_group_ids":3
} }
}, },
{ {

View File

@@ -1,101 +1,51 @@
{ {
"add_items": [ "add_items": [
{ {
"group_id": 8, "incl_group_ids": "8",
"super_group_id": 5, "super_group_id": 5,
"is_exclude": 0 "excl_group_ids": "9"
}, },
{ {
"group_id": 9, "incl_group_ids": "6,9",
"super_group_id": 1, "super_group_id": 1,
"is_exclude": 0 "excl_group_ids": "5"
}, },
{ {
"group_id": 6, "incl_group_ids": "10,11",
"super_group_id": 1,
"is_exclude": 0
},
{
"group_id": 11,
"super_group_id": 6, "super_group_id": 6,
"is_exclude": 0 "excl_group_ids": "7"
}, },
{ {
"group_id": 11, "incl_group_ids": "11,12",
"super_group_id": 7, "super_group_id": 7,
"is_exclude": 0 "excl_group_ids": "10"
}, },
{ {
"group_id": 12, "incl_group_ids": "7",
"super_group_id": 7,
"is_exclude": 0
},
{
"group_id": 7,
"super_group_id": 2, "super_group_id": 2,
"is_exclude": 0 "excl_group_ids": "6"
}, },
{ {
"group_id": 7, "incl_group_ids": "7",
"super_group_id": 4, "super_group_id": 4,
"is_exclude": 0 "excl_group_ids": "13"
}, },
{ {
"group_id": 13, "incl_group_ids": "13",
"super_group_id": 3, "super_group_id": 3,
"is_exclude": 0 "excl_group_ids": "6"
},
{
"group_id": 9,
"super_group_id": 5,
"is_exclude": 1
},
{
"group_id": 5,
"super_group_id": 1,
"is_exclude": 1
},
{
"group_id": 10,
"super_group_id":6,
"is_exclude": 1
},
{
"group_id": 10,
"super_group_id": 7,
"is_exclude": 1
},
{
"group_id": 7,
"super_group_id": 6,
"is_exclude": 1
},
{
"group_id": 6,
"super_group_id": 2,
"is_exclude": 1
},
{
"group_id": 6,
"super_group_id": 3,
"is_exclude": 1
},
{
"group_id": 13,
"super_group_id": 4,
"is_exclude": 1
} }
], ],
"del_items": [ "del_items": [
{ {
"group_id": 7, "incl_group_ids": "null",
"super_group_id": 6, "super_group_id": 6,
"is_exclude": 1 "excl_group_ids": "7"
}, },
{ {
"group_id": 13, "incl_group_ids": "null",
"super_group_id": 4, "super_group_id": 4,
"is_exclude": 1 "excl_group_ids": "13"
} }
] ]
} }

View File

@@ -1,136 +1,76 @@
{ {
"add_items": [ "add_items": [
{ {
"group_id": 14, "incl_group_ids": "14",
"super_group_id": 8, "super_group_id": 8,
"is_exclude": 0 "excl_group_ids": "15"
}, },
{ {
"group_id": 14, "incl_group_ids": "14,16",
"super_group_id": 9, "super_group_id": 9,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 8, "incl_group_ids": "8",
"super_group_id": 5, "super_group_id": 5,
"is_exclude": 0 "excl_group_ids": "9"
}, },
{ {
"group_id": 9, "incl_group_ids": "6,9",
"super_group_id": 1, "super_group_id": 1,
"is_exclude": 0 "excl_group_ids": "5"
}, },
{ {
"group_id": 16, "incl_group_ids": "16",
"super_group_id": 9,
"is_exclude": 0
},
{
"group_id": 16,
"super_group_id": 10, "super_group_id": 10,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 10, "incl_group_ids": "10,12",
"super_group_id": 7, "super_group_id": 7,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 7, "incl_group_ids": "7,11",
"super_group_id": 6, "super_group_id": 6,
"is_exclude": 0 "excl_group_ids": "10"
}, },
{ {
"group_id": 6, "incl_group_ids": "17",
"super_group_id": 1,
"is_exclude": 0
},
{
"group_id": 17,
"super_group_id": 11, "super_group_id": 11,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 17, "incl_group_ids": "17",
"super_group_id": 12, "super_group_id": 12,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 17, "incl_group_ids": "17",
"super_group_id":13, "super_group_id":13,
"is_exclude": 0 "excl_group_ids": "18"
}, },
{ {
"group_id": 11, "incl_group_ids": "7",
"super_group_id": 6,
"is_exclude": 0
},
{
"group_id": 12,
"super_group_id": 7,
"is_exclude": 0
},
{
"group_id": 7,
"super_group_id": 2, "super_group_id": 2,
"is_exclude": 0 "excl_group_ids": "6"
}, },
{ {
"group_id": 7, "incl_group_ids": "7",
"super_group_id": 4, "super_group_id": 4,
"is_exclude": 0 "excl_group_ids": "13"
}, },
{ {
"group_id": 13, "incl_group_ids": "13",
"super_group_id": 3, "super_group_id": 3,
"is_exclude": 0 "excl_group_ids": "6"
},
{
"group_id": 15,
"super_group_id": 8,
"is_exclude": 1
},
{
"group_id": 9,
"super_group_id": 5,
"is_exclude": 1
},
{
"group_id": 5,
"super_group_id": 1,
"is_exclude": 1
},
{
"group_id": 10,
"super_group_id": 6,
"is_exclude": 1
},
{
"group_id": 6,
"super_group_id": 2,
"is_exclude": 1
},
{
"group_id": 6,
"super_group_id": 3,
"is_exclude": 1
},
{
"group_id": 18,
"super_group_id":13,
"is_exclude": 1
},
{
"group_id": 13,
"super_group_id": 4,
"is_exclude": 1
} }
], ],
"del_items": [ "del_items": [
{ {
"group_id": 10, "incl_group_ids": "null",
"super_group_id": 6, "super_group_id": 6,
"is_exclude": 1 "excl_group_ids": "10"
} }
] ]
} }

View File

@@ -1,76 +1,56 @@
{ {
"add_items": [ "add_items": [
{ {
"group_id": 6, "incl_group_ids": "6",
"super_group_id": 3, "super_group_id": 3,
"is_exclude": 0 "excl_group_ids": "7"
}, },
{ {
"group_id": 3, "incl_group_ids": "3,7",
"super_group_id": 1, "super_group_id": 1,
"is_exclude": 0 "excl_group_ids": "4"
}, },
{ {
"group_id": 7, "incl_group_ids": "13",
"super_group_id": 1,
"is_exclude": 0
},
{
"group_id": 7,
"super_group_id": 3,
"is_exclude": 1
},
{
"group_id": 13,
"super_group_id": 10, "super_group_id": 10,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 10, "incl_group_ids": "10",
"super_group_id": 11, "super_group_id": 11,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 11, "incl_group_ids": "11",
"super_group_id": 8, "super_group_id": 8,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 8, "incl_group_ids": "8",
"super_group_id": 5, "super_group_id": 5,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 5, "incl_group_ids": "5",
"super_group_id": 4, "super_group_id": 4,
"is_exclude": 0 "excl_group_ids": "null"
}, },
{ {
"group_id": 5, "incl_group_ids": "5",
"super_group_id": 12, "super_group_id": 12,
"is_exclude": 0 "excl_group_ids": "2"
}, },
{ {
"group_id": 4, "incl_group_ids": "4",
"super_group_id": 2, "super_group_id": 2,
"is_exclude": 0 "excl_group_ids": "null"
},
{
"group_id": 4,
"super_group_id": 1,
"is_exclude": 1
},
{
"group_id": 2,
"super_group_id": 12,
"is_exclude": 1
} }
], ],
"del_items": [ "del_items": [
{ {
"group_id": 13, "incl_group_ids": "13",
"super_group_id": 10, "super_group_id": 10,
"is_exclude": 0 "excl_group_ids": "null"
} }
] ]
} }

View File

@@ -10,6 +10,7 @@
#define MODULE_GROUP_EXCLUDE_GTEST module_name_str("maat.group_exclude_gtest") #define MODULE_GROUP_EXCLUDE_GTEST module_name_str("maat.group_exclude_gtest")
#define MAX_IDS_STR_LEN 64
#define MAX_ITEM_NUM 64 #define MAX_ITEM_NUM 64
#define WAIT_FOR_EFFECTIVE_S 2 #define WAIT_FOR_EFFECTIVE_S 2
#define MAX_G2G_SCAN_TIMES (1000 * 1000) #define MAX_G2G_SCAN_TIMES (1000 * 1000)
@@ -18,9 +19,9 @@ const char *table_info_path = "./group_exclude_table_info.conf";
const char *log_file = "./group_exclude_gtest.log"; const char *log_file = "./group_exclude_gtest.log";
struct group_item { struct group_item {
long long group_id; char incl_ids_str[MAX_IDS_STR_LEN];
char excl_ids_str[MAX_IDS_STR_LEN];
long long super_group_id; long long super_group_id;
int is_exclude;
}; };
struct group2group_rule { struct group2group_rule {
@@ -30,6 +31,8 @@ struct group2group_rule {
struct group_item del_items[MAX_ITEM_NUM]; struct group_item del_items[MAX_ITEM_NUM];
}; };
UT_icd ut_ex_group_id_icd = {sizeof(long long), NULL, NULL, NULL};
static int parse_config_file(const char *filename, struct group2group_rule *rules) static int parse_config_file(const char *filename, struct group2group_rule *rules)
{ {
unsigned char *json_buff = NULL; unsigned char *json_buff = NULL;
@@ -60,9 +63,10 @@ static int parse_config_file(const char *filename, struct group2group_rule *rule
rule_cnt = cJSON_GetArraySize(items_array); rule_cnt = cJSON_GetArraySize(items_array);
for (size_t i = 0; i < rule_cnt; i++) { for (size_t i = 0; i < rule_cnt; i++) {
cJSON *item_obj = cJSON_GetArrayItem(items_array, i); cJSON *item_obj = cJSON_GetArrayItem(items_array, i);
cJSON *tmp_item = cJSON_GetObjectItem(item_obj, "group_id"); cJSON *tmp_item = cJSON_GetObjectItem(item_obj, "incl_group_ids");
if (tmp_item != NULL && tmp_item->type == cJSON_Number) { if (tmp_item != NULL && tmp_item->type == cJSON_String) {
rules->add_items[i].group_id = tmp_item->valueint; memcpy(rules->add_items[i].incl_ids_str, tmp_item->valuestring,
strlen(tmp_item->valuestring));
} }
tmp_item = cJSON_GetObjectItem(item_obj, "super_group_id"); tmp_item = cJSON_GetObjectItem(item_obj, "super_group_id");
@@ -70,9 +74,10 @@ static int parse_config_file(const char *filename, struct group2group_rule *rule
rules->add_items[i].super_group_id = tmp_item->valueint; rules->add_items[i].super_group_id = tmp_item->valueint;
} }
tmp_item = cJSON_GetObjectItem(item_obj, "is_exclude"); tmp_item = cJSON_GetObjectItem(item_obj, "excl_group_ids");
if (tmp_item != NULL && tmp_item->type == cJSON_Number) { if (tmp_item != NULL && tmp_item->type == cJSON_String) {
rules->add_items[i].is_exclude = tmp_item->valueint; memcpy(rules->add_items[i].excl_ids_str, tmp_item->valuestring,
strlen(tmp_item->valuestring));
} }
} }
rules->n_add_item = rule_cnt; rules->n_add_item = rule_cnt;
@@ -87,9 +92,10 @@ static int parse_config_file(const char *filename, struct group2group_rule *rule
rule_cnt = cJSON_GetArraySize(items_array); rule_cnt = cJSON_GetArraySize(items_array);
for (size_t i = 0; i < rule_cnt; i++) { for (size_t i = 0; i < rule_cnt; i++) {
cJSON *item_obj = cJSON_GetArrayItem(items_array, i); cJSON *item_obj = cJSON_GetArrayItem(items_array, i);
cJSON *tmp_item = cJSON_GetObjectItem(item_obj, "group_id"); cJSON *tmp_item = cJSON_GetObjectItem(item_obj, "incl_group_ids");
if (tmp_item != NULL && tmp_item->type == cJSON_Number) { if (tmp_item != NULL && tmp_item->type == cJSON_String) {
rules->del_items[i].group_id = tmp_item->valueint; memcpy(rules->del_items[i].incl_ids_str, tmp_item->valuestring,
strlen(tmp_item->valuestring));
} }
tmp_item = cJSON_GetObjectItem(item_obj, "super_group_id"); tmp_item = cJSON_GetObjectItem(item_obj, "super_group_id");
@@ -97,9 +103,10 @@ static int parse_config_file(const char *filename, struct group2group_rule *rule
rules->del_items[i].super_group_id = tmp_item->valueint; rules->del_items[i].super_group_id = tmp_item->valueint;
} }
tmp_item = cJSON_GetObjectItem(item_obj, "is_exclude"); tmp_item = cJSON_GetObjectItem(item_obj, "excl_group_ids");
if (tmp_item != NULL && tmp_item->type == cJSON_Number) { if (tmp_item != NULL && tmp_item->type == cJSON_String) {
rules->del_items[i].is_exclude = tmp_item->valueint; memcpy(rules->del_items[i].excl_ids_str, tmp_item->valuestring,
strlen(tmp_item->valuestring));
} }
} }
rules->n_del_item = rule_cnt; rules->n_del_item = rule_cnt;
@@ -168,14 +175,15 @@ TEST_F(MaatGroupExclude, level_3_function) {
assert(0); assert(0);
} }
memset(&rules, 0, sizeof(rules));
int ret = parse_config_file("group_exclude_L3.conf", &rules); int ret = parse_config_file("group_exclude_L3.conf", &rules);
EXPECT_EQ(ret, 0); EXPECT_EQ(ret, 0);
for (size_t i = 0; i < rules.n_add_item; i++) { for (size_t i = 0; i < rules.n_add_item; i++) {
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.add_items[i].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.add_items[i].incl_ids_str,
rules.add_items[i].super_group_id, rules.add_items[i].is_exclude, 1); rules.add_items[i].super_group_id, rules.add_items[i].excl_ids_str, 1);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
} }
@@ -191,8 +199,8 @@ TEST_F(MaatGroupExclude, level_3_function) {
//delete group_id = 7, super_group_id = 6, is_exclude = 1 //delete group_id = 7, super_group_id = 6, is_exclude = 1
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.del_items[0].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.del_items[0].incl_ids_str,
rules.del_items[0].super_group_id, rules.del_items[0].is_exclude, 0); rules.del_items[0].super_group_id, rules.del_items[0].excl_ids_str, 0);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
group2group_runtime_commit(g2g_runtime, table_name, 2); group2group_runtime_commit(g2g_runtime, table_name, 2);
@@ -205,8 +213,8 @@ TEST_F(MaatGroupExclude, level_3_function) {
//delete group_id = 13, super_group_id = 4, is_exclude = 1 //delete group_id = 13, super_group_id = 4, is_exclude = 1
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.del_items[1].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.del_items[1].incl_ids_str,
rules.del_items[1].super_group_id, rules.del_items[1].is_exclude, 0); rules.del_items[1].super_group_id, rules.del_items[1].excl_ids_str, 0);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
group2group_runtime_commit(g2g_runtime, table_name, 3); group2group_runtime_commit(g2g_runtime, table_name, 3);
@@ -232,14 +240,15 @@ TEST_F(MaatGroupExclude, level_3_perf) {
assert(0); assert(0);
} }
memset(&rules, 0, sizeof(rules));
int ret = parse_config_file("group_exclude_L3.conf", &rules); int ret = parse_config_file("group_exclude_L3.conf", &rules);
EXPECT_EQ(ret, 0); EXPECT_EQ(ret, 0);
for (size_t i = 0; i < rules.n_add_item; i++) { for (size_t i = 0; i < rules.n_add_item; i++) {
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.add_items[i].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.add_items[i].incl_ids_str,
rules.add_items[i].super_group_id, rules.add_items[i].is_exclude, 1); rules.add_items[i].super_group_id, rules.add_items[i].excl_ids_str, 1);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
} }
@@ -262,8 +271,8 @@ TEST_F(MaatGroupExclude, level_3_perf) {
//delete group_id = 7, super_group_id = 6, is_exclude = 1 //delete group_id = 7, super_group_id = 6, is_exclude = 1
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.del_items[0].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.del_items[0].incl_ids_str,
rules.del_items[0].super_group_id, rules.del_items[0].is_exclude, 0); rules.del_items[0].super_group_id, rules.del_items[0].excl_ids_str, 0);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
group2group_runtime_commit(g2g_runtime, table_name, 5); group2group_runtime_commit(g2g_runtime, table_name, 5);
@@ -279,8 +288,8 @@ TEST_F(MaatGroupExclude, level_3_perf) {
//delete group_id = 13, super_group_id = 4, is_exclude = 1 //delete group_id = 13, super_group_id = 4, is_exclude = 1
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.del_items[1].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.del_items[1].incl_ids_str,
rules.del_items[1].super_group_id, rules.del_items[1].is_exclude, 0); rules.del_items[1].super_group_id, rules.del_items[1].excl_ids_str, 0);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
group2group_runtime_commit(g2g_runtime, table_name, 6); group2group_runtime_commit(g2g_runtime, table_name, 6);
@@ -308,14 +317,15 @@ TEST_F(MaatGroupExclude, level_4_function) {
assert(0); assert(0);
} }
memset(&rules, 0, sizeof(rules));
int ret = parse_config_file("group_exclude_L4.conf", &rules); int ret = parse_config_file("group_exclude_L4.conf", &rules);
EXPECT_EQ(ret, 0); EXPECT_EQ(ret, 0);
for (size_t i = 0; i < rules.n_add_item; i++) { for (size_t i = 0; i < rules.n_add_item; i++) {
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.add_items[i].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.add_items[i].incl_ids_str,
rules.add_items[i].super_group_id, rules.add_items[i].is_exclude, 1); rules.add_items[i].super_group_id, rules.add_items[i].excl_ids_str, 1);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
} }
@@ -334,8 +344,8 @@ TEST_F(MaatGroupExclude, level_4_function) {
//delete group_id = 10, super_group_id = 6, is_exclude = 1 //delete group_id = 10, super_group_id = 6, is_exclude = 1
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.del_items[0].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.del_items[0].incl_ids_str,
rules.del_items[0].super_group_id, rules.del_items[0].is_exclude, 0); rules.del_items[0].super_group_id, rules.del_items[0].excl_ids_str, 0);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
group2group_runtime_commit(g2g_runtime, table_name, 8); group2group_runtime_commit(g2g_runtime, table_name, 8);
@@ -364,14 +374,15 @@ TEST_F(MaatGroupExclude, level_4_perf) {
assert(0); assert(0);
} }
memset(&rules, 0, sizeof(rules));
int ret = parse_config_file("group_exclude_L4.conf", &rules); int ret = parse_config_file("group_exclude_L4.conf", &rules);
EXPECT_EQ(ret, 0); EXPECT_EQ(ret, 0);
for (size_t i = 0; i < rules.n_add_item; i++) { for (size_t i = 0; i < rules.n_add_item; i++) {
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.add_items[i].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.add_items[i].incl_ids_str,
rules.add_items[i].super_group_id, rules.add_items[i].is_exclude, 1); rules.add_items[i].super_group_id, rules.add_items[i].excl_ids_str, 1);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
} }
@@ -394,8 +405,8 @@ TEST_F(MaatGroupExclude, level_4_perf) {
//delete group_id = 10, super_group_id = 6, is_exclude = 1 //delete group_id = 10, super_group_id = 6, is_exclude = 1
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.del_items[0].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.del_items[0].incl_ids_str,
rules.del_items[0].super_group_id, rules.del_items[0].is_exclude, 0); rules.del_items[0].super_group_id, rules.del_items[0].excl_ids_str, 0);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
group2group_runtime_commit(g2g_runtime, table_name, 8); group2group_runtime_commit(g2g_runtime, table_name, 8);
@@ -423,14 +434,15 @@ TEST_F(MaatGroupExclude, level_exceed_function) {
assert(0); assert(0);
} }
memset(&rules, 0, sizeof(rules));
int ret = parse_config_file("group_exclude_exceed.conf", &rules); int ret = parse_config_file("group_exclude_exceed.conf", &rules);
EXPECT_EQ(ret, 0); EXPECT_EQ(ret, 0);
for (size_t i = 0; i < rules.n_add_item; i++) { for (size_t i = 0; i < rules.n_add_item; i++) {
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.add_items[i].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.add_items[i].incl_ids_str,
rules.add_items[i].super_group_id, rules.add_items[i].is_exclude, 1); rules.add_items[i].super_group_id, rules.add_items[i].excl_ids_str, 1);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
} }
@@ -450,8 +462,8 @@ TEST_F(MaatGroupExclude, level_exceed_function) {
//delete group_id = 13, super_group_id = 10, is_exclude = 0 //delete group_id = 13, super_group_id = 10, is_exclude = 0
memset(table_line, 0, sizeof(table_line)); memset(table_line, 0, sizeof(table_line));
sprintf(table_line, "%lld\t%lld\t%d\t%d", rules.del_items[0].group_id, sprintf(table_line, "%s\t%lld\t%s\t%d", rules.del_items[0].incl_ids_str,
rules.del_items[0].super_group_id, rules.del_items[0].is_exclude, 0); rules.del_items[0].super_group_id, rules.del_items[0].excl_ids_str, 0);
group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4); group2group_runtime_update(g2g_runtime, g2g_schema, table_name, table_line, 4);
group2group_runtime_commit(g2g_runtime, table_name, 9); group2group_runtime_commit(g2g_runtime, table_name, 9);

View File

@@ -3,9 +3,9 @@
"table_name":"EXCLUDE_GROUP2GROUP", "table_name":"EXCLUDE_GROUP2GROUP",
"table_type":"group2group", "table_type":"group2group",
"valid_column":4, "valid_column":4,
"custom": { "custom": {
"group_id":1, "incl_group_ids":1,
"super_group_id":2, "super_group_id":2,
"is_exclude":3 "excl_group_ids":3
} }
} }

View File

@@ -95,9 +95,9 @@
"table_type":"group2group", "table_type":"group2group",
"valid_column":4, "valid_column":4,
"custom": { "custom": {
"group_id":1, "incl_group_ids":1,
"super_group_id":2, "super_group_id":2,
"is_exclude":3 "excl_group_ids":3
} }
}, },
{ {