diff options
author | Vladislavs Sokurenko <vladislavs.sokurenko@zabbix.com> | 2022-11-04 14:52:23 +0300 |
---|---|---|
committer | Vladislavs Sokurenko <vladislavs.sokurenko@zabbix.com> | 2022-11-04 14:52:23 +0300 |
commit | 6164a4aca87cad13e61102ce343fa2c3adb32a4e (patch) | |
tree | 09ed8e6981d67e31e2d906d2e59be6e08c917d01 | |
parent | 39474703534840e2ef88901a9ee70dd3399371e8 (diff) |
........S. [ZBX-21825] avoid unnecessary allocations when processing triggers
-rw-r--r-- | src/libs/zbxdbcache/dbcache.c | 24 | ||||
-rw-r--r-- | src/libs/zbxserver/expression.c | 1 |
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); |