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
path: root/src
diff options
context:
space:
mode:
authorDmitrijs Goloscapovs <dmitrijs.goloscapovs@zabbix.com>2021-05-06 15:20:09 +0300
committerDmitrijs Goloscapovs <dmitrijs.goloscapovs@zabbix.com>2021-05-06 15:20:09 +0300
commit17a4c898dab43aeba205e4da6dd3d7df2a647ea5 (patch)
tree44065222d8c6d2e18336e1965e5cb8b8e6a9ba53 /src
parent09481af20a684721504cfb73c88d9158bfa6b61d (diff)
........S. [ZBX-19321] fixed missing event tags in case of multiple problems
Diffstat (limited to 'src')
-rw-r--r--src/zabbix_server/alerter/alert_syncer.c40
1 files changed, 29 insertions, 11 deletions
diff --git a/src/zabbix_server/alerter/alert_syncer.c b/src/zabbix_server/alerter/alert_syncer.c
index 69e31deb58a..268918454ad 100644
--- a/src/zabbix_server/alerter/alert_syncer.c
+++ b/src/zabbix_server/alerter/alert_syncer.c
@@ -487,10 +487,10 @@ ZBX_PTR_VECTOR_IMPL(events_tags, zbx_event_tags_t*)
static int zbx_event_tags_compare_func(const void *d1, const void *d2)
{
- const zbx_event_tags_t *event_tags_1 = (const zbx_event_tags_t *)d1;
- const zbx_event_tags_t *event_tags_2 = (const zbx_event_tags_t *)d2;
+ const zbx_event_tags_t *event_tags_1 = *(const zbx_event_tags_t **)d1;
+ const zbx_event_tags_t *event_tags_2 = *(const zbx_event_tags_t **)d2;
- return event_tags_1->eventid > event_tags_2->eventid;
+ return event_tags_1->eventid < event_tags_2->eventid;
}
static void event_tags_free(zbx_event_tags_t *event_tags)
@@ -667,6 +667,15 @@ static void am_db_validate_tags_for_update(zbx_vector_events_tags_t *update_even
zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __func__);
}
+
+static int zbx_result_compare_func(const void *d1, const void *d2)
+{
+ const zbx_am_result_t *result1 = *(const zbx_am_result_t **)d1;
+ const zbx_am_result_t *result2 = *(const zbx_am_result_t **)d2;
+
+ return result1->eventid > result2->eventid;
+}
+
/******************************************************************************
* *
* Function: am_db_flush_results *
@@ -697,10 +706,11 @@ static int am_db_flush_results(zbx_am_db_t *amdb)
if (0 != results_num)
{
- int i;
- char *sql;
- size_t sql_alloc = results_num * 128, sql_offset;
- zbx_db_insert_t db_event, db_problem;
+ int i;
+ char *sql;
+ size_t sql_alloc = results_num * 128, sql_offset;
+ zbx_db_insert_t db_event, db_problem;
+ zbx_vector_ptr_t result_vector;
sql = (char *)zbx_malloc(NULL, sql_alloc);
@@ -715,6 +725,8 @@ static int am_db_flush_results(zbx_am_db_t *amdb)
zbx_vector_events_tags_create(&update_events_tags);
+ zbx_vector_ptr_create(&result_vector);
+
for (i = 0; i < results_num; i++)
{
zbx_am_db_mediatype_t *mediatype;
@@ -741,14 +753,20 @@ static int am_db_flush_results(zbx_am_db_t *amdb)
{
mediatype = zbx_hashset_search(&amdb->mediatypes, &result->mediatypeid);
if (NULL != mediatype && 0 != mediatype->process_tags)
- {
- am_db_update_event_tags(result->eventid, result->value,
- &update_events_tags);
- }
+ zbx_vector_ptr_append(&result_vector, result);
}
DBexecute_overflowed_sql(&sql, &sql_alloc, &sql_offset);
}
+ zbx_vector_ptr_sort(&result_vector, zbx_result_compare_func);
+
+ for (i = 0; i < result_vector.values_num; i++)
+ {
+ zbx_am_result_t *result = (zbx_am_result_t*)result_vector.values[i];
+ am_db_update_event_tags(result->eventid, result->value,
+ &update_events_tags);
+ }
+
am_db_validate_tags_for_update(&update_events_tags, &db_event, &db_problem);
DBend_multiple_update(&sql, &sql_alloc, &sql_offset);