From: Florian Forster Date: Fri, 7 Oct 2016 06:51:29 +0000 (+0200) Subject: Merge branch 'collectd-5.5' into collectd-5.6 X-Git-Tag: collectd-5.6.1~1 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=d0408cb0dbef15d739a6b1cd047e9c94d7643329;p=collectd.git Merge branch 'collectd-5.5' into collectd-5.6 --- d0408cb0dbef15d739a6b1cd047e9c94d7643329 diff --cc src/rrdcached.c index 04254194,42fd3a34..0b904053 --- a/src/rrdcached.c +++ b/src/rrdcached.c @@@ -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; @@@ -319,11 -344,26 +341,26 @@@ 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);