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.
Tobias Oetiker [Fri, 7 Nov 2008 14:07:53 +0000 (14:07 +0000)]
As some of you may know that I have created a patch for rrdtool 1.2 a few years ago, so that a database could be queried for
values for graphing.
The patch has been mostly rewritten and the following changes have been made:
* high dependency on mysql has been reduced by avoiding the
temporary tables (which was bad for mysql replication)
* The number of executed SQL-Statements for one CDEF has been
reduced to 1 compared to 11 SQLs (including CREATE TEMPORARY
TABLE) - for patch against version 1.2
* All consolidation is done in rrdtool itself (MIN,MAX,AVERAGE)
* Additional consolidation functions are COUNT and SIGMA, which give
information on statistics on a per "time-bin" basis.
* All these consolidation values are always returned as separate
columns, that are returned by RRD and the consolidation function
given as Argument is ignored.
Main reason is that this way there is only one call to rrd_fetcht
and thus the database even if we need to fetch for example min,
avg and max. Compare this to 3 calls in case of different
consolidation functions - and if you want to get SIGMA and COUNT
as well it is still only one call to the backend and the database.
* Some previous existing features have been taken out at the moment
to allow for this reduced set of SQL queries.
o prediction using the values from the last X days at the same
time
o the corresponding sigma calculation
* The idea is to create generic CDEF's that will do the same thing,
but that is also available when using RRD-files (similar to TREND,
but with another scope)
This will get posted as a separate patch.
* Overall performance should be much better and the patch as a whole
simpler.
* The patch also includes modifications to the configuration
infrastructure, to make libdbi support optional.
Tobias Oetiker [Fri, 7 Nov 2008 13:51:24 +0000 (13:51 +0000)]
Much simpler handling of timestamp errors. Return an error to the user
when any of the time stamp values are invalid. This is similar to
RRDTool's normal behavior. Removed the complex logic previously used to
return error codes to the user.
This solves a bug where non-advancing timestamps could have produced
incorrect error output during "BATCH" mode. The bug was cause by using
the sock->wbuf pointer for the error output. -- kevin brintnall
Tobias Oetiker [Tue, 4 Nov 2008 07:12:46 +0000 (07:12 +0000)]
I realize now that the problem is the line
test -f lua/Makefile && cd lua && $(MAKE) install || true
in the target "install-data-local", in bindings/Makefile.am. It forces
execution of bindings/lua/Makefile independently of lua being found or
not. I added that line in my first patch, following perl, python and
ruby build style, but it's not needed after I switched to automake. The
make recursion is controlled by SUBDIRS, which will only contain "lua"
if BUILD_LUA is true.