@cryptotaxi247 / netdata-1 / commits / e5aca2581

bug-fix: fixed aligned queries that returned no data (#4472)

Costa Tsaousis committed Oct 24, 2018 at 04:34 UTC e5aca2581e137337f384dc5d48ae86593b808bd3
1 file changed +22 -17
web/api/queries/query.c
+22 -17
@@ -334,7 +334,7 @@ static void rrd2rrdr_log_request_response_metdata(RRDR *r
334 // duration
335 , (size_t)(r->before - r->after + r->st->update_every)
336 , (size_t)(before_wanted - after_wanted + r->st->update_every)
337 - , (size_t)(before_requested - after_requested + r->st->update_every)
337 + , (size_t)(before_requested - after_requested)
338 , (size_t)((rrdset_last_entry_t(r->st) - rrdset_first_entry_t(r->st)) + r->st->update_every)
339
340 // slot
@@ -468,22 +468,25 @@ RRDR *rrd2rrdr(
468 }
469 }
470
471 - size_t before_slot, after_slot;
471 + // now that we have group,
472 + // align the requested timeframe to fit it.
473
473 - time_t before_wanted = before_requested - (before_requested % ( ((aligned)?group:1) * st->update_every )) + ( ((aligned)?group:1) * st->update_every );
474 - if(unlikely(before_wanted > last_entry_t)) {
475 - before_wanted = last_entry_t - (last_entry_t % ((aligned) ? group : 1) * st->update_every);
474 + if(aligned) {
475 + // alignement has been requested, so align the values
476 + before_requested -= (before_requested % group);
477 + after_requested -= (after_requested % group);
478 + }
479
477 - if(unlikely(before_wanted > last_entry_t)) {
478 - #ifdef NETDATA_INTERNAL_CHECKS
479 - error("INTERNAL ERROR: rrd2rrdr() on %s, before_wanted is after db max", st->name);
480 - #endif
480 + // we align the request on requested_before
481 + time_t before_wanted = before_requested;
482 + if(likely(before_wanted > last_entry_t)) {
483 + #ifdef NETDATA_INTERNAL_CHECKS
484 + error("INTERNAL ERROR: rrd2rrdr() on %s, before_wanted is after db max", st->name);
485 + #endif
486
482 - while(before_wanted > last_entry_t)
483 - before_wanted -= (((aligned) ? group : 1) * st->update_every);
484 - }
487 + before_wanted = last_entry_t - (last_entry_t % ( ((aligned)?group:1) * st->update_every ));
488 }
486 - before_slot = rrdset_time2slot(st, before_wanted);
489 + size_t before_slot = rrdset_time2slot(st, before_wanted);
490
491 // we need to estimate the number of points, for having
492 // an integer number of values per point
@@ -502,11 +505,10 @@ RRDR *rrd2rrdr(
505 error("INTERNAL ERROR: rrd2rrdr() on %s, after_wanted is before db min", st->name);
506 #endif
507
505 - while(after_wanted < first_entry_t)
506 - after_wanted += (((aligned) ? group : 1) * st->update_every);
508 + after_wanted = first_entry_t - (first_entry_t % ( ((aligned)?group:1) * st->update_every )) + ( ((aligned)?group:1) * st->update_every );
509 }
510 }
509 - after_slot = rrdset_time2slot(st, after_wanted);
511 + size_t after_slot = rrdset_time2slot(st, after_wanted);
512
513 // check if they are reversed
514 if(unlikely(after_wanted > before_wanted)) {
@@ -527,9 +529,9 @@ RRDR *rrd2rrdr(
529 points_wanted = 0;
530 }
531
532 +#ifdef NETDATA_INTERNAL_CHECKS
533 duration = before_wanted - after_wanted;
534
532 -#ifdef NETDATA_INTERNAL_CHECKS
535 if(after_wanted < first_entry_t)
536 error("INTERNAL CHECK: after_wanted %u is too small, minimum %u", (uint32_t)after_wanted, (uint32_t)first_entry_t);
537
@@ -718,6 +720,9 @@ RRDR *rrd2rrdr(
720 //if(aligned && (r->after % group) != 0)
721 // rrd2rrdr_log_request_response_metdata(r, group_method, aligned, group, group_time_requested, group_points, after_wanted, after_requested, before_wanted, before_requested, points_requested, points_wanted, after_slot, before_slot, "'after' is not aligned but alignment is required");
722
723 + if(r->before != before_requested)
724 + rrd2rrdr_log_request_response_metdata(r, group_method, aligned, group, group_time_requested, group_points, after_wanted, after_requested, before_wanted, before_requested, points_requested, points_wanted, after_slot, before_slot, "chart is not aligned to requested 'before'");
725 +
726 if(r->before != before_wanted)
727 rrd2rrdr_log_request_response_metdata(r, group_method, aligned, group, group_time_requested, group_points, after_wanted, after_requested, before_wanted, before_requested, points_requested, points_wanted, after_slot, before_slot, "got 'before' is not wanted 'before'");
728