Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladislavs Sokurenko <vladislavs.sokurenko@zabbix.com>2022-11-04 14:52:23 +0300
committerVladislavs Sokurenko <vladislavs.sokurenko@zabbix.com>2022-11-04 14:52:23 +0300
commit6164a4aca87cad13e61102ce343fa2c3adb32a4e (patch)
tree09ed8e6981d67e31e2d906d2e59be6e08c917d01
parent39474703534840e2ef88901a9ee70dd3399371e8 (diff)
........S. [ZBX-21825] avoid unnecessary allocations when processing triggers
-rw-r--r--src/libs/zbxdbcache/dbcache.c24
-rw-r--r--src/libs/zbxserver/expression.c1
2 files changed, 10 insertions, 15 deletions
diff --git a/src/libs/zbxdbcache/dbcache.c b/src/libs/zbxdbcache/dbcache.c
index bab246b2db6..034d656d3b0 100644
--- a/src/libs/zbxdbcache/dbcache.c
+++ b/src/libs/zbxdbcache/dbcache.c
@@ -1580,11 +1580,9 @@ static void DCsync_trends(void)
******************************************************************************/
static void recalculate_triggers(const ZBX_DC_HISTORY *history, int history_num,
const zbx_vector_uint64_t *history_itemids, const DC_ITEM *history_items, const int *history_errcodes,
- const zbx_vector_uint64_t *timer_triggerids, zbx_timespec_t *ts, zbx_vector_ptr_t *trigger_diff)
+ const zbx_vector_uint64_t *timer_triggerids, zbx_timespec_t *ts, zbx_vector_ptr_t *trigger_diff, zbx_uint64_t *itemids, zbx_timespec_t *timespecs)
{
int i, item_num = 0;
- zbx_uint64_t *itemids = NULL;
- zbx_timespec_t *timespecs = NULL;
zbx_hashset_t trigger_info;
zbx_vector_ptr_t trigger_order;
zbx_vector_ptr_t trigger_items;
@@ -1593,9 +1591,6 @@ static void recalculate_triggers(const ZBX_DC_HISTORY *history, int history_num,
if (0 != history_num)
{
- itemids = (zbx_uint64_t *)zbx_malloc(itemids, sizeof(zbx_uint64_t) * (size_t)history_num);
- timespecs = (zbx_timespec_t *)zbx_malloc(timespecs, sizeof(zbx_timespec_t) * (size_t)history_num);
-
for (i = 0; i < history_num; i++)
{
const ZBX_DC_HISTORY *h = &history[i];
@@ -1640,9 +1635,6 @@ static void recalculate_triggers(const ZBX_DC_HISTORY *history, int history_num,
zbx_hashset_destroy(&trigger_info);
zbx_vector_ptr_destroy(&trigger_order);
out:
- zbx_free(timespecs);
- zbx_free(itemids);
-
zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __func__);
}
@@ -2892,8 +2884,11 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
zbx_vector_ptr_t history_items, trigger_diff, item_diff, inventory_values;
zbx_vector_uint64_pair_t trends_diff, proxy_subscribtions;
ZBX_DC_HISTORY history[ZBX_HC_SYNC_MAX];
+ zbx_uint64_t trigger_itemids[ZBX_HC_SYNC_MAX];
+ zbx_timespec_t trigger_timespecs[ZBX_HC_SYNC_MAX];
DC_ITEM *items = NULL;
int *errcodes = NULL;
+ zbx_vector_uint64_t itemids;
item_retrieve_mode = NULL == CONFIG_EXPORT_DIR ? ZBX_ITEM_GET_SYNC : ZBX_ITEM_GET_SYNC_EXPORT;
@@ -2944,17 +2939,16 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
zbx_vector_ptr_create(&history_items);
zbx_vector_ptr_reserve(&history_items, ZBX_HC_SYNC_MAX);
+ zbx_vector_uint64_create(&itemids);
+
sync_start = time(NULL);
do
{
int trends_num = 0, timers_num = 0, ret = SUCCEED;
- zbx_vector_uint64_t itemids;
ZBX_DC_TREND *trends = NULL;
zbx_timespec_t ts;
- zbx_vector_uint64_create(&itemids);
-
*more = ZBX_SYNC_DONE;
LOCK_CACHE;
@@ -3049,7 +3043,8 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
DBbegin();
recalculate_triggers(history, history_num, &itemids, items, errcodes,
- &timer_triggerids, &ts, &trigger_diff);
+ &timer_triggerids, &ts, &trigger_diff, trigger_itemids,
+ trigger_timespecs);
/* process trigger events generated by recalculate_triggers() */
zbx_process_events(&trigger_diff, &triggerids);
@@ -3160,7 +3155,7 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
hc_free_item_values(history, history_num);
}
- zbx_vector_uint64_destroy(&itemids);
+ zbx_vector_uint64_clear(&itemids);
/* Exit from sync loop if we have spent too much time here. */
/* This is done to allow syncer process to update its statistics. */
@@ -3170,6 +3165,7 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
zbx_free(items);
zbx_free(errcodes);
+ zbx_vector_uint64_destroy(&itemids);
zbx_vector_ptr_destroy(&history_items);
zbx_vector_ptr_destroy(&inventory_values);
zbx_vector_ptr_destroy(&item_diff);
diff --git a/src/libs/zbxserver/expression.c b/src/libs/zbxserver/expression.c
index 09f6edaaa05..fa999f3c9a3 100644
--- a/src/libs/zbxserver/expression.c
+++ b/src/libs/zbxserver/expression.c
@@ -4861,7 +4861,6 @@ void zbx_determine_items_in_expressions(zbx_vector_ptr_t *trigger_order, const z
zbx_vector_uint64_create(&itemids_sorted);
zbx_vector_uint64_append_array(&itemids_sorted, itemids, item_num);
- zbx_vector_uint64_sort(&itemids_sorted, ZBX_DEFAULT_UINT64_COMPARE_FUNC);
zbx_vector_ptr_create(&triggers_func_pos);
zbx_vector_ptr_reserve(&triggers_func_pos, trigger_order->values_num);