From: oetiker Date: Tue, 26 May 2009 07:13:52 +0000 (+0000) Subject: resolve the "flush inconsistency": X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=commitdiff_plain;h=cd6581d4edf9cd9c73f023eb9b1f5529959bf816;hp=9e0553265a0b0d700d1b75891b97dc5cf1031680;ds=sidebyside resolve the "flush inconsistency": * rrd_flush (a leftover from when rrdtool was using stream based io) is turned into a no-op but still exported to preserve library compatibility. * rrd_cmd_flush (the implementation of "rrdtool flush") is renamed to rrd_flushcached along with its command line invocation which is now rrdtool flushcached --tobi git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@1812 a5681a0c-68f1-0310-ab6d-d61299d08faa --- diff --git a/doc/rrdflush.pod b/doc/rrdflush.pod deleted file mode 100644 index 5dbc60a..0000000 --- a/doc/rrdflush.pod +++ /dev/null @@ -1,54 +0,0 @@ -=head1 NAME - -rrdflush - Flush the values for a spcific RRD file from memory. - -=head1 SYNOPSIS - -B B -S<[B<--daemon> I
]> -I [I ...] - -=head1 DESCRIPTION - -The B function connects to L, the RRD caching daemon, -and issues a "flush" command for the given files. The daemon will put the -files to the head of the update queue so they are written "soon". The -status will be returned only after the files' pending updates have been -written to disk. - -=over 8 - -=item I - -The name(s) of the B file(s) that are to be written to disk. - -=item B<--daemon> I
- -Address of the L daemon. If not specified, the -RRDCACHED_ADDRESS environment variable must be set (see below). For a -list of accepted formats, see the B<-l> option in the L -manual. - - rrdtool flush --daemon unix:/var/run/rrdcached.sock /var/lib/rrd/foo.rrd - -=back - -=head1 ENVIRONMENT VARIABLES - -The following environment variables may be used to change the behavior of -Cflush>: - -=over 4 - -=item B - -If this environment variable is set it will have the same effect as specifying -the C<--daemon> option on the command line. If both are present, the command -line argument takes precedence. - -=back - -=head1 AUTHOR - -Florian Forster EoctoEatEverplant.orgE - diff --git a/doc/rrdflushcached.pod b/doc/rrdflushcached.pod new file mode 100644 index 0000000..3c14201 --- /dev/null +++ b/doc/rrdflushcached.pod @@ -0,0 +1,53 @@ +=head1 NAME + +rrdflush - Flush the values for a spcific RRD file from memory. + +=head1 SYNOPSIS + +B B +S<[B<--daemon> I
]> +I [I ...] + +=head1 DESCRIPTION + +The B function connects to L, the RRD caching daemon, +and issues a "flush" command for the given files. The daemon will put the +files to the head of the update queue so they are written "soon". The +status will be returned only after the files' pending updates have been +written to disk. + +=over 8 + +=item I + +The name(s) of the B file(s) that are to be written to disk. + +=item B<--daemon> I
+ +Address of the L daemon. If not specified, the +RRDCACHED_ADDRESS environment variable must be set (see below). For a +list of accepted formats, see the B<-l> option in the L +manual. + + rrdtool flush --daemon unix:/var/run/rrdcached.sock /var/lib/rrd/foo.rrd + +=back + +=head1 ENVIRONMENT VARIABLES + +The following environment variables may be used to change the behavior of +Cflushcached>: + +=over 4 + +=item B + +If this environment variable is set it will have the same effect as specifying +the C<--daemon> option on the command line. If both are present, the command +line argument takes precedence. + +=back + +=head1 AUTHOR + +Florian Forster EoctoEatEverplant.orgE diff --git a/src/librrd.sym.in.in b/src/librrd.sym.in.in index f947fe5..71ac3fb 100644 --- a/src/librrd.sym.in.in +++ b/src/librrd.sym.in.in @@ -2,7 +2,6 @@ rrd_add_ptr rrd_add_strdup rrd_clear_error rrd_close -rrd_cmd_flush rrd_create rrd_create_r rrd_dontneed @@ -10,8 +9,10 @@ rrd_dump rrd_dump_r rrd_fetch rrd_fetch_r +rrd_flushcached rrd_first rrd_first_r +rrd_flush rrd_free rrd_free_context rrd_free_ptrs diff --git a/src/rrd.h b/src/rrd.h index 0227ed4..412e20a 100644 --- a/src/rrd.h +++ b/src/rrd.h @@ -208,7 +208,7 @@ extern "C" { unsigned long *, char ***, rrd_value_t **); - int rrd_cmd_flush (int argc, char **argv); + int rrd_flushcached (int argc, char **argv); void rrd_freemem( void *mem); @@ -382,6 +382,9 @@ int rrd_proc_start_end( const void *buf, size_t count) RRD_DEPRECATED; + void rrd_flush( + rrd_file_t *rrd_file) + RRD_DEPRECATED; off_t rrd_seek( rrd_file_t *rrd_file, off_t off, diff --git a/src/rrd_flush.c b/src/rrd_flush.c deleted file mode 100644 index 1f72e80..0000000 --- a/src/rrd_flush.c +++ /dev/null @@ -1,115 +0,0 @@ -/** - * RRDTool - src/rrd_flush.c - * Copyright (C) 2008 Florian octo Forster - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; only version 2 of the License is applicable. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: - * Florian octo Forster - **/ - -#include "rrd_tool.h" -#include "rrd_client.h" - -int rrd_cmd_flush (int argc, char **argv) -{ - char *opt_daemon = NULL; - int status; - int i; - - /* initialize getopt */ - optind = 0; - opterr = 0; - - while (42) - { - int opt; - static struct option long_options[] = - { - {"daemon", required_argument, 0, 'd'}, - {0, 0, 0, 0} - }; - - opt = getopt_long(argc, argv, "d:", long_options, NULL); - - if (opt == -1) - break; - - switch (opt) - { - case 'd': - if (opt_daemon != NULL) - free (opt_daemon); - opt_daemon = strdup (optarg); - if (opt_daemon == NULL) - { - rrd_set_error ("strdup failed."); - return (-1); - } - break; - - default: - rrd_set_error ("Usage: rrdtool %s [--daemon ] ", - argv[0]); - return (-1); - } - } /* while (42) */ - - if ((argc - optind) < 1) - { - rrd_set_error ("Usage: rrdtool %s [--daemon ] [ ...]", argv[0]); - return (-1); - } - - /* try to connect to rrdcached */ - status = rrdc_connect(opt_daemon); - if (opt_daemon) free(opt_daemon); - if (status != 0) return status; - - if (! rrdc_is_connected(opt_daemon)) - { - rrd_set_error ("Daemon address unknown. Please use the \"--daemon\" " - "option to set an address on the command line or set the " - "\"%s\" environment variable.", - ENV_RRDCACHED_ADDRESS); - return (-1); - } - - status = 0; - for (int i = optind; i < argc; i++) - { - status = rrdc_flush(argv[i]); - if (status) - { - char *error; - int remaining; - - error = strdup(rrd_get_error()); - remaining = argc - optind - 1; - - rrd_set_error("Flushing of file \"%s\" failed: %s. Skipping " - "remaining %i file%s.", argv[i], - ((! error) || (*error == '\0')) ? "unknown error" : error, - remaining, (remaining == 1) ? "" : "s"); - free(error); - break; - } - } - - return ((status == 0) ? 0 : -1); -} /* int rrd_flush */ - -/* - * vim: set sw=4 sts=4 et fdm=marker : - */ diff --git a/src/rrd_flushcached.c b/src/rrd_flushcached.c new file mode 100644 index 0000000..fb9345b --- /dev/null +++ b/src/rrd_flushcached.c @@ -0,0 +1,115 @@ +/** + * RRDTool - src/rrd_flushcached.c + * Copyright (C) 2008 Florian octo Forster + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; only version 2 of the License is applicable. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: + * Florian octo Forster + **/ + +#include "rrd_tool.h" +#include "rrd_client.h" + +int rrd_flushcached (int argc, char **argv) +{ + char *opt_daemon = NULL; + int status; + int i; + + /* initialize getopt */ + optind = 0; + opterr = 0; + + while (42) + { + int opt; + static struct option long_options[] = + { + {"daemon", required_argument, 0, 'd'}, + {0, 0, 0, 0} + }; + + opt = getopt_long(argc, argv, "d:", long_options, NULL); + + if (opt == -1) + break; + + switch (opt) + { + case 'd': + if (opt_daemon != NULL) + free (opt_daemon); + opt_daemon = strdup (optarg); + if (opt_daemon == NULL) + { + rrd_set_error ("strdup failed."); + return (-1); + } + break; + + default: + rrd_set_error ("Usage: rrdtool %s [--daemon ] ", + argv[0]); + return (-1); + } + } /* while (42) */ + + if ((argc - optind) < 1) + { + rrd_set_error ("Usage: rrdtool %s [--daemon ] [ ...]", argv[0]); + return (-1); + } + + /* try to connect to rrdcached */ + status = rrdc_connect(opt_daemon); + if (opt_daemon) free(opt_daemon); + if (status != 0) return status; + + if (! rrdc_is_connected(opt_daemon)) + { + rrd_set_error ("Daemon address unknown. Please use the \"--daemon\" " + "option to set an address on the command line or set the " + "\"%s\" environment variable.", + ENV_RRDCACHED_ADDRESS); + return (-1); + } + + status = 0; + for (int i = optind; i < argc; i++) + { + status = rrdc_flush(argv[i]); + if (status) + { + char *error; + int remaining; + + error = strdup(rrd_get_error()); + remaining = argc - optind - 1; + + rrd_set_error("Flushing of file \"%s\" failed: %s. Skipping " + "remaining %i file%s.", argv[i], + ((! error) || (*error == '\0')) ? "unknown error" : error, + remaining, (remaining == 1) ? "" : "s"); + free(error); + break; + } + } + + return ((status == 0) ? 0 : -1); +} /* int rrd_flush */ + +/* + * vim: set sw=4 sts=4 et fdm=marker : + */ diff --git a/src/rrd_open.c b/src/rrd_open.c index 062de23..59526d8 100644 --- a/src/rrd_open.c +++ b/src/rrd_open.c @@ -675,6 +675,13 @@ ssize_t rrd_write( } +/* this is a leftover from the old days, it serves no purpose + and is therefore turned into a no-op */ +void rrd_flush( + rrd_file_t *rrd_file __attribute__((unused))) +{ +} + /* Initialize RRD header. */ void rrd_init( diff --git a/src/rrd_tool.c b/src/rrd_tool.c index 6ca537f..8f23326 100644 --- a/src/rrd_tool.c +++ b/src/rrd_tool.c @@ -57,7 +57,7 @@ void PrintUsage( N_ ("Valid commands: create, update, updatev, graph, graphv, dump, restore,\n" "\t\tlast, lastupdate, first, info, fetch, tune,\n" - "\t\tresize, xport, flush\n\n"); + "\t\tresize, xport, flushcached\n\n"); const char *help_listremote = N_("Valid remote commands: quit, ls, cd, mkdir, pwd\n\n"); @@ -119,9 +119,9 @@ void PrintUsage( "\t\t[-s|--start start] [-e|--end end]\n" "\t\t[--daemon
]\n\n"); - const char *help_flush = - N_("* flush - flush cached data out to an RRD file\n\n" - "\trrdtool flush filename.rrd\n" + const char *help_flushcached = + N_("* flushcached - flush cached data out to an RRD file\n\n" + "\trrdtool flushcached filename.rrd\n" "\t\t[--daemon
]\n\n"); /* break up very large strings (help_graph, help_tune) for ISO C89 compliance*/ @@ -229,7 +229,7 @@ void PrintUsage( C_LASTUPDATE, C_FIRST, C_UPDATE, C_FETCH, C_GRAPH, C_GRAPHV, C_TUNE, C_RESIZE, C_XPORT, C_QUIT, C_LS, C_CD, C_MKDIR, C_PWD, - C_UPDATEV, C_FLUSH + C_UPDATEV, C_FLUSHCACHED }; int help_cmd = C_NONE; @@ -254,8 +254,8 @@ void PrintUsage( help_cmd = C_UPDATEV; else if (!strcmp(cmd, "fetch")) help_cmd = C_FETCH; - else if (!strcmp(cmd, "flush")) - help_cmd = C_FLUSH; + else if (!strcmp(cmd, "flushcached")) + help_cmd = C_FLUSHCACHED; else if (!strcmp(cmd, "graph")) help_cmd = C_GRAPH; else if (!strcmp(cmd, "graphv")) @@ -316,8 +316,8 @@ void PrintUsage( case C_FETCH: fputs(_(help_fetch), stdout); break; - case C_FLUSH: - fputs(_(help_flush), stdout); + case C_FLUSHCACHED: + fputs(_(help_flushcached), stdout); break; case C_GRAPH: fputs(_(help_graph0), stdout); @@ -813,8 +813,8 @@ int HandleInputLine( } else if (strcmp("tune", argv[1]) == 0) rrd_tune(argc - 1, &argv[1]); - else if (strcmp("flush", argv[1]) == 0) - rrd_cmd_flush(argc - 1, &argv[1]); + else if (strcmp("flushcached", argv[1]) == 0) + rrd_flushcached(argc - 1, &argv[1]); else { rrd_set_error("unknown function '%s'", argv[1]); }