diff options
| author | chenzizhan <[email protected]> | 2024-08-12 14:03:02 +0800 |
|---|---|---|
| committer | chenzizhan <[email protected]> | 2024-08-12 14:03:02 +0800 |
| commit | 7ccaafd2c6b2527ac9b98c4c376ce29a8c5e5cb9 (patch) | |
| tree | 84f6da24d6df7a876f1d32a799973440cd348ac8 /src | |
| parent | f58e284c904982364caad7fced8dcc0b6fa71737 (diff) | |
TSG-22150v4.6.3
Diffstat (limited to 'src')
| -rw-r--r-- | src/cells/spread_sketch.c | 5 | ||||
| -rw-r--r-- | src/cube.c | 20 |
2 files changed, 21 insertions, 4 deletions
diff --git a/src/cells/spread_sketch.c b/src/cells/spread_sketch.c index f95b0f1..9618771 100644 --- a/src/cells/spread_sketch.c +++ b/src/cells/spread_sketch.c @@ -248,7 +248,6 @@ int spread_sketch_add_hash(struct spread_sketch *ss, const char *entry, size_t e if (ss->level0_cnt == 0) { return 0; } - assert(ss->level0_cnt>0); } // https://www.eecs.harvard.edu/~michaelm/postscripts/tr-02-05.pdf @@ -298,7 +297,9 @@ int spread_sketch_add_hash(struct spread_sketch *ss, const char *entry, size_t e in_sketch = true; } } - hll_add_hash(bucket->sthll_register, ss->precision, item_hash); + if (item_hash != DUMMY_ITEM_HASH) { + hll_add_hash(bucket->sthll_register, ss->precision, item_hash); + } } return in_sketch ? 1 : 0; @@ -1202,9 +1202,15 @@ int cube_counter_get(const struct cube *cube, int metric_id, const struct field_ void *exdata_dummy = NULL; heavy_keeper_one_point_query(cube->heavykeeper, dimension_in_string, dimension_string_len, &count, &exdata_dummy); *value = count; - free(dimension_in_string); - return count == 0 ? FS_ERR_INVALID_DIMENSION : FS_OK; + + if (exdata_dummy == NULL) { + return FS_ERR_INVALID_DIMENSION; + } + if (count == 0) { + return FS_ERR_INVALID_METRIC_ID; + } + return FS_OK; } int ret; @@ -1231,6 +1237,8 @@ int cube_hll_get(const struct cube *cube, int metric_id, const struct field_list free(dimension_in_string); if (hll_value < 0) { return FS_ERR_INVALID_DIMENSION; + } else if (hll_value == 0.0) { + return FS_ERR_INVALID_METRIC_ID; } *value = hll_value; @@ -1280,11 +1288,19 @@ int cube_histogram_count_le_value(const struct cube *cube, int metric_id, const } int cube_get_serialization_as_base64(const struct cube *cube, int metric_id, const struct field_list *fields, char **blob, size_t *blob_size) { + *blob = NULL; + *blob_size = 0; if (cube->sampling_mode == SAMPLING_MODE_TOP_CARDINALITY && cube->primary_metric_id == metric_id) { char *dimension_in_string; size_t dimension_string_len; field_array_to_key(fields->field, fields->n_field, &dimension_in_string, &dimension_string_len); + double hll_value = spread_sketch_get_cardinality(cube->spread_sketch, dimension_in_string, dimension_string_len); + if (hll_value <= 0) { + free(dimension_in_string); + return hll_value == 0 ? FS_ERR_INVALID_METRIC_ID : FS_ERR_INVALID_DIMENSION; + } + *blob = spread_sketch_get_hll_base64_serialization(cube->spread_sketch, dimension_in_string, dimension_string_len); *blob_size = strlen(*blob); free(dimension_in_string); |
