<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">I like this as an option, but I think it should be an option to rrdcached (eg: -p : allow rrdcached to create paths ) that supplements the 'allow create of rrd files' option?&nbsp; I
 dont think everyone will necessarily want rrdcached to be able to create a directory structure (eg: I wouldnt, as this would indicate something going wrong elsewhere)<br>
<br>
Steve<br>
<div><br>
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px"><strong>Steve Shipway</strong></div>
<div style="font-family:Tahoma; font-size:13px">University of Auckland ITS</div>
<div style="font-family:Tahoma; font-size:13px"><em>UNIX Systems Design Lead</em></div>
<div style="font-family:Tahoma; font-size:13px"><a href="mailto:s.shipway@auckland.ac.nz">s.shipway@auckland.ac.nz</a></div>
<div style="font-family:Tahoma; font-size:13px">Ph: &#43;64 9 373 7599 ext 86487</div>
<div style="font-family:Tahoma; font-size:13px"><em></em>&nbsp;</div>
</div>
</div>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div style="direction: ltr;" id="divRpF201730"><font color="#000000" face="Tahoma" size="2"><b>From:</b> rrd-developers-bounces&#43;steve=steveshipway.org@lists.oetiker.ch [rrd-developers-bounces&#43;steve=steveshipway.org@lists.oetiker.ch] on behalf of Marek.Schimara@ext.bull.net
 [Marek.Schimara@ext.bull.net]<br>
<b>Sent:</b> Friday, 27 April 2012 3:31 a.m.<br>
<b>To:</b> rrd-developers@lists.oetiker.ch<br>
<b>Subject:</b> [rrd-developers] rrdcached CREATE: the daemon should mkdir -p<br>
</font><br>
</div>
<div></div>
<div><font face="sans-serif" size="2">Hello,</font> <br>
<br>
<font face="sans-serif" size="2">I compiled the current trunk (r2287) and noticed that rrdcached can't create a RRD if the whole path to it doesn't exist; for example:</font>
<br>
<br>
<font face="Terminus" size="2">telnet localhost 42217</font> <br>
<font face="Terminus" size="2">Trying ::1...</font> <br>
<font face="Terminus" size="2">Trying 127.0.0.1...</font> <br>
<font face="Terminus" size="2">Connected to localhost.</font> <br>
<font face="Terminus" size="2">Escape character is '^]'.</font> <br>
<font face="Terminus" size="2">CREATE a/b/c.rrd -b 1335447997 DS:one:COUNTER:600:U:U RRA:AVERAGE:0.5:1:24</font>
<br>
<font face="Terminus" size="2"><b>-1 RRD Error: creating '/home/tests/rrd/data/a/b/c.rrd': No such file or directory</b></font>
<br>
<font face="Terminus" size="2">CREATE c.rrd -b 1335447997 DS:one:COUNTER:600:U:U RRA:AVERAGE:0.5:1:24</font>
<br>
<font face="Terminus" size="2">0 RRD created OK</font> <br>
<font face="Terminus" size="2">QUIT</font> <br>
<br>
<font face="sans-serif" size="2">where /home/tests/rrd/data is the daemons basedir. Could the following patch be considered?</font>
<br>
<br>
<font face="Terminus" size="2">--- rrd_daemon.c &nbsp; &nbsp; &nbsp; &nbsp;(revision 2287)</font> <br>
<font face="Terminus" size="2">&#43;&#43;&#43; rrd_daemon.c &nbsp; &nbsp; &nbsp; &nbsp;(working copy)</font> <br>
<font face="Terminus" size="2">@@ -1824,6 &#43;1824,8 @@</font> <br>
<font face="Terminus" size="2">&nbsp;static int handle_request_create (HANDLER_PROTO) /* {{{ */</font>
<br>
<font face="Terminus" size="2">&nbsp;{</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp;char *file, file_tmp[PATH_MAX];</font> <br>
<font face="Terminus" size="2">&#43; &nbsp;char *file_copy, *dir;</font> <br>
<font face="Terminus" size="2">&#43; &nbsp;struct stat st;</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp;char *tok;</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp;int ac = 0;</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp;char *av[128];</font> <br>
<font face="Terminus" size="2">@@ -1839,6 &#43;1841,17 @@</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp; &nbsp;return syntax_error(sock,cmd);</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp;/* get full pathname */</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp;get_abs_path(&amp;file, file_tmp);</font> <br>
<font face="Terminus" size="2">&#43; &nbsp;/* dirname may modify its argument */</font> <br>
<font face="Terminus" size="2">&#43; &nbsp;file_copy = strdup(file);</font> <br>
<font face="Terminus" size="2">&#43; &nbsp;if (file_copy == NULL) {</font> <br>
<font face="Terminus" size="2">&#43; &nbsp; &nbsp;return send_response(sock, RESP_ERR, &quot;Cannot create: empty argument.\n&quot;);</font>
<br>
<font face="Terminus" size="2">&#43; &nbsp;}</font> <br>
<font face="Terminus" size="2">&#43; &nbsp;dir = dirname(file_copy);</font> <br>
<font face="Terminus" size="2">&#43; &nbsp;if (stat(dir, &amp;st) != 0) {</font> <br>
<font face="Terminus" size="2">&#43; &nbsp; &nbsp; &nbsp;if (rrd_mkdir_p(dir, 0755) != 0) {</font> <br>
<font face="Terminus" size="2">&#43; &nbsp; &nbsp; &nbsp; &nbsp;return send_response(sock, RESP_ERR, &quot;Cannot create: %s\n&quot;, dir);</font>
<br>
<font face="Terminus" size="2">&#43; &nbsp; &nbsp; &nbsp;}</font> <br>
<font face="Terminus" size="2">&#43; &nbsp;}</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp;if (!check_file_access(file, sock)) {</font> <br>
<font face="Terminus" size="2">&nbsp; &nbsp; &nbsp;return send_response(sock, RESP_ERR, &quot;Cannot read: %s\n&quot;, file);</font>
<br>
<font face="Terminus" size="2">&nbsp; &nbsp;}</font> <br>
<br>
<font face="sans-serif" size="2">This would avoid having to connect to the remote machine which is running rrdcached only to create directory, and would allow to start rrdcached with an empty file tree and construct it as needed directly via the daemons' CREATE
 commands.</font> <br>
<font face="sans-serif" size="2">I guess the mode argument to rrd_mkdir_p() could be something better than a magic number :-) but I'm not sure what..</font>
<br>
<br>
<br>
<font face="sans-serif" size="2">thanks &amp; regards</font> <br>
<font face="sans-serif" size="2">Marek</font> <br>
</div>
</div>
</div>
</body>
</html>