Code

Merge branch 'collectd-5.5' into collectd-5.6
authorFlorian Forster <octo@collectd.org>
Fri, 7 Oct 2016 06:51:29 +0000 (08:51 +0200)
committerFlorian Forster <octo@collectd.org>
Fri, 7 Oct 2016 06:51:29 +0000 (08:51 +0200)
1  2 
contrib/examples/myplugin.c
src/daemon/common.c
src/rrdcached.c
src/vserver.c

Simple merge
Simple merge
diff --cc src/rrdcached.c
index 0425419445d738a6e80992c77c51b229112ca173,42fd3a34414969b139d8b0086c3016ebd7603f7b..0b9040536ecc165f0b9a85ea7bacd1d5866358d6
@@@ -291,6 -313,8 +311,7 @@@ static int rc_read (void
  {
    int status;
    rrdc_stats_t *head;
 -  rrdc_stats_t *ptr;
+   _Bool retried = 0;
  
    value_t values[1];
    value_list_t vl = VALUE_LIST_INIT;
      return (-1);
    }
  
-   head = NULL;
-   status = rrdc_stats_get (&head);
-   if (status != 0)
+   while (42)
    {
-     ERROR ("rrdcached plugin: rrdc_stats_get failed with status %i.", status);
+     /* The RRD client lib does not provide any means for checking a
+      * connection, hence we'll have to retry upon failed operations. */
+     head = NULL;
+     rrd_clear_error ();
+     status = rrdc_stats_get (&head);
+     if (status == 0)
+       break;
 -    if (! retried)
++    if (!retried)
+     {
+       retried = 1;
+       if (try_reconnect () == 0)
+         continue;
+       /* else: report the error and fail */
+     }
+     ERROR ("rrdcached plugin: rrdc_stats_get failed: %s (status=%i).",
+         rrd_get_error (), status);
      return (-1);
    }
  
@@@ -475,12 -517,25 +514,25 @@@ static int rc_write (const data_set_t *
      return (-1);
    }
  
-   status = rrdc_update (filename, /* values_num = */ 1, (void *) values_array);
-   if (status != 0)
+   while (42)
    {
-     ERROR ("rrdcached plugin: rrdc_update (%s, [%s], 1) failed with "
-         "status %i.",
-         filename, values_array[0], status);
+     /* The RRD client lib does not provide any means for checking a
+      * connection, hence we'll have to retry upon failed operations. */
+     rrd_clear_error ();
+     status = rrdc_update (filename, /* values_num = */ 1, (void *) values_array);
+     if (status == 0)
+       break;
 -    if (! retried)
++    if (!retried)
+     {
+       retried = 1;
+       if (try_reconnect () == 0)
+         continue;
+       /* else: report the error and fail */
+     }
+     ERROR ("rrdcached plugin: rrdc_update (%s, [%s], 1) failed: %s (status=%i)",
+         filename, values_array[0], rrd_get_error (), status);
      return (-1);
    }
  
@@@ -510,11 -567,25 +564,25 @@@ static int rc_flush (__attribute__((unu
      return (-1);
    }
  
-   status = rrdc_flush (filename);
-   if (status != 0)
+   while (42)
    {
-     ERROR ("rrdcached plugin: rrdc_flush (%s) failed with status %i.",
-         filename, status);
+     /* The RRD client lib does not provide any means for checking a
+      * connection, hence we'll have to retry upon failed operations. */
+     rrd_clear_error ();
+     status = rrdc_flush (filename);
+     if (status == 0)
+       break;
 -    if (! retried)
++    if (!retried)
+     {
+       retried = 1;
+       if (try_reconnect () == 0)
+         continue;
+       /* else: report the error and fail */
+     }
+     ERROR ("rrdcached plugin: rrdc_flush (%s) failed: %s (status=%i).",
+         filename, rrd_get_error (), status);
      return (-1);
    }
    DEBUG ("rrdcached plugin: rrdc_flush (%s): Success.", filename);
diff --cc src/vserver.c
Simple merge