@cryptotaxi247 / netdata-1 / commits / 8573ee24b

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;