Tobias Oetiker [Tue, 26 May 2009 07:13:52 +0000 (07:13 +0000)]
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
Tobias Oetiker [Mon, 25 May 2009 22:23:06 +0000 (22:23 +0000)]
While restoring, rrd_restore uses between 30 and 40 times as much memory as
the size of the rrd file to be restored. This is due to the use of libxml2
for parsing the the whole file prior to turning it into rrd structs.
This patch switches rrd_restore to using the xmlTextReader interface for
incremental consumtion of xml files. This reduces the memory requirements to
about twice the size of the rrd file which should be quite manageable for
most cases.
The parsing is about 25% less efficient than with the original libxml2
version of rrd_restore. This could be in part due to the more liberal use of
malloced memory. Optimizing this is for another day though.
Tobias Oetiker [Sun, 24 May 2009 10:31:44 +0000 (10:31 +0000)]
* in 1.3: Changed types used in rrd_file_t from off_t to size_t to prevent: warning: comparison between signed and unsigned
* Misc other off_t -> size_t changes to prevent signed warning
* in 1.3: Added rrd_dump_opt_r declaration to prevent undef warning
* Explicit cast to time_t of check in rrd_fetch to prevent signed warning
* Added vasprintf path to sprintf_alloc to prevent excessive mallocing
* in 1.3: fixed STRERROR_R_CHAR_P undef warning
Tobias Oetiker [Mon, 11 May 2009 21:25:57 +0000 (21:25 +0000)]
fix rrd_getops use of external variables (optarg and friends) ... most
prominently is kills a segfault when using rrdtool perl bindings on
solaris ... thanks to Ihsan Dogan for helping with tracking this down and providing
access to sparc solaris boxes.
This patch includes utility functions to support dynamically sized arrays.
This simplifies the code that manages some of the dynamic structures
inside rrdcached.
The bookkeeping of all threads is not necessary, since we cannot pthread_join() them anyway. We only need to know when the last one has exited. -- kevin
fix for #213 restore old behaviour of --lazy. Even in lazy mode all the data
calculation elements are run. The main time saving comes from the fact that
the graph is not being drawn and the image does not have to be compressed.
I thought that it would be nice to be able to pass
parameters to python bindings as a list (array) of strings. -- Vytautas Zdanavicius vytaszd at yahoo.com
printf for time_t with %lli can easily cause a segfault since on many platforms
time_t is only 32bit ... by adding (long long) to the time value this gets fixed.
Tobias Oetiker [Sat, 21 Mar 2009 09:53:30 +0000 (09:53 +0000)]
the call to rrd_flush has appeared when rrd_open was fleshed out. It used to be an fflush call
which is something entirely different than the current rrd_flush implementation with fdatasync was ...
we can safely drop this and gain performance for holt winters in the process ... -- tobi
Tobias Oetiker [Sun, 8 Mar 2009 08:02:38 +0000 (08:02 +0000)]
Renaming ntmake.pl to ntmake.PL (r1742) had unforseen side effects. At least
on freebsd ntmake.PL gets called automatically during build. This is not
desired. I renamed the file to ntmake-build sinc it gets called
explicilty on windows anyway. Reported by Kevin modified by Tobi
Tobias Oetiker [Fri, 6 Mar 2009 05:39:37 +0000 (05:39 +0000)]
Even though POSIX/XSI requires "strerror_r" to return an "int", some systems
(e.g. the GNU libc) return a "char *" _and_ ignore the second argument (user
provided buffer). The configure script now checks for that behavior using
AC_FUNC_STRERROR_R. rrd_strerror() in rrd_thread_safe.c has been updated to
(hopefully) handle all possible cases.
Previously, rrd_strerror() would have returned "strerror_r failed. sorry!" in
mostly any cases when using glibc, since "if (strerror_r())" had been used to
check for errors which evaluates to true if a (non-NULL) pointer was returned.
Now, we, at least, return the error number in case anything else fails.
Thanks to Alessandro Iurlano for reporting this issue after spotting it in
collectd <http://collectd.org>.
Tobias Oetiker [Wed, 14 Jan 2009 08:14:31 +0000 (08:14 +0000)]
In rrd_graph: the width/height values are written into rrd_infoval_t's u_cnt
but read out of u_int (u_long vs. int). This breaks on LP64BE. Patch by
Rafal Boni rafal pobox.com
Tobias Oetiker [Fri, 19 Dec 2008 14:26:47 +0000 (14:26 +0000)]
win32 fixes by Stefan . Ludewig . exitgames . com
* added portable plbasename since basename is not available on stock win32
* rrd_update was using %d to show a timestamp ... %lli is better
since it also will show 64bit time_t correctly.
Tobias Oetiker [Thu, 11 Dec 2008 10:01:33 +0000 (10:01 +0000)]
The spec file for building the rrdtool as an RPM that comes with the
release is not "friendly" to older versions of RHEL and derivatives.
-- Martin Sperl <rrdtool@martin.sperl.org>
Tobias Oetiker [Tue, 9 Dec 2008 18:30:43 +0000 (18:30 +0000)]
* forward ported right axis patch from 1.2 branche
* fixed --full-size-mode sizing issue when used in combination with --title
the work in the axis patch has been sponsored by VoltWerk.
Tobias Oetiker [Fri, 5 Dec 2008 15:18:11 +0000 (15:18 +0000)]
check for broken implementations of msync / MS_ASYNC where
the mtime does not get updated. warn and explicitly call utime
in rrd_open when a file is opened rw.
Tobias Oetiker [Wed, 3 Dec 2008 11:08:48 +0000 (11:08 +0000)]
When fetching data from 'past' an rra, rrd_fetch was seeking past the rrd
file. This did cause seek errors in some setups. Fixed. Thanks to Daniel Pocock for finding the problem.
Tobias Oetiker [Thu, 20 Nov 2008 13:04:38 +0000 (13:04 +0000)]
Attached a patch for the rrd-tool LIBDBI integration with the following improvements:
a) correct error handling in case of libdbi being unable to load the driver
was producing segmentation faults.
b) better parsing of datasources
* until now timestamp fields had to be integer and had to contain a unix
timestamp - now you can now also use DateTime fields (you still need to
specify it, as the time-range needs to be defined correctly)
* data fields are now no longer limited to (var)char or DOUBLE fields -
FLOAT, INTEGER,... are now also supported.
c) there is a bug with at least LIBDBI 0.8.1 in conjunction with mysql that
can result in segmentation faults when BINARY/BLOB fields are accessed -
rrdtool will now tell you about this fact before dying ;)
d) also the value of rrdderivemaxstep only gets applied if derive has been
selected correctly.
e) "GROUP BY timestamp" has been removed from SQL statement.
f) "ORDER BY timestamp" will be added only in the case of fetching "derived" data.
Tobias Oetiker [Tue, 18 Nov 2008 17:19:17 +0000 (17:19 +0000)]
win32 portability patch and win32/rrdlib.vcproj file for the source
-- christof wegmann Christof.Wegmann with exitgames.com
some fixes to make the result work on unix again ...
Tobias Oetiker [Tue, 11 Nov 2008 16:36:13 +0000 (16:36 +0000)]
This patch allows for multiple RRD writer threads to service the queue.
Now, rrdcached can have more simultaneous I/O requests into the kernel.
This may allow the kernel to re-order disk writes, resulting in better
disk throughput. In practice, throughput is increased by 2-3x.
The flush (-f) timer maintenance has been moved from queue_thread_main
into its own thread.
Be more careful about when to use pthread_cond_signal vs _broadcast, since
multiple threads may be waiting on &queue_cond.