summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchenzizhan <[email protected]>2024-10-16 15:29:28 +0800
committerchenzizhan <[email protected]>2024-10-16 15:29:28 +0800
commit7a81c67ec9534772fc3041a8ba9212f11038627d (patch)
tree8c16833d6d7516b3d776db656d565e66ad28d450
parent0881c354b6ea011f6213c0f0af237e9260ca798a (diff)
fieldstat_easy_counter_incrby_batch
-rw-r--r--include/fieldstat/fieldstat.h3
-rw-r--r--include/fieldstat/fieldstat_easy.h5
-rw-r--r--src/cube.c2
-rw-r--r--src/cube.h2
-rw-r--r--src/fieldstat.c2
-rw-r--r--src/fieldstat_easy.c16
6 files changed, 21 insertions, 9 deletions
diff --git a/include/fieldstat/fieldstat.h b/include/fieldstat/fieldstat.h
index f47fb2d..b539ab8 100644
--- a/include/fieldstat/fieldstat.h
+++ b/include/fieldstat/fieldstat.h
@@ -130,8 +130,7 @@ int fieldstat_counter_incrby(struct fieldstat *instance, int cube_id, int metric
* @param n_metrics: the length of metric_ids and increments.
* @return Error codes. Or just assert fail if the parameters are invalid.
*/
-int fieldstat_counter_incrby_batch(struct fieldstat *instance, int cube_id, const struct field *cell_dimensions, size_t n_dimensions, int metric_ids[], long long increments[], size_t n_metrics);
-
+int fieldstat_counter_incrby_batch(struct fieldstat *instance, int cube_id, const struct field *cell_dimensions, size_t n_dimensions, const int metric_ids[], const long long increments[], size_t n_metrics);
/*
* @brief let the value of counter metric equal to value. Must be called on non-primary metric. Other annotations refer to fieldstat_counter_incrby.
diff --git a/include/fieldstat/fieldstat_easy.h b/include/fieldstat/fieldstat_easy.h
index 97d7394..4074c70 100644
--- a/include/fieldstat/fieldstat_easy.h
+++ b/include/fieldstat/fieldstat_easy.h
@@ -65,10 +65,7 @@ int fieldstat_easy_output_array_and_reset(struct fieldstat_easy *fse, char ***js
*/
int fieldstat_easy_counter_incrby(struct fieldstat_easy *fse, int thread_id, int metric_id, const struct field *dimensions, size_t n_dimensions, long long increment);
-
-// TODO: easy 的加速使用,跟其他人对接一下。包括如何在不改变fieldstat.h 的基础上再来一套接口。
-// int fieldstat_easy_counter_incrby(struct fieldstat_easy *fse, int thread_id, int metric_id, int cell_id, long long increment);
-// int fieldstat_easy_add_cell(struct fieldstat_easy *fse,const struct field *dimensions, size_t n_dimensions);
+int fieldstat_easy_counter_incrby_batch(struct fieldstat_easy *fse, int thread_id, int metric_ids[], const struct field *dimensions, size_t n_dimensions, const long long *increments, size_t n_metrics);
/*
* @brief let the value of counter metric of dimensions equal to `value`.
diff --git a/src/cube.c b/src/cube.c
index 57124cb..ab68dfe 100644
--- a/src/cube.c
+++ b/src/cube.c
@@ -965,7 +965,7 @@ int cube_counter_incrby(struct cube *cube, int metric_id, const struct field *di
return FS_OK;
}
-int cube_counter_incrby_batch(struct cube *cube, int metric_ids[], const struct field *dimensions, size_t n_dimensions, long long increments[], size_t n_metrics) {
+int cube_counter_incrby_batch(struct cube *cube, const int metric_ids[], const struct field *dimensions, size_t n_dimensions, const long long increments[], size_t n_metrics) {
if (cube->primary_metric_id == -1) {
return FS_ERR_CUBE_SAMPLING_NOT_INITIALIZED;
}
diff --git a/src/cube.h b/src/cube.h
index 9098b43..7ced173 100644
--- a/src/cube.h
+++ b/src/cube.h
@@ -32,7 +32,7 @@ int cube_hll_add(struct cube *cube, int metric_id, const struct field *dimension
int cube_hll_add_field(struct cube *cube, int metric_id, const struct field *dimensions, size_t n_dimensions, const struct field *item_fields, size_t n_item);
int cube_counter_incrby(struct cube *cube, int metric_id, const struct field *dimensions, size_t n_dimensions, long long increment);
int cube_counter_set(struct cube *cube, int metric_id, const struct field *dimensions, size_t n_dimensions, long long value);
-int cube_counter_incrby_batch(struct cube *cube, int metric_ids[], const struct field *dimensions, size_t n_dimensions, long long increments[], size_t n_metrics);
+int cube_counter_incrby_batch(struct cube *cube, const int metric_ids[], const struct field *dimensions, size_t n_dimensions, const long long increments[], size_t n_metrics);
/* ---------------------------------- query --------------------------------- */
int cube_counter_get(const struct cube *cube, int metric_id, const struct field_list *dimensions, long long *value);
diff --git a/src/fieldstat.c b/src/fieldstat.c
index 7782051..76bd478 100644
--- a/src/fieldstat.c
+++ b/src/fieldstat.c
@@ -158,7 +158,7 @@ int fieldstat_counter_incrby(struct fieldstat *instance, int cube_id, int metric
}
// cppcheck-suppress [constParameterPointer, unmatchedSuppression]
-int fieldstat_counter_incrby_batch(struct fieldstat *instance, int cube_id, const struct field *cell_dimensions, size_t n_dimensions, int metric_ids[], long long increments[], size_t n_metrics)
+int fieldstat_counter_incrby_batch(struct fieldstat *instance, int cube_id, const struct field *cell_dimensions, size_t n_dimensions, const int metric_ids[], const long long increments[], size_t n_metrics)
{
struct cube *cube = cube_manager_get_cube_by_id(instance->cube_manager, cube_id);
if (cube == NULL) {
diff --git a/src/fieldstat_easy.c b/src/fieldstat_easy.c
index ed94484..43447b3 100644
--- a/src/fieldstat_easy.c
+++ b/src/fieldstat_easy.c
@@ -339,6 +339,22 @@ int fieldstat_easy_counter_incrby(struct fieldstat_easy *fse, int thread_id, int
return ret;
}
+int fieldstat_easy_counter_incrby_batch(struct fieldstat_easy *fse, int thread_id, int metric_ids[], const struct field *dimensions, size_t n_dimensions, const long long *increments, size_t n_metrics)
+{
+ if (thread_id < 0) {
+ return -1;
+ }
+ if (thread_id >= fse->max_thread_num) {
+ return -1;
+ }
+
+ pthread_spin_lock(&fse->fsu[thread_id].lock);
+ int ret = fieldstat_counter_incrby_batch(fse->fsu[thread_id].active, 0, dimensions, n_dimensions, metric_ids, increments, n_metrics);
+ pthread_spin_unlock(&fse->fsu[thread_id].lock);
+
+ return ret;
+}
+
int fieldstat_easy_counter_set(struct fieldstat_easy *fse, int thread_id, int metric_id, const struct field *dimensions, size_t n_dimensions, long long value)
{
if (thread_id < 0) {