]> source.dussan.org Git - rspamd.git/commitdiff
Fix rra updates.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 15 Sep 2015 16:00:05 +0000 (17:00 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 15 Sep 2015 16:00:05 +0000 (17:00 +0100)
src/libutil/rrd.c

index 937b960964ed12464199306744ba684594d5309a..7364a8729731b0ac441af2a33a65659a058f1a4c 100644 (file)
@@ -657,8 +657,9 @@ rspamd_rrd_finalize (struct rspamd_rrd_file *file, GError **err)
        /* Adjust CDP */
        for (i = 0; i < file->stat_head->rra_cnt; i++) {
                file->cdp_prep->scratch[CDP_unkn_pdp_cnt].lv = 0;
-               /* Randomize row pointer */
-               file->rra_ptr->cur_row = g_random_int () % file->rra_def[i].row_cnt;
+               /* Randomize row pointer (disabled) */
+               /* file->rra_ptr->cur_row = g_random_int () % file->rra_def[i].row_cnt; */
+               file->rra_ptr->cur_row = file->rra_def[i].row_cnt - 1;
                /* Calculate values count */
                count += file->rra_def[i].row_cnt * file->stat_head->ds_cnt;
        }
@@ -952,9 +953,12 @@ rspamd_rrd_update_cdp (struct rspamd_rrd_file *file,
                                        }
                                }
 
-                               msg_debug_rrd ("update cdp %d with value %.3f, "
+                               scratch[CDP_unkn_pdp_cnt].lv = 0;
+
+                               msg_debug_rrd ("update cdp for DS %d with value %.3f, "
                                                "stored value: %.3f, carry: %.3f",
-                                               i, last_cdp, cur_cdp, scratch[CDP_val].dv);
+                                               i, last_cdp,
+                                               scratch[CDP_primary_val].dv, scratch[CDP_val].dv);
                        }
                        /* In this case we just need to update cdp_prep for this RRA */
                        else {
@@ -1015,33 +1019,33 @@ rspamd_rrd_update_cdp (struct rspamd_rrd_file *file,
 void
 rspamd_rrd_write_rra (struct rspamd_rrd_file *file, gulong *rra_steps)
 {
-       guint i, j, scratch_idx, cdp_idx, k;
+       guint i, j, ds_cnt;
        struct rrd_rra_def *rra;
-       gdouble *rra_row;
+       struct rrd_cdp_prep *cdp;
+       gdouble *rra_row = file->rrd_value, *cur_row;
+
 
+       ds_cnt = file->stat_head->ds_cnt;
        /* Iterate over all RRA */
        for (i = 0; i < file->stat_head->rra_cnt; i++) {
                rra = &file->rra_def[i];
-               /* How much steps need to be updated */
-               for (j = 0, scratch_idx = CDP_primary_val;
-                       j < rra_steps[i];
-                       j++, scratch_idx = CDP_secondary_val) {
+
+               if (rra_steps[i] > 0) {
+
                        /* Move row ptr */
                        if (++file->rra_ptr[i].cur_row >= rra->row_cnt) {
                                file->rra_ptr[i].cur_row = 0;
                        }
                        /* Calculate seek */
-                       rra_row = file->rrd_value +
-                               (file->stat_head->ds_cnt * i + file->rra_ptr[i].cur_row);
+                       cdp = &file->cdp_prep[ds_cnt * i];
+                       cur_row = rra_row + ds_cnt * file->rra_ptr[i].cur_row;
                        /* Iterate over DS */
-                       for (k = 0; k < file->stat_head->ds_cnt; k++) {
-                               cdp_idx = i * file->stat_head->ds_cnt + k;
-                               memcpy (rra_row,
-                                       &file->cdp_prep[cdp_idx].scratch[scratch_idx].dv,
-                                       sizeof (gdouble));
-                               rra_row++;
+                       for (j = 0; j < ds_cnt; j++) {
+                               cur_row[j] = cdp[j].scratch[CDP_primary_val].dv;
                        }
                }
+
+               rra_row += rra->row_cnt * ds_cnt;
        }
 }