Search code examples
cthread-safetyrrdtoolrrd

How to call threadsafe rrd_update_r Round Robin Database function with C API?


Can anybody help me to find out how to call rrd_update_r function of the rrdtool c API from http://oss.oetiker.ch/rrdtool/index.en.html?

It was quite easy to call the non-threadsafe version of rrd_update, but this one is more tricky...

normal rrd_update:

  char *updateparams[] = {
        "rrdupdate",
        rrd_file,
        values,
        NULL
    };

    rrd_clear_error();
    result = rrd_update(3, updateparams); //argc is first arg

Because the programm has to run in a multithreaded environment I got several errors by not using the threadsafe functions! But it is not so easy to use rrd_update_r, because it requires a template too...

 int    rrd_update_r(const char *filename, const char *_template,
            int argc, const char **argv);

and I really have no idea how to create one...

    char *updateparams[] = {
        "rrdupdate",
        rrd_file,
        values,
        NULL
    };


    rrd_clear_error();
   result = rrd_update_r(rrd_file, NULL,3, updateparams);

does not work and produces the following error when executing it...

error: /var/tmp/rrds/1.rrd: expected timestamp not found in data source from rrdupdate

Hopefully someone can help me!

thx and br, roegi


Solution

  • Now it is working! Nemo - thx for your help! It was not exactly your solution but it was a hint to the right direction!

    It works with:

    /*
    rrd_file is a char * to "/var/tmp/1.rrd"
    NULL says not to use a template
    1 --> argc 
    values is a char * to "N:value-1:value-2:.....:value-n"
    */
    
    result = rrd_update_r(rrd_file, NULL, 1, (void *) &values);