fixed an issue were the adjusted range to be evaluated was out of bounds
Costa Tsaousis (ktsaou) committed
Dec 4, 2015 at 02:14 UTC
8573ee24b93fb07121086d0a2ceaa6928a2a8450
1 file changed
+12
-27
src/rrd2json.c
+12
-27
@@ -996,7 +996,7 @@ static RRDR *rrdr_create(RRDSET *st, int n)
996
return r;
997
998
cleanup:
999
- error("Cannot allocate memory");
999
+ error("Cannot allocate RRDR memory for %d entries", n);
1000
if(likely(r)) rrdr_free(r);
1001
return NULL;
1002
}
@@ -1053,54 +1053,39 @@ RRDR *rrd2rrdr(RRDSET *st, long points, long long after, long long before, int g
1053
// round group to the closest integer
1054
if(available_points % points > points / 2) group++;
1055
1056
- // find the starting and ending slots in our round robin db
1057
- long start_at_slot = rrdset_time2slot(st, before),
1058
- stop_at_slot = rrdset_time2slot(st, after);
1059
-
1060
- // align them, so that panning on the data
1061
- // will always produce the same results
1062
- start_at_slot -= start_at_slot % group;
1063
- stop_at_slot -= stop_at_slot % group;
1064
-
1065
- time_t after_new = rrdset_slot2time(st, stop_at_slot);
1066
- time_t before_new = rrdset_slot2time(st, start_at_slot);
1056
+ time_t after_new = after - (after % (group * st->update_every));
1057
+ time_t before_new = before - (before % (group * st->update_every));
1058
long points_new = (before_new - after_new) / st->update_every / group;
1059
1060
+ // find the starting and ending slots in our round robin db
1061
+ long start_at_slot = rrdset_time2slot(st, before_new),
1062
+ stop_at_slot = rrdset_time2slot(st, after_new);
1063
+
1064
if(after_new < first_entry_t) {
1070
- error("after_new %u is before min %u", after_new, first_entry_t);
1071
- after_new = first_entry_t;
1072
- points_new = (before_new - after_new) / st->update_every / group;
1065
+ error("after_new %u is too small, minimum %u", after_new, first_entry_t);
1066
}
1067
if(after_new > last_entry_t) {
1075
- error("after_new %u is after max %u", after_new, last_entry_t);
1076
- after_new = last_entry_t;
1077
- points_new = (before_new - after_new) / st->update_every / group;
1068
+ error("after_new %u is too big, maximum %u", after_new, last_entry_t);
1069
}
1070
if(before_new < first_entry_t) {
1080
- error("before_new %u is before min %u", before_new, first_entry_t);
1081
- before_new = first_entry_t;
1082
- points_new = (before_new - after_new) / st->update_every / group;
1071
+ error("before_new %u is too small, minimum %u", before_new, first_entry_t);
1072
}
1073
if(before_new > last_entry_t) {
1085
- error("before_new %u is after max %u", before_new, last_entry_t);
1086
- before_new = last_entry_t;
1087
- points_new = (before_new - after_new) / st->update_every / group;
1074
+ error("before_new %u is too big, maximum %u", before_new, last_entry_t);
1075
}
1076
if(start_at_slot < 0 || start_at_slot >= st->entries) {
1077
error("start_at_slot is invalid %ld, expected %ld to %ld", start_at_slot, 0, st->entries - 1);
1078
start_at_slot = st->current_entry;
1092
- points_new = (before_new - after_new) / st->update_every / group;
1079
}
1080
if(stop_at_slot < 0 || stop_at_slot >= st->entries) {
1081
error("stop_at_slot is invalid %ld, expected %ld to %ld", stop_at_slot, 0, st->entries - 1);
1082
stop_at_slot = 0;
1097
- points_new = (before_new - after_new) / st->update_every / group;
1083
}
1084
if(points_new > (before_new - after_new) / group / st->update_every + 1) {
1085
error("points_new %ld is more than points %ld", points_new, (before_new - after_new) / group / st->update_every + 1);
1086
}
1087
1103
- //error("SHIFT: %s: wanted %ld points, got %ld - group=%ld, wanted duration=%u, got %u - wanted %ld - %ld, got %ld - %ld", st->id, points, points_new, group, before - after, before_new - after_new, after, before, after_new, before_new);
1088
+ // error("SHIFT: %s: wanted %ld points, got %ld - group=%ld, wanted duration=%u, got %u - wanted %ld - %ld, got %ld - %ld", st->id, points, points_new, group, before - after, before_new - after_new, after, before, after_new, before_new);
1089
1090
after = after_new;
1091
before = before_new;