diff options
| author | chenzizhan <[email protected]> | 2023-09-28 10:59:51 +0800 |
|---|---|---|
| committer | chenzizhan <[email protected]> | 2023-09-28 10:59:51 +0800 |
| commit | d99d0800d269126e7555e63ac31bb473e29e3ddb (patch) | |
| tree | 053869f872e5841eb5cd8812700b1194db552363 | |
| parent | 7703a27bae588ef4c2f28d992a9c0e27364a8470 (diff) | |
refactor
| -rw-r--r-- | src/fieldstat.c | 35 | ||||
| -rw-r--r-- | src/tags/heavy_keeper.c | 12 |
2 files changed, 19 insertions, 28 deletions
diff --git a/src/fieldstat.c b/src/fieldstat.c index 96547fe..0f3cffc 100644 --- a/src/fieldstat.c +++ b/src/fieldstat.c @@ -201,12 +201,16 @@ long long fieldstat_get_cube_version(const struct fieldstat *instance, int cube_ /* cube */ /* -------------------------------------------------------------------------- */ -void fieldstat_clear_one_tag(const struct fieldstat_tag *tag) +void fieldstat_free_tag_array(struct fieldstat_tag *tags, size_t n_tags) { - free((char *)tag->key); - if (tag->type == TAG_CSTRING && tag->value_str != NULL) { - free((char *)tag->value_str); + for (size_t i = 0; i < n_tags; i++) { + struct fieldstat_tag *tag = &tags[i]; + free((char *)tag->key); + if (tag->type == TAG_CSTRING) { + free((char *)tag->value_str); + } } + free(tags); } void add_cube_to_position(struct fieldstat *instance, struct fs_cube *cube, int cube_id) @@ -365,10 +369,7 @@ void fieldstat_cube_free(struct fieldstat *instance, int cube_id) cube_manager_delete(instance->shared_tag_cube_manager, cube->key_tag); cell_manager_free(cube->cell_manager); - for (size_t i = 0; i < cube->n_shared_tags; i++) { - fieldstat_clear_one_tag(&cube->shared_tags[i]); - } - free(cube->shared_tags); + fieldstat_free_tag_array(cube->shared_tags, cube->n_shared_tags); tag_hash_key_free(cube->key_tag); for (size_t i = 0; i < cube->valid_metric_arr_len; i++) { @@ -771,15 +772,10 @@ void fieldstat_cube_merge_topk(struct fs_cube *dest, const struct fs_cube *src, metric_delete_cell(dest->metrics[j], id); } } - if (cell_id_popped != NULL) { - free(cell_id_popped); - } - if (cell_id_added != NULL) { - free(cell_id_added); - } - if (cell_id_old != NULL) { - free(cell_id_old); - } + + free(cell_id_popped); + free(cell_id_added); + free(cell_id_old); } void fieldstat_cube_merge(struct fs_cube *dest, const struct fs_cube *src, const int *metric_id_src_dest_map) @@ -1288,10 +1284,7 @@ void fieldstat_tag_list_arr_free(struct fieldstat_tag_list *tag_list, size_t n_c return; } for (int i = 0; i < n_cell; i++) { - for (int j = 0; j < tag_list[i].n_tag; j++) { - fieldstat_clear_one_tag(&(tag_list[i].tag[j])); - } - free(tag_list[i].tag); + fieldstat_free_tag_array(tag_list[i].tag, tag_list[i].n_tag); } free(tag_list); } diff --git a/src/tags/heavy_keeper.c b/src/tags/heavy_keeper.c index 2790cf1..f79c479 100644 --- a/src/tags/heavy_keeper.c +++ b/src/tags/heavy_keeper.c @@ -416,7 +416,7 @@ void heavy_keeper_merge_sorted_set_recording_id_details(struct heavy_keeper *des sorted_set_insert(new_rec, tag_arr[i], maxv, cell_id_arr_dst[i]); } - qsort(cell_id_arr_dst, size_dest, sizeof(int), cmp_int); + qsort(cell_id_arr_dst, size_dest, sizeof(int), cmp_int); // use in find_next_unused_cell_id to find the minimum unused cell_id /* ------------------------------ merge source ------------------------------ */ int *cell_id_arr_src = (int *)malloc(size_src * sizeof(int)); @@ -430,20 +430,20 @@ void heavy_keeper_merge_sorted_set_recording_id_details(struct heavy_keeper *des int cell_id_dest = sorted_set_get_cell_id(ss_dest, tag_src); int cell_id_src = cell_id_arr_src[i]; - if (cell_id_dest != -1) { // the tag is in both dest and src, so has been processed in the previous loop. Just record some info + if (cell_id_dest != -1) { // the tag is in both dest and src, so has been processed in the previous loop. The reason why no need to sum up result is that merging sketch already gets its summed up count cell_id_in_src_before_merge[cell_id_in_src_before_merge_len] = cell_id_src; cell_id_in_dest_corresponding[cell_id_in_src_before_merge_len] = cell_id_dest; cell_id_in_src_before_merge_len++; continue; } - // the dest heavy keeper has been merged, so the maxv is the maxv in the merged sketch, instead of the dest sketch - unsigned maxv = find_maxv_in_sketch(dest, tag_src); + + unsigned maxv = find_maxv_in_sketch(dest, tag_src); // the dest heavy keeper has been merged, so the maxv is the maxv in the merged sketch, instead of the dest sketch int popped_id = -1; int now_idx = next_idx; int find_id = find_next_unused_cell_id(cell_id_arr_dst, size_dest, last_find_id, &now_idx); int tmp_ret = sorted_set_insert_and_record_popped_back(new_rec, tag_src, maxv, find_id, &popped_id); - if (tmp_ret == 2) { // insert success and popped one. the previous tag_final is already freed by sorted_set + if (tmp_ret == 2) { // insert success and popped one. cell_id_popped_from_dest_when_merge_src[cell_id_popped_from_dest_when_merge_src_len++] = popped_id; } if (tmp_ret != 0) { // insert success @@ -472,7 +472,6 @@ void heavy_keeper_merge_sorted_set_recording_id_details(struct heavy_keeper *des memcpy(*cell_id_popped_from_dest_when_merge_src_out, cell_id_popped_from_dest_when_merge_src, cell_id_popped_from_dest_when_merge_src_len * sizeof(int)); *cell_id_popped_from_dest_when_merge_src_len_out = cell_id_popped_from_dest_when_merge_src_len; } - if (cell_id_in_src_before_merge_len == 0) { *cell_id_in_src_before_merge_out = NULL; *cell_id_in_src_before_merge_len_out = 0; @@ -486,7 +485,6 @@ void heavy_keeper_merge_sorted_set_recording_id_details(struct heavy_keeper *des } } - int heavy_keeper_merge_recording_id_details(struct heavy_keeper *dest, const struct heavy_keeper *src, int **cell_id_popped_from_dest_when_merge_src_out, int *cell_id_popped_from_dest_when_merge_src_len_out, int **cell_id_in_src_before_merge_out, int **cell_id_in_dest_corresponding_out, int *cell_id_in_src_before_merge_len_out) |
