diff options
author | Vladislavs Sokurenko <vladislavs.sokurenko@zabbix.com> | 2022-11-04 15:46:11 +0300 |
---|---|---|
committer | Vladislavs Sokurenko <vladislavs.sokurenko@zabbix.com> | 2022-11-04 15:46:11 +0300 |
commit | 2c798fa0ebd51774be3d1c58e0a192dfdada6aa8 (patch) | |
tree | 98bbfc35cff443fa2a31575db05f5750947c1dba | |
parent | 45c71b0a1655431bee127b504e37071ffaf80970 (diff) |
........S. [ZBX-21825] avoid unnecessary allocations when processing triggers
-rw-r--r-- | src/libs/zbxdbcache/dbcache.c | 47 |
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); |