> -----Original Message-----
> From: Tobias Oetiker [mailto:[EMAIL PROTECTED] 
> Sent: 27 November 2008 10:57
> To: Pocock, Daniel: IT (LDN)
> Cc: [email protected]
> Subject: Re: [rrd-developers] rrd_fetch seek issue
> 
> Hi Daniel,
> 
> (I have not yet looked at the code).
> 
> I just tried to reproduce the problem here and it did not work.
> 
> I guess you are hitting some sort of a corner case ... can 
> you create a little demo script ...


I encountered the problem in my patched version of trunk, so I decided
to explore it with an unpatched version of 1.2.15, as that is an
unpatched version I already have on a box.

My patched code is quite unforgiving - there is an assert() for bad
seeks.  That's how I discovered the problem.

Testing with 1.2.15, there is also a seek beyond the end of the file,
and NaN data is returned by rrd_fetch.

NOW=`date +%s`
START_T=`expr $NOW - 3600`
TS2=`expr $START_T + 10`
TS3=`expr $START_T + 20`

rrdtool create /tmp/test1.rrd \
    --start ${START_T} \
    --step 10 \
    DS:ds0:COUNTER:900:U:U \
    RRA:AVERAGE:0.8:1:180

$ ls -l /tmp/test1.rrd 
-rw-r--r--  1 daniel daniel 1984 Nov 27 16:28 /tmp/test1.rrd

# notice the file size is 1984 bytes, consistent with 180 rows in the
RRA
# put in a couple of updates with old time stamps:

rrdtool update /tmp/test1.rrd ${TS2}:1000
rrdtool update /tmp/test1.rrd ${TS3}:2000


# Notice that last_update is over 1 hour ago
# There can only be data for 30 minutes (180 rows)
$ rrdtool info /tmp/test1.rrd |grep last_upd
last_update = 1227799751
$ date +%s
1227804688

# Now I inspect the fetch code, notice how the seek is for
# 544 + (569 * 1 * 8) = 5096
# which is beyond the end of the file

$ gdb rrdtool

set args fetch /tmp/test1.rrd AVERAGE -r 10 -s -60s 

Breakpoint 3, rrd_fetch_fn (
    filename=0xfffffe76 <Address 0xfffffe76 out of bounds>,
cf_idx=CF_AVERAGE, 
    start=0xbffb8868, end=0xbffb886c, step=0xbffb8870,
ds_cnt=0xbffb8874, 
    ds_namv=0xbffb8878, data=0xbffb887c) at rrd_fetch.c:346
346         if (start_offset <= 0)
(gdb) next
338         end_offset = (long)(rra_end_time - *end ) / (long)*step; 
(gdb) next
346         if (start_offset <= 0)
(gdb) 
349             rra_pointer =
rrd.rra_ptr[chosen_rra].cur_row+1+start_offset;
(gdb) 
351         if(fseek(in_file,(rra_base 
(gdb) print rra_base
$1 = 544
(gdb) print rra_pointer
$2 = 569
(gdb) print *ds_cnt
$3 = 1
(gdb) next
372         for (i=start_offset;
(gdb) print ftell(in_file)
$4 = 5096
_______________________________________________

This e-mail may contain information that is confidential, privileged or 
otherwise protected from disclosure. If you are not an intended recipient of 
this e-mail, do not duplicate or redistribute it by any means. Please delete it 
and any attachments and notify the sender that you have received it in error. 
Unless specifically indicated, this e-mail is not an offer to buy or sell or a 
solicitation to buy or sell any securities, investment products or other 
financial product or service, an official confirmation of any transaction, or 
an official statement of Barclays. Any views or opinions presented are solely 
those of the author and do not necessarily represent those of Barclays. This 
e-mail is subject to terms available at the following link: 
www.barcap.com/emaildisclaimer. By messaging with Barclays you consent to the 
foregoing.  Barclays Capital is the investment banking division of Barclays 
Bank PLC, a company registered in England (number 1026167) with its registered 
offic
 e at 1 Churchill Place, London, E14 5HP.  This email may relate to or be sent 
from other members of the Barclays Group.
_______________________________________________

_______________________________________________
rrd-developers mailing list
[email protected]
https://lists.oetiker.ch/cgi-bin/listinfo/rrd-developers

Reply via email to