@cryptotaxi247 / netdata-1 / commits / f2e157e69

added debug info on left-over query targets (#13990)

Costa Tsaousis committed Nov 14, 2022 at 02:06 UTC f2e157e690e34413325c2781d91a894ac39552d3
4 files changed +15 -8
database/rrdcontext.c
+1
@@ -2276,6 +2276,7 @@ typedef struct query_target_locals {
2276 static __thread QUERY_TARGET thread_query_target = {};
2277 void query_target_release(QUERY_TARGET *qt) {
2278 if(unlikely(!qt)) return;
2279 + if(unlikely(!qt->used)) return;
2280
2281 simple_pattern_free(qt->hosts.pattern);
2282 qt->hosts.pattern = NULL;
web/api/queries/query.c
+7 -1
@@ -1963,7 +1963,13 @@ RRDR *rrd2rrdr_legacy(
1963 }
1964
1965 RRDR *rrd2rrdr(ONEWAYALLOC *owa, QUERY_TARGET *qt) {
1966 - if(!qt || !owa) return NULL;
1966 + if(!qt)
1967 + return NULL;
1968 +
1969 + if(!owa) {
1970 + query_target_release(qt);
1971 + return NULL;
1972 + }
1973
1974 time_t timeout = qt->request.timeout;
1975 time_t resampling_time_requested = qt->request.resampling_time;
web/api/queries/rrdr.c
+1 -6
@@ -71,14 +71,9 @@ inline void rrdr_free(ONEWAYALLOC *owa, RRDR *r) {
71 }
72
73 RRDR *rrdr_create(ONEWAYALLOC *owa, QUERY_TARGET *qt) {
74 - if(unlikely(!qt))
74 + if(unlikely(!qt || !qt->query.used || !qt->window.points))
75 return NULL;
76
77 - if(unlikely(!qt->query.used || !qt->window.points)) {
78 - query_target_release(qt);
79 - return NULL;
80 - }
81 -
77 size_t dimensions = qt->query.used;
78 size_t points = qt->window.points;
79
web/api/web_api_v1.c
+6 -1
@@ -713,6 +713,7 @@ inline int web_client_api_request_v1_data(RRDHOST *host, struct web_client *w, c
713
714 RRDSET *st = NULL;
715 ONEWAYALLOC *owa = onewayalloc_create(0);
716 + QUERY_TARGET *qt = NULL;
717
718 if(!is_valid_sp(chart) && !is_valid_sp(context)) {
719 buffer_sprintf(w->response.data, "No chart or context is given.");
@@ -751,7 +752,7 @@ inline int web_client_api_request_v1_data(RRDHOST *host, struct web_client *w, c
752 .chart_label_key = chart_label_key,
753 .charts_labels_filter = chart_labels_filter,
754 };
754 - QUERY_TARGET *qt = query_target_create(&qtr);
755 + qt = query_target_create(&qtr);
756
757 if(!qt || !qt->query.used) {
758 buffer_sprintf(w->response.data, "No metrics where matched to query.");
@@ -822,6 +823,10 @@ inline int web_client_api_request_v1_data(RRDHOST *host, struct web_client *w, c
823 buffer_strcat(w->response.data, ");");
824
825 cleanup:
826 + if(qt && qt->used) {
827 + internal_error(true, "QUERY_TARGET: left non-released on query '%s'", qt->id);
828 + query_target_release(qt);
829 + }
830 onewayalloc_destroy(owa);
831 buffer_free(dimensions);
832 return ret;