summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchenzizhan <[email protected]>2023-09-28 10:59:51 +0800
committerchenzizhan <[email protected]>2023-09-28 10:59:51 +0800
commitd99d0800d269126e7555e63ac31bb473e29e3ddb (patch)
tree053869f872e5841eb5cd8812700b1194db552363
parent7703a27bae588ef4c2f28d992a9c0e27364a8470 (diff)
refactor
-rw-r--r--src/fieldstat.c35
-rw-r--r--src/tags/heavy_keeper.c12
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)