summaryrefslogtreecommitdiffstats
path: root/database/engine/metric.c
diff options
context:
space:
mode:
Diffstat (limited to 'database/engine/metric.c')
-rw-r--r--database/engine/metric.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/database/engine/metric.c b/database/engine/metric.c
index af769fda95..d16bc063d9 100644
--- a/database/engine/metric.c
+++ b/database/engine/metric.c
@@ -327,33 +327,42 @@ bool mrg_metric_set_first_time_s_if_bigger(MRG *mrg __maybe_unused, METRIC *metr
return ret;
}
-bool mrg_metric_set_first_time_s_if_zero(MRG *mrg __maybe_unused, METRIC *metric, time_t first_time_s) {
- bool ret = false;
+time_t mrg_metric_get_first_time_s(MRG *mrg __maybe_unused, METRIC *metric) {
+ time_t first_time_s;
netdata_spinlock_lock(&metric->spinlock);
- if(!metric->first_time_s) {
- metric->first_time_s = first_time_s;
- ret = true;
+
+ if(unlikely(!metric->first_time_s)) {
+ if(metric->latest_time_s_clean)
+ metric->first_time_s = metric->latest_time_s_clean;
+
+ else if(metric->latest_time_s_hot)
+ metric->first_time_s = metric->latest_time_s_hot;
}
+
+ first_time_s = metric->first_time_s;
+
netdata_spinlock_unlock(&metric->spinlock);
- return ret;
+ return first_time_s;
}
-time_t mrg_metric_get_first_time_s(MRG *mrg __maybe_unused, METRIC *metric) {
- time_t first_time_s;
+void mrg_metric_get_retention(MRG *mrg __maybe_unused, METRIC *metric, time_t *first_time_s, time_t *last_time_s, time_t *update_every_s) {
netdata_spinlock_lock(&metric->spinlock);
- first_time_s = metric->first_time_s;
- if(!first_time_s) {
+
+ if(unlikely(!metric->first_time_s)) {
if(metric->latest_time_s_clean)
- first_time_s = metric->latest_time_s_clean;
+ metric->first_time_s = metric->latest_time_s_clean;
- if(!first_time_s || metric->latest_time_s_hot < metric->latest_time_s_clean)
- first_time_s = metric->latest_time_s_hot;
+ else if(metric->latest_time_s_hot)
+ metric->first_time_s = metric->latest_time_s_hot;
}
- netdata_spinlock_unlock(&metric->spinlock);
- return first_time_s;
+ *first_time_s = metric->first_time_s;
+ *last_time_s = MAX(metric->latest_time_s_clean, metric->latest_time_s_hot);
+ *update_every_s = metric->latest_update_every_s;
+
+ netdata_spinlock_unlock(&metric->spinlock);
}
bool mrg_metric_set_clean_latest_time_s(MRG *mrg __maybe_unused, METRIC *metric, time_t latest_time_s) {