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 15:46:11 +0300
committerVladislavs Sokurenko <vladislavs.sokurenko@zabbix.com>2022-11-04 15:46:11 +0300
commit2c798fa0ebd51774be3d1c58e0a192dfdada6aa8 (patch)
tree98bbfc35cff443fa2a31575db05f5750947c1dba
parent45c71b0a1655431bee127b504e37071ffaf80970 (diff)
........S. [ZBX-21825] avoid unnecessary allocations when processing triggers
-rw-r--r--src/libs/zbxdbcache/dbcache.c47
1 files changed, 23 insertions, 24 deletions
diff --git a/src/libs/zbxdbcache/dbcache.c b/src/libs/zbxdbcache/dbcache.c
index beedbaeb9c2..934a320795b 100644
--- a/src/libs/zbxdbcache/dbcache.c
+++ b/src/libs/zbxdbcache/dbcache.c
@@ -1580,12 +1580,11 @@ 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, zbx_uint64_t *itemids, zbx_timespec_t *timespecs)
+ 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, zbx_hashset_t *trigger_info,
+ zbx_vector_ptr_t *trigger_order)
{
int i, item_num = 0;
- zbx_hashset_t trigger_info;
- zbx_vector_ptr_t trigger_order;
- zbx_vector_ptr_t trigger_items;
zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __func__);
@@ -1607,33 +1606,26 @@ static void recalculate_triggers(const ZBX_DC_HISTORY *history, int history_num,
if (0 == item_num && 0 == timer_triggerids->values_num)
goto out;
- zbx_hashset_create(&trigger_info, MAX(100, 2 * item_num + timer_triggerids->values_num),
- ZBX_DEFAULT_UINT64_HASH_FUNC, ZBX_DEFAULT_UINT64_COMPARE_FUNC);
-
- zbx_vector_ptr_create(&trigger_order);
- zbx_vector_ptr_reserve(&trigger_order, trigger_info.num_slots);
-
- zbx_vector_ptr_create(&trigger_items);
+ zbx_hashset_reserve(trigger_info, MAX(100, 2 * item_num + timer_triggerids->values_num));
+ zbx_vector_ptr_reserve(trigger_order, trigger_info->num_slots);
if (0 != item_num)
{
- DCconfig_get_triggers_by_itemids(&trigger_info, &trigger_order, itemids, timespecs, item_num);
- zbx_determine_items_in_expressions(&trigger_order, itemids, item_num);
+ DCconfig_get_triggers_by_itemids(trigger_info, trigger_order, itemids, timespecs, item_num);
+ zbx_determine_items_in_expressions(trigger_order, itemids, item_num);
}
if (0 != timer_triggerids->values_num)
- zbx_dc_get_timer_triggers_by_triggerids(&trigger_info, &trigger_order, timer_triggerids, ts);
+ zbx_dc_get_timer_triggers_by_triggerids(trigger_info, trigger_order, timer_triggerids, ts);
- zbx_vector_ptr_sort(&trigger_order, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC);
- evaluate_expressions(&trigger_order, history_itemids, history_items, history_errcodes);
- zbx_process_triggers(&trigger_order, trigger_diff);
+ zbx_vector_ptr_sort(trigger_order, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC);
+ evaluate_expressions(trigger_order, history_itemids, history_items, history_errcodes);
+ zbx_process_triggers(trigger_order, trigger_diff);
- DCfree_triggers(&trigger_order);
+ DCfree_triggers(trigger_order);
- zbx_vector_ptr_destroy(&trigger_items);
-
- zbx_hashset_destroy(&trigger_info);
- zbx_vector_ptr_destroy(&trigger_order);
+ zbx_hashset_clear(trigger_info);
+ zbx_vector_ptr_clear(trigger_order);
out:
zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __func__);
}
@@ -2882,7 +2874,7 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
unsigned int item_retrieve_mode;
time_t sync_start;
zbx_vector_uint64_t triggerids, timer_triggerids;
- zbx_vector_ptr_t history_items, trigger_diff, item_diff, inventory_values;
+ zbx_vector_ptr_t history_items, trigger_diff, item_diff, inventory_values, trigger_order;
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];
@@ -2890,6 +2882,7 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
DC_ITEM *items = NULL;
int *errcodes = NULL;
zbx_vector_uint64_t itemids;
+ zbx_hashset_t trigger_info;
item_retrieve_mode = NULL == CONFIG_EXPORT_DIR ? ZBX_ITEM_GET_SYNC : ZBX_ITEM_GET_SYNC_EXPORT;
@@ -2945,6 +2938,9 @@ 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_ptr_create(&trigger_order);
+ zbx_hashset_create(&trigger_info, 100, ZBX_DEFAULT_UINT64_HASH_FUNC, ZBX_DEFAULT_UINT64_COMPARE_FUNC);
+
zbx_vector_uint64_create(&itemids);
sync_start = time(NULL);
@@ -3050,7 +3046,7 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
recalculate_triggers(history, history_num, &itemids, items, errcodes,
&timer_triggerids, &ts, &trigger_diff, trigger_itemids,
- trigger_timespecs);
+ trigger_timespecs, &trigger_info, &trigger_order);
/* process trigger events generated by recalculate_triggers() */
zbx_process_events(&trigger_diff, &triggerids);
@@ -3174,6 +3170,9 @@ static void sync_server_history(int *values_num, int *triggers_num, int *more)
zbx_free(items);
zbx_free(errcodes);
+ zbx_vector_ptr_destroy(&trigger_order);
+ zbx_hashset_destroy(&trigger_info);
+
zbx_vector_uint64_destroy(&itemids);
zbx_vector_ptr_destroy(&history_items);
zbx_vector_ptr_destroy(&inventory_values);