rrdcontexts allow not linked dimensions and charts (#13501)
Costa Tsaousis committed
Aug 9, 2022 at 16:29 UTC
37ba5c1a29990c701a2c24ca1153b68b3ee4e7b2
1 file changed
+15
-4
database/rrdcontext.c
+15
-4
@@ -706,8 +706,10 @@ static inline void rrdmetric_from_rrddim(RRDDIM *rd) {
706
707
#define rrddim_get_rrdmetric(rd) rrddim_get_rrdmetric_with_trace(rd, __FUNCTION__)
708
static inline RRDMETRIC *rrddim_get_rrdmetric_with_trace(RRDDIM *rd, const char *function) {
709
- if(unlikely(!rd->rrdmetric))
710
- fatal("RRDMETRIC: RRDDIM '%s' is not linked to an RRDMETRIC at %s()", rd->id, function);
709
+ if(unlikely(!rd->rrdmetric)) {
710
+ error("RRDMETRIC: RRDDIM '%s' is not linked to an RRDMETRIC at %s()", rd->id, function);
711
+ return NULL;
712
+ }
713
714
RRDMETRIC *rm = rrdmetric_acquired_value(rd->rrdmetric);
715
@@ -719,6 +721,7 @@ static inline RRDMETRIC *rrddim_get_rrdmetric_with_trace(RRDDIM *rd, const char
721
722
static inline void rrdmetric_rrddim_is_freed(RRDDIM *rd) {
723
RRDMETRIC *rm = rrddim_get_rrdmetric(rd);
724
+ if(unlikely(!rm)) return;
725
726
if(unlikely(rrd_flag_is_collected(rm)))
727
rrd_flag_set_archived(rm);
@@ -731,6 +734,7 @@ static inline void rrdmetric_rrddim_is_freed(RRDDIM *rd) {
734
735
static inline void rrdmetric_updated_rrddim_flags(RRDDIM *rd) {
736
RRDMETRIC *rm = rrddim_get_rrdmetric(rd);
737
+ if(unlikely(!rm)) return;
738
739
if(unlikely(rd->flags & (RRDDIM_FLAG_ARCHIVED | RRDDIM_FLAG_OBSOLETE))) {
740
if(unlikely(rrd_flag_is_collected(rm)))
@@ -742,6 +746,7 @@ static inline void rrdmetric_updated_rrddim_flags(RRDDIM *rd) {
746
747
static inline void rrdmetric_collected_rrddim(RRDDIM *rd) {
748
RRDMETRIC *rm = rrddim_get_rrdmetric(rd);
749
+ if(unlikely(!rm)) return;
750
751
if(unlikely(!rrd_flag_is_collected(rm)))
752
rrd_flag_set_collected(rm);
@@ -1217,8 +1222,10 @@ static inline void rrdinstance_from_rrdset(RRDSET *st) {
1222
1223
#define rrdset_get_rrdinstance(st) rrdset_get_rrdinstance_with_trace(st, __FUNCTION__);
1224
static inline RRDINSTANCE *rrdset_get_rrdinstance_with_trace(RRDSET *st, const char *function) {
1220
- if(unlikely(!st->rrdinstance))
1221
- fatal("RRDINSTANCE: RRDSET '%s' is not linked to an RRDINSTANCE at %s()", st->id, function);
1225
+ if(unlikely(!st->rrdinstance)) {
1226
+ error("RRDINSTANCE: RRDSET '%s' is not linked to an RRDINSTANCE at %s()", st->id, function);
1227
+ return NULL;
1228
+ }
1229
1230
RRDINSTANCE *ri = rrdinstance_acquired_value(st->rrdinstance);
1231
@@ -1230,6 +1237,7 @@ static inline RRDINSTANCE *rrdset_get_rrdinstance_with_trace(RRDSET *st, const c
1237
1238
static inline void rrdinstance_rrdset_is_freed(RRDSET *st) {
1239
RRDINSTANCE *ri = rrdset_get_rrdinstance(st);
1240
+ if(unlikely(!ri)) return;
1241
1242
rrd_flag_set_archived(ri);
1243
@@ -1257,6 +1265,7 @@ static inline void rrdinstance_updated_rrdset_name(RRDSET *st) {
1265
if(unlikely(!st->rrdinstance)) return;
1266
1267
RRDINSTANCE *ri = rrdset_get_rrdinstance(st);
1268
+ if(unlikely(!ri)) return;
1269
1270
STRING *old = ri->name;
1271
ri->name = string_strdupz(st->name);
@@ -1285,6 +1294,7 @@ static inline void rrdinstance_updated_rrdset_flags_no_action(RRDINSTANCE *ri, R
1294
1295
static inline void rrdinstance_updated_rrdset_flags(RRDSET *st) {
1296
RRDINSTANCE *ri = rrdset_get_rrdinstance(st);
1297
+ if(unlikely(!ri)) return;
1298
1299
rrdinstance_updated_rrdset_flags_no_action(ri, st);
1300
@@ -1295,6 +1305,7 @@ static inline void rrdinstance_updated_rrdset_flags(RRDSET *st) {
1305
1306
static inline void rrdinstance_collected_rrdset(RRDSET *st) {
1307
RRDINSTANCE *ri = rrdset_get_rrdinstance(st);
1308
+ if(unlikely(!ri)) return;
1309
1310
rrdinstance_updated_rrdset_flags_no_action(ri, st);
1311