src/rrd_fetch.c: Revert `rrd_fetch_r' to the original version again.
authorFlorian Forster <octo@verplant.org>
Wed, 2 Jul 2008 13:54:52 +0000 (15:54 +0200)
committerFlorian Forster <octo@verplant.org>
Wed, 2 Jul 2008 13:54:52 +0000 (15:54 +0200)
src/rrd.h
src/rrd_fetch.c
src/rrd_graph.c
src/rrd_tool.h

index daed0e2..b29d19d 100644 (file)
--- a/src/rrd.h
+++ b/src/rrd.h
@@ -223,7 +223,6 @@ extern    "C" {
             time_t *start,
             time_t *end,
             unsigned long *step,
-            const char *daemon,
             unsigned long *ds_cnt,
             char ***ds_namv,
             rrd_value_t **data);
index 26c3324..956c634 100644 (file)
@@ -74,6 +74,7 @@ int rrd_fetch(
     time_t    start_tmp = 0, end_tmp = 0;
     const char *cf;
     char *daemon = NULL;
+    int status;
 
     rrd_time_value_t start_tv, end_tv;
     char     *parsetime_error = NULL;
@@ -119,8 +120,8 @@ int rrd_fetch(
             break;
 
         case 'd':
-           if (daemon != NULL)
-                   free (daemon);
+            if (daemon != NULL)
+                    free (daemon);
             daemon = strdup (optarg);
             if (daemon == NULL)
             {
@@ -177,15 +178,36 @@ int rrd_fetch(
             if (daemon == NULL)
             {
                 rrd_set_error("strdup failed.");
-               return (-1);
+                return (-1);
             }
         }
     }
 
+    if (daemon != NULL)
+    {
+        status = rrdc_connect (daemon);
+        if (status != 0)
+        {
+            rrd_set_error ("rrdc_connect failed with status %i.", status);
+            return (-1);
+        }
+
+        status = rrdc_flush (argv[optind]);
+        if (status != 0)
+        {
+            rrd_set_error ("rrdc_flush (%s) failed with status %i.",
+                    argv[optind], status);
+            return (-1);
+        }
+
+        rrdc_disconnect ();
+    } /* if (daemon) */
+
     cf = argv[optind + 1];
 
-    if (rrd_fetch_r(argv[optind], cf, start, end, step, daemon, ds_cnt,
-                           ds_namv, data) != 0)
+    status = rrd_fetch_r(argv[optind], cf, start, end, step,
+            ds_cnt, ds_namv, data);
+    if (status != 0)
         return (-1);
     return (0);
 }
@@ -198,35 +220,18 @@ int rrd_fetch_r(
                          * will be changed to represent reality */
     unsigned long *step,    /* which stepsize do you want? 
                              * will be changed to represent reality */
-    const char *daemon,
     unsigned long *ds_cnt,  /* number of data sources in file */
     char ***ds_namv,    /* names of data_sources */
     rrd_value_t **data)
 {                       /* two dimensional array containing the data */
     enum cf_en cf_idx;
-    int status;
 
     if ((int) (cf_idx = cf_conv(cf)) == -1) {
         return -1;
     }
 
-    if (daemon != NULL)
-    {
-        status = rrdc_connect (daemon);
-        if (status != 0)
-        {
-            rrd_set_error ("rrdc_connect failed with status %i.", status);
-            return (-1);
-        }
-    }
-
-    status = rrd_fetch_fn (filename, cf_idx, start, end, step,
-            (daemon == NULL) ? 0 : 1,
-            ds_cnt, ds_namv, data);
-
-    rrdc_disconnect ();
-
-    return (status);
+    return (rrd_fetch_fn
+            (filename, cf_idx, start, end, step, ds_cnt, ds_namv, data));
 } /* int rrd_fetch_r */
 
 int rrd_fetch_fn(
@@ -237,7 +242,6 @@ int rrd_fetch_fn(
                          * will be changed to represent reality */
     unsigned long *step,    /* which stepsize do you want? 
                              * will be changed to represent reality */
-    int use_rrdcached,
     unsigned long *ds_cnt,  /* number of data sources in file */
     char ***ds_namv,    /* names of data_sources */
     rrd_value_t **data)
@@ -257,18 +261,6 @@ int rrd_fetch_fn(
     rrd_value_t *data_ptr;
     unsigned long rows;
 
-    if (use_rrdcached)
-    {
-        int status;
-
-        status = rrdc_flush (filename);
-        if (status != 0)
-        {
-            rrd_set_error ("rrdc_flush failed with status %i.", status);
-            return (-1);
-        }
-    }
-
 #ifdef DEBUG
     fprintf(stderr, "Entered rrd_fetch_fn() searching for the best match\n");
     fprintf(stderr, "Looking for: start %10lu end %10lu step %5lu\n",
index dbca157..f688d4c 100644 (file)
@@ -832,12 +832,41 @@ int data_fetch(
         if (!skip) {
             unsigned long ft_step = im->gdes[i].step;   /* ft_step will record what we got from fetch */
 
+            /* Flush the file if
+             * - a connection to the daemon has been established
+             * - this is the first occurrence of that RRD file
+             */
+            if (im->use_rrdcached)
+            {
+                int status;
+
+                status = 0;
+                for (ii = 0; ii < i; ii++)
+                {
+                    if (strcmp (im->gdes[i].rrd, im->gdes[ii].rrd) == 0)
+                    {
+                        status = 1;
+                        break;
+                    }
+                }
+
+                if (status == 0)
+                {
+                    status = rrdc_flush (im->gdes[i].rrd);
+                    if (status != 0)
+                    {
+                        rrd_set_error ("rrdc_flush (%s) failed with status %i.",
+                                im->gdes[i].rrd, status);
+                        return (-1);
+                    }
+                }
+            } /* if (im->use_rrdcached) */
+
             if ((rrd_fetch_fn(im->gdes[i].rrd,
                               im->gdes[i].cf,
                               &im->gdes[i].start,
                               &im->gdes[i].end,
                               &ft_step,
-                              im->use_rrdcached ? 1 : 0,
                               &im->gdes[i].ds_cnt,
                               &im->gdes[i].ds_namv,
                               &im->gdes[i].data)) == -1) {
index 63359b6..eb8846f 100644 (file)
@@ -82,7 +82,6 @@ extern    "C" {
             time_t *start,
             time_t *end,
             unsigned long *step,
-            int use_rrdcached,
             unsigned long *ds_cnt,
             char ***ds_namv,
             rrd_value_t **data);