Fix health api call (#21952)
- Add proper acquire / release logic for instances
Stelios Fragkakis committed
Mar 16, 2026 at 16:02 UTC
7bbee1f747df8d07dd6027285f87517d9a84119c
1 file changed
+17
-6
src/database/contexts/query_target.c
+17
-6
@@ -902,31 +902,42 @@ static ssize_t query_scope_foreach_instance(QUERY_TARGET_LOCALS *qtl, QUERY_NODE
902
if(query_instance_add(qtl, qn, qc, qt->request.ria, queryable_context, false))
903
added++;
904
}
905
- else if(unlikely(qtl->st && qtl->st->rrdcontexts.rrdcontext == rca && qtl->st->rrdcontexts.rrdinstance)) {
905
+ else if(unlikely(qtl->st && qtl->st->rrdcontexts.rrdcontext == rca)) {
906
// Single chart requested
907
- RRDINSTANCE *ri = rrdinstance_acquired_value(qtl->st->rrdcontexts.rrdinstance);
907
+ RRDINSTANCE_ACQUIRED *ria = (RRDINSTANCE_ACQUIRED *)dictionary_get_and_acquire_item(
908
+ rc->rrdinstances, string2str(qtl->st->id));
909
+ if(unlikely(!ria))
910
+ return 0;
911
+
912
+ RRDINSTANCE *ri = rrdinstance_acquired_value(ria);
913
914
// Check scope_instances
915
if(qt->instances.scope_pattern) {
911
- QUERY_INSTANCE qi = { .ria = qtl->st->rrdcontexts.rrdinstance };
916
+ QUERY_INSTANCE qi = { .ria = ria };
917
SIMPLE_PATTERN_RESULT ret = query_instance_matches(&qi, ri,
918
qt->instances.scope_pattern, qtl->match_ids, qtl->match_names,
919
qt->request.version, qtl->host_node_id_str);
920
query_instance_strings_free(&qi);
916
- if(ret != SP_MATCHED_POSITIVE)
921
+ if(ret != SP_MATCHED_POSITIVE) {
922
+ rrdinstance_release(ria);
923
return 0;
924
+ }
925
}
926
927
// Check scope_labels
928
if(qt->instances.scope_labels_pa || qt->instances.scope_chart_label_key_pattern) {
929
if(!query_instance_matches_labels(ri,
930
qt->instances.scope_chart_label_key_pattern,
924
- qt->instances.scope_labels_pa))
931
+ qt->instances.scope_labels_pa)) {
932
+ rrdinstance_release(ria);
933
return 0;
934
+ }
935
}
936
928
- if(query_instance_add(qtl, qn, qc, qtl->st->rrdcontexts.rrdinstance, queryable_context, false))
937
+ if(query_instance_add(qtl, qn, qc, ria, queryable_context, false))
938
added++;
939
+
940
+ rrdinstance_release(ria);
941
}
942
else {
943
// Pattern query - iterate through all instances